奇异值分解(Singular Value Decomposition,简称SVD)是在机器学习领域广泛应用的算法,它不仅可以用于降维算法中的特征分解,还可以用于推荐系统,以及自然语言处理等领域。本文通过分析原理,推导公式,以及具体实例演示来总结一下SVD。
方阵:行数等于列数矩阵
对角阵:只有对角线上有非0元素的矩阵
对称阵:元素以主对角线为对称轴对应相等的矩阵,总能相似对角化,其不同特征值对应的特征向量两两正交
正交阵:满足
A
A
T
=
E
或者
A
T
A
=
E
AA^T = E或者A^TA = E
AAT=E或者ATA=E的n阶方阵A,
其中E为n阶单位矩阵,满足性质
A
T
=
A
−
1
A^T = A^{-1}
AT=A−1任意两向量点乘等于0,即
(
x
i
∗
x
j
)
=
0
(x_i*x_j) = 0
(xi∗xj)=0 即同一向量点乘等于1,即
(
x
i
∗
x
j
)
=
∣
x
i
∣
2
=
1
(x_i*x_j) = |x_i|^2 = 1
(xi∗xj)=∣xi∣2=1
任意矩阵:A,
A
T
A
A^TA
ATA为对称阵。
设A为n阶矩阵,
λ
\lambda
λ是一个数,若存在n维非零向量x,使得:
A
x
=
λ
x
(
x
≠
0
)
Ax = \lambda x (x \not = 0 )
Ax=λx(x=0)
则称
λ
\lambda
λ是A的特征值,x是A对应于
λ
\lambda
λ的特征向量。
一个矩阵通常由其特征值和特征向量完全描述,那特征向量是在方向不变的条件下简单地乘以一个缩放因子的非零向量,特征向量对应的特征值是它所乘的那个缩放因子。
既然我们知道一个矩阵是可以通过特征值和特征向量来表示,那假设存在一个n×n的满秩对称矩阵A,我们便可以通过特征值将A分解。
首先求出A的n个特征值
λ
1
,
λ
2
,
.
.
.
,
λ
n
\lambda_1,\lambda_2,...,\lambda_n
λ1,λ2,...,λn
以及对应的特征向量(此时指标准化处理后)
x
1
,
x
2
,
.
.
.
,
x
n
x_1,x_2,...,x_n
x1,x2,...,xn
即:
此时,我们用U表示特征向量组成的矩阵:
这里重点说一下U,因为
U
U
U是对称矩阵的特征向量,所以内部两两向量是正交,并且刚才标准化处理过,此时
U
U
U就成了正交矩阵,根据前面提到的性质:
U
T
=
U
−
1
U^T = U^{-1}
UT=U−1 即:
在特征值分解时,A是n×n的满秩对称矩阵,那如果是一个m×n的普通矩阵呢?这时再想分解矩阵A,就需要SVD了。
即:
此时我们用
V
V
V表示成特征向量组成的矩阵:
去单位向量:
特征值分解是在一个标准正交基里进行分解,而奇异值分解时在两个标准正交基里进行分解。
#使用SVD进行降维,components设为120,对于SVM来说,SVD的components的合适调整区间一般为120~200
svd = decomposition.TruncatedSVD(n_components=120)
svd.fit(xtrain_tfv)
xtrain_svd = svd.transform(xtrain_tfv)
xvalid_svd = svd.transform(xvalid_tfv)
class sklearn.decomposition.TruncatedSVD(n_components=2, *, algorithm=‘randomized’, n_iter=5, random_state=None, tol=0.0)
参数:
SVD算法学习
会自己将各种奇异值分解算法,全部将其 搞定,慢慢的全部完成都行啦的样子与打算。
全部将其搞定都行啦的理由与样子。全部将其研究透彻。研究彻底。