1.PCA 的数学原理
主成分分析是研究如何把多个指标转化为少数几个综合指标的统计方法。
设随机向量 .当
个分量的大部分变差能由
个主成分概括时,可认为包含在这
个主成分内的信息与原始的
个变量大致一样多。此时可以用这
个主成分替代原来的
个变量,从而对高维的数据起到降维的效果。
设总体 的协方差矩阵为
,考虑以下线性组合
<br />
则
注:方差也可用表示,它是 Variance 的缩写
主成分即为总体 分量的线性组合
,我们要求方差
尽可能大(表示数据在第
个主成分上的离散程度尽可能大,并且
互不相关(意味着每一个主成分与它之前所有的主成分的构成的协方差值均为 0 )
当我们需要找到方差的最大值时,我们发现,如果不限制系数向量 的取值,方差的大小会受到它取值的影响。因此我们规定系数向量
为单位向量,即
之后我们求单位向量 ,使得 达到最大,此时称 为第一主成分;
再求单位向量 ,使得
达到最大的同时,
,此时称
为第二主成分;
如此循环继续下去,我们就找到了 个主成分。
一般地,若单位向量 满足约束条件
且使 达到最大,则称
为随机向量
的第
主成分。
引理1.1 设 为
的特征值,则
,
注:这里的 跟上文中的总体
的含义不同,这里的
指的是任意一个单位向量。
引理1.1可以通过矩阵的对角化进行证明,由于协方差矩阵 是对称半正定矩阵,因此对角化之后具有很多良好的性质,便于我们进行证明和计算,
定理1.1 设 为
的特征值,
为对应的单位正交特征向量,则第
个主成分为
且有
定理1.2 设定理1.1的条件成立,记 .则
定义1.1 称 为第
个主成分
的方差贡献率,称
为主成分
的累计贡献率.
累积贡献率表明前 个主成分的方差和占总方差的比例。它用于表示对数据进行降维的过程中,保留的主成分所包含的信息量。为了避免损失过多的信息,我们一般使前
个主成分的累计贡献率达到80%以上。
定理1.3 设定理1.1的条件成立,记 .则
与
%22%20aria-hidden%3D%22true%22%3E%0A%20%3Cuse%20xlink%3Ahref%3D%22%23E1-MJMATHI-58%22%20x%3D%220%22%20y%3D%220%22%3E%3C%2Fuse%3E%0A%3C%2Fg%3E%0A%3C%2Fsvg%3E#card=math&code=X&id=IKmO6) 的第
个分变量
的相关系数为
系数向量 的第
个分量为
,它刻画了
的第
个分量
对第
个主成分的影响程度。
2.PCA 的算法步骤
我们首先假设有 条
维数据。
- 将原始数据按列组成
行
列矩阵
;
- 将
的每一行中心化,即矩阵中的每个元素减去其所在行的期望(均值);
- 求出协方差矩阵
;(大部分的算法会使用
作为系数,这在
(数据样本)充分大的情况下也是可以的,但是我们要考虑到
才是对协方差的无偏估计,所以我们应该使用前者)
- 求出协方差矩阵的特征值及对应的单位正交特征向量(这个在线代里面应该是讲烂了的题型了,我想你们应该比我更清楚这个流程)
- 将特征向量按对应特征值大小排成矩阵
,取矩阵的前
列构成
即为原数据降至
维之后的数据(通过相关系数你可以拿到原来每个维度的数据对现在某个主成分的影响程度)
3.SVD 的算法步骤
SVD 也是对矩阵进行分解,但是和特征分解不同,SVD 并不要求要分解的矩阵为方阵。假设我们的矩阵 是一个
的矩阵,那么我们定义矩阵
的 SVD 为:

其中 和
都是酉矩阵(酉矩阵:它的共轭转置矩阵与它本身的乘积是单位阵)
之后我们介绍以下如何求出 SVD 分解后的 这三个矩阵
对 级方阵
进行特征分解,得到的特征值和特征向量满足:
将 个特征向量张成一个
级方阵
,就得到了 SVD 公式中的
矩阵,一般我们称
中的每个特征向量为
的右奇异向量。
对 级方阵
进行特征分解,得到的特征值和特征向量满足:
将 个特征向量张成一个
级方阵
,就得到了 SVD 公式中的
矩阵,一般我们称
中的每个特征向量为
的左奇异向量。
现在我们已经求出了 和
,只剩下奇异值矩阵
了。由于
除了主对角线上是奇异值其他位置都是0,所以我们只需要求出每个奇异值
就可以了。
这样我们就可以通过之前求出的右奇异向量和左奇异向量求出每个奇异值,进而求出奇异值矩阵 。
4. SVD 的一些性质
奇异值在奇异值矩阵中是按照从大到小排列,而且奇异值的减少特别的快,在很多情况下,前10%甚至1%的奇异值的和就占了全部的奇异值之和的99%以上的比例。也就是说,我们也可以用最大的 个的奇异值和对应的左右奇异向量来近似描述矩阵,即
这也就是说,我们可以三个小矩阵来表示一个大的矩阵,如下图所示:
由于这个重要的性质,SVD 可以用于 PCA 降维,来做数据压缩和去除噪声。也可以用于推荐算法,将用户和喜好对应的矩阵做特征分解,进而得到隐含的用户需求来做推荐。同时也可以用于 NLP 中的算法,比如潜在语义索引.
5. SVD 用于 PCA
在刚才讲的主成分分析中,我们说如果要用 PCA 降维,就需要找到样本的协方差矩阵的最大的 个特征向量,然后用这些特征向量张成的矩阵来做低维投影降维。但是当样本数多并且样本特征也多的时候,这个计算量是非常大的。
为了降低计算量,我们可以通过 SVD 来找到这个特征向量张成的矩阵。通过某些 SVD 的实现算法,我们可以不先求出协方差矩阵,也能求出右奇异矩阵 。事实上,sklearn 中的 PCA 降维内部实现的真正原理就是通过 SVD 寻找特征向量矩阵,而不是用我们一开始介绍的暴力特征分解。
