奇异值分解(SVD)简介

奇异值分解(SVD)的应用广泛,它在数据降维,推荐系统以及自然语言处理等方面都有突出的表现,另外,它还是PCA算法简化的基石。

SVD原理

我们假设有n * m的矩阵 X,X^{T}X的阶为r。作为引出SVD的准备,我有以下定义:

1. X^{T}X的特征向量,v_i为m维,对应的特征值为,所以有

                                                                    

2. 定义为X的奇异值。

3. 定义为,显然u_i为n维。

可以规定是规范正交的,如此也是规范正交的。接下来我们要构造对角矩阵 \Sigma:

                                                  

这里是经过排序的奇异值。同理,我们可以定义对应的正交矩阵:

                                                        

其中多出的m - r、n - r个元素可以用施密特正交化以及得出,如此,我们便有:

                                                                    

由于V是正交矩阵,所以又有:

                                                                    

以上,可以看到SVD的求解过程:要求取V,对X^{T}X做特征值分解即可。求取V之后,利用求U便不难了。

SVD的矩阵近似

对SVD公式做一下变换,我们可以得到:

                                                                  X = \sum_{i=1}^r \sigma_i u_i v_i^{T}

奇异值大于零,且u_i、v_i为规范化的向量,那么是否可以在上式的r个元素中取奇异值比较大的k个元素来代表整个矩阵呢?如果我们使用这种方法,则

                                                              X = \sum_{i=1}^r \sigma_i u_i v_i^{T} \\ \approx \sum_{i=1}^k \sigma_i u_i v_i^{T} \\ = U_{m \times k} \Sigma_{k \times k} V_{k \times n}

这样,矩阵可以简化为更小的三个矩阵。

SVD与PCA的关系

我们知道PCA本质上是一个特征分解问题,SVD也是一个特征分解问题,也就是说我们可以用求SVD的方法来间接解决PCA问题。假设有数据矩阵X,对于PCA,我们需要对于S= \frac{1}{N} \sum_{n=1}^N \textbf{x}_n\textbf{x}_n^T=\frac{1}{N} XX^T做特征值分解S = PDP^T,P即为我们要求的;对于SVD,我们易得XX^{T} = U(\frac{1}{N}\Sigma \Sigma^T )U^T,很明显,U和P是等价的。

那么为什么我们要用SVD的方式去求解PCA呢?PCA由于要对矩阵做特征值分解,其复杂度是矩阵大小3次方。这个计算量是非常巨大的,但SVD虽然本质也是特征值分解问题,但是可以通过非特征分解的方式间接求解,所以复杂度相对来说要低。

参考文献:

[1] A Tutorial on Principal Component Analysis

猜你喜欢

转载自blog.csdn.net/xiaomeng29/article/details/89143106