奇异值分解(SVD)的应用广泛,它在数据降维,推荐系统以及自然语言处理等方面都有突出的表现,另外,它还是PCA算法简化的基石。
SVD原理
我们假设有n * m的矩阵 X,的阶为r。作为引出SVD的准备,我有以下定义:
1. 为的特征向量,v_i为m维,对应的特征值为,所以有
2. 定义为X的奇异值。
3. 定义为,显然u_i为n维。
可以规定是规范正交的,如此也是规范正交的。接下来我们要构造对角矩阵 :
这里是经过排序的奇异值。同理,我们可以定义对应的正交矩阵:
其中多出的m - r、n - r个元素可以用施密特正交化以及得出,如此,我们便有:
由于V是正交矩阵,所以又有:
以上,可以看到SVD的求解过程:要求取V,对做特征值分解即可。求取V之后,利用求U便不难了。
SVD的矩阵近似
对SVD公式做一下变换,我们可以得到:
奇异值大于零,且u_i、v_i为规范化的向量,那么是否可以在上式的r个元素中取奇异值比较大的k个元素来代表整个矩阵呢?如果我们使用这种方法,则
这样,矩阵可以简化为更小的三个矩阵。
SVD与PCA的关系
我们知道PCA本质上是一个特征分解问题,SVD也是一个特征分解问题,也就是说我们可以用求SVD的方法来间接解决PCA问题。假设有数据矩阵X,对于PCA,我们需要对于做特征值分解,P即为我们要求的;对于SVD,我们易得,很明显,U和P是等价的。
那么为什么我们要用SVD的方式去求解PCA呢?PCA由于要对矩阵做特征值分解,其复杂度是矩阵大小3次方。这个计算量是非常巨大的,但SVD虽然本质也是特征值分解问题,但是可以通过非特征分解的方式间接求解,所以复杂度相对来说要低。
参考文献:
[1] A Tutorial on Principal Component Analysis