主成分分析,简称 PCA,是最常用的一种降维方法,属于无监督学习。主成分分析涉及到的数学知识较广,也是机器学习很好的学习材料。
主成分分析涉及到的数学知识有:基于线性变换的降维方法、奇异值分解、特征值、特征向量、协方差矩阵、数量积、投影、坐标、对阵矩阵、正交矩阵等。如果对这些知识不太熟悉,一定要补上。
主成分分析简而言之,就是使用一个新的坐标系去描述原来坐标系中的数据,在新的坐标系中舍弃一些不重要的分量,那些被保留的分量就称之为主成分,因此 PCA 的核心其实是坐标变换。
接下来,铺垫一些关于坐标变换的知识。
我们知道,如果坐标系是单位正交向量,这些单位正交向量可以看成是坐标轴的方向向量,那么坐标轴一个方向向量与某个点(这里可以认为是向量)做内积,得到的一个数(标量),就得到了这个点在这个坐标方向的坐标。做内积这件事情又叫做投影。
算法和公式推导
设
XU=Y ,其中矩阵
X、
U、
Y 的含义如下:
-
X 表示原始的特征矩阵,每一行表示一个数据,每一列表示一个特征,这里假设
X∈Rm×n,即有
m 个数据,
n 个特征;
-
U 是投影矩阵,每一列表示一个投影的方向,特征有
n 个,因此就有
n 个投影方向,因此
U∈Rn×n;
-
Y 表示
X 在新坐标系下的坐标,这里
Y∈Rm×n。
说明:
- 如果一个特征方差很小,说明这个特征没有区分度,送入机器学习的算法增加了计算量,但并不起多大作用;
- PCA 把
n 个投影方向按照投影以后数据的特征的方差按照从大到小进行重排,方差小的直接丢弃,此时
U 的列数减少了,相应地
Y 的列数也就是减少了,即达到了降维的效果。
使用待定系数法计算投影变换矩阵 U
这里矩阵
Y 应该满足:
1、各个特征(各个列)不能线性相关,更强地,我们可以要求各个列正交;
2、各个特征(各个列)按照方差从大到小排序。
假设
Y=(y1,y2,...yn),则上面的两点可以通过
Y 的协方差矩阵表示出来:
m−11YTY=m−11⎝⎜⎜⎜⎛y12y2y1⋮yny1y1y2y22⋮yny2⋯⋯⋱⋯y1yny2yn⋮yn2⎠⎟⎟⎟⎞=m−11⎝⎜⎜⎜⎛y120⋮00y22⋮0⋯⋯⋱⋯00⋮yn2⎠⎟⎟⎟⎞.
即:
m−11YTY=Σ.
其中
Σ 表示一个对角矩阵。
将
XU=Y 代入,得
m−11UTXTXU=Σ=UT(m−11XTX)U=Σ.
又由于
m−11XTX 是对称矩阵,因此上式可以认为是对称矩阵的对角化问题,这件事情早在《线性代数》中解决了,即方阵
m−11XTX 的特征向量按列排成的矩阵就是
U。
如何降维
将矩阵
U 去掉后面几个投影以后方差很小的投影方向,得到
Ureduce,于是
XUreduce=Yreduce,其中,
X∈Rm×n,
Ureduce∈Rn×k,
Y∈Rm×k,这里
k 小于
n,就达到了降维的效果。
恢复成原来的矩阵
从
XUreduce=Yreduce,可以知道:
X=YreduceUreduce−1。
特别注意:这里
Ureduce∈Rn×k ,其实是没有逆矩阵的,但是由于
U 是正交矩阵,所以
Ureduce−1=UreduceT,使得
X=YreduceUreduce−1=YreduceUreduceT 是有意义的,即:
X=YreduceUreduceT.
PCA 与 SVD 的关系
由于
XP=Y,
其中
X=UΣVT,
则
XV=UΣ,
这里
P=V。而
UΣ 就是降维以后的坐标。
- PCA 还可以从“最近重构性”、“最大可分性”、“逐一选取最大方差方向”来得到,这些在把周志华《机器学习》P229 主成分分析中都有介绍。
参考资料
参考资料:
1、张洋《PCA的数学原理》:http://blog.codinglabs.org/articles/pca-tutorial.html
(我是看这篇文章入门 PCA 的,这篇文章在网上引用比较多,也很好理解。)
2、刘建平:主成分分析(PCA)原理总结
https://www.cnblogs.com/pinard/p/6243025.html
(这篇文章把周志华《机器学习》中关于 PCA 介绍部分的公式推导写得很详细。)
3、如何通俗易懂地讲解什么是 PCA 主成分分析?
https://www.zhihu.com/question/41120789/answer/481966094