一、主成分分析法(PCA)思想及原理
(一) 什么是主成分分析法
PCA(Principal Component Analysis),即主成分分析方法,是一种使用最广泛的数据降维算法(非监督的机器学习方法)。
其最主要的用途在于“降维”,通过析取主成分显出的最大的个别差异,发现更便于人类理解的特征。也可以用来削减回归分析和聚类分析中变量的数目。
(二)为什么要做主成分分析
在很多场景中需要对多变量数据进行观测,在一定程度上增加了数据采集的工作量。更重要的是:多变量之间可能存在相关性,从而增加了问题分析的复杂性。
如果对每个指标进行单独分析,其分析结果往往是孤立的,不能完全利用数据中的信息,因此盲目减少指标会损失很多有用的信息,从而产生错误的结论。
因此需要找到一种合理的方法,在减少需要分析的指标同时,尽量减少原指标包含信息的损失,以达到对所收集数据进行全面分析的目的。由于各变量之间存在一定的相关关系,因此可以考虑将关系紧密的变量变成尽可能少的新变量,使这些新变量是两两不相关的,那么就可以用较少的综合指标分别代表存在于各个变量中的各类信息。主成分分析与因子分析就属于这类降维算法。
(三)
PCA的主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征。
先假设用数据的两个特征画出散点图:
如果我们只保留特征1或者只保留特征2。那么此时就有一个问题,留个哪个特征比较好呢?
通过上面对两个特征的映射结果可以发现保留特征1(右面)比较好,因为保留特征1,当把所有的点映射到x轴上以后,点和点之间的距离相对较大,也就是说,拥有更高的可区分度,同时还保留着部分映射之前的空间信息。
那么如果把点都映射到y轴上,发现点与点距离更近了,这不符合数据原来的空间分布。所以保留特征1相比保留特征2更加合适,但是这是最好的方案吗?
将所有的点都映射到一根拟合的斜线上,从二维降到一维,整体和原样本的分布并没有多大的差距,点和点之间的距离更大了,区分度也更加明显。
也就是说,我们要考虑的问题是:
如何找到让样本间距最大的轴?
其中,一般我们会使用方差(Variance)来定义样本之间的间距:
V a r ( x ) = 1 m ∑ i = 1 m ( x i − x ˉ ) 2 Var(x)=\frac {1}{m}\sum_{i=1}^m(x_i-\bar x)^2 Var(x)=m1i=1∑m(xi−xˉ)2
(四)主成分分析法的步骤
对于如何找到一个轴,使得样本空间的所有点映射到这个轴的方差最大。
- 第一步:样本归0
将样本进行均值归0(demean),即所有样本减去样本的均值。样本的分布没有改变,只是将坐标轴进行了移动。
此时对于方差公式: V a r ( x ) = 1 m ∑ i = 1 m ( x i − x ˉ ) 2 , x ˉ = 0 Var(x)=\frac {1}{m}\sum_{i=1}^m(x_i-\bar x)^2,\bar x=0 Var(x)=m1∑i=1m(xi−xˉ)2,xˉ=0。其中此时计算过程就少一项,这就是为什么要进行样本均值归0,可以化简的更加方便。
- 第二步:找到样本点映射后方差最大的单位向量ω
求一个轴的方向w=(w1,w2)需要定义一个轴的方向w=(w1, w2),使得我们的样本,映射到w以后,使得X映射到w之后的方差最大:
V a r ( X p r o j e c t ) = 1 m ∑ i = 1 m ( X p r o j e c t i − x ˉ p r o j e c t ) 2 Var(X_{project})=\frac {1}{m}\sum_{i=1}^m(X_{project}^i-\bar x_{project})^2 Var(Xproject)=m1i=1∑m(Xprojecti−xˉproject)2
其实括号中的部分是一个向量,更加准确的描述应该是(向量的模):
V a r ( X p r o j e c t ) = 1 m ∑ i = 1 m ∣ ∣ X p r o j e c t i − x ˉ p r o j e c t ∣ ∣ 2 Var(X_{project})=\frac {1}{m}\sum_{i=1}^m||X_{project}^i-\bar x_{project}||^2 Var(Xproject)=m1i=1∑m∣∣Xprojecti−xˉproject∣∣2
因为前面已经去均值,所以,这里只需下面的式子最大:
V a r ( X p r o j e c t ) = 1 m ∑ i = 1 m ∣ ∣ X p r o j e c t i ∣ ∣ 2 Var(X_{project})=\frac {1}{m}\sum_{i=1}^m||X_{project}^i||^2 Var(Xproject)=m1i=1∑m∣∣Xprojecti∣∣2
映射过程如下:
红色的线是我们要找的方向 ω = ( ω 1 , ω 2 ) ω=(ω_1,ω_2) ω=(ω1,ω2) ;第i行的样本点 X ( i ) = ( X 1 ( i ) , X 2 ( i ) ) X^{(i)}=(X_1^{(i)},X_2^{(i)}) X(i)=(X1(i),X2(i)), X ( i ) X^{(i)} X(i)此时也是一个向量;映射到ω上做一个垂线,交点的位置就是 X p r o j e c t ( i ) = ( X p r o 1 ( i ) , X p r o 2 ( i ) ) X_{project}^{(i)}=(X_{pro1}^{(i)},X_{pro2}^{(i)}) Xproject(i)=(Xpro1(i),Xpro2(i))对应的点;真正要求 X p r o j e c t ( i ) X_{project}^{(i)} Xproject(i)的的模的平方,蓝色线段长度对应的平方。
把一个向量映射到另一个向量上,对应的映射长度是多少。实际上这种映射就是点乘:
X ( i ) ⋅ ω = ∣ ∣ X ( i ) ∣ ∣ ⋅ ∣ ∣ ω ∣ ∣ ⋅ c o s θ X^{(i)}\cdot ω=||X^{(i)}||\cdot ||ω||\cdot cosθ X(i)⋅ω=∣∣X(i)∣∣⋅∣∣ω∣∣⋅cosθ
因为向量ω是我们要找的轴,是一个方向,因此使用方向向量就可以。因此长度为1:
X ( i ) ⋅ ω = ∣ ∣ X ( i ) ∣ ∣ ⋅ c o s θ X^{(i)}\cdot ω=||X^{(i)}||\cdot cosθ X(i)⋅ω=∣∣X(i)∣∣⋅cosθ
因此,在三角形中有:
X ( i ) ⋅ ω = ∣ ∣ X p r o j e c t ( i ) ∣ ∣ X^{(i)}\cdot ω=||X_{project}^{(i)}|| X(i)⋅ω=∣∣Xproject(i)∣∣
主成分分析法的目标是:
求ω,使得 V a r ( X p r o j e c t ) = 1 m ∑ i = 1 m ( X ( i ) ⋅ ω ) 2 Var(X_{project})=\frac {1}{m}\sum_{i=1}^m(X^{(i)}\cdot ω)^2 Var(Xproject)=m1∑i=1m(X(i)⋅ω)2最大.
如果是n维数据,则有: V a r ( X p r o j e c t ) = 1 m ∑ i = 1 m ( X 1 ( i ) ω 1 + X 2 ( i ) ω 2 + … … + X n ( i ) ω n ) 2 Var(X_{project})=\frac {1}{m}\sum_{i=1}^m(X_1^{(i)}ω_1+X_2^{(i)}ω_2+……+X_n^{(i)}ω_n)^2 Var(Xproject)=m1∑