PCA(Princile Component Analysis),中文名叫做主成成分分析,它的主要理论是:线性组合输入空间,以期找到一组标准正交基,实现坐标变换。 PCA的主要应用有以下几点:
首先,为了引入PCA,我们介绍如下几个场景:
其次,简单分析下这三个场景。
对于场景1:学习时间与学习兴趣高度线性相关,所以我们只用一个自变量(二者之一),便能够很好地预测学习成绩。 对于场景2:如果是以400个像素作为输入空间,那么对于模型的计算是很复杂的。我们实际上书写数字的时候,对于特定的数字总会有一定的模式,我们会在既定模式中间产生微小的偏差(我们的脑子比较擅长理解这种模式),因此更好的输入空间应该是直接输入这种模式,而不是生硬地输入如此多的像素值。 对于场景3:简单的有规律可循的画面表明存在某种模式,而黑点正是背离了这模式的点。
最后,说下从场景中揭示的问题。
对于场景1,表明当输入变量线性相关度极高时(|r|>2n√|r|>\frac{2}{\sqrt{n}}),我们可以舍弃部分变量而不影响模型的精确度。 对于场景2,表明我们实际的输入空间虽然足够揭示问题(400维的像素点可以判断输入数字),但是不够有效率,不能够揭示真正的输入模式。 对于场景3:黑点正是背离了真正的输入模式。
总结,PCA是一个非常棒的工具,可以揭示输入数据的真正模式,既可以有效地降低数据的维度,也可以有效地去除噪声的干扰。
上面讲了很多真正的输入模式,那么一个问题很自然地产生了,什么是真正的输入模式呢? 我们,给它起了个名字,叫做PA(主成分)。
主成分,顾名思义,就是很重要的成分。 举2个例子,很容易明白。
第一个是三维空间。
由图,我们用三个维度X,Y,Z去描述这个三维空间中的点。然后,当我们仔细观察这些点后,发现这些点几乎都在如图的蓝色平面上,只有很少的点在蓝色平面外。 对于蓝色平面,我们建立正交的坐标向量X,Y,同时对于蓝色平面外的点,我们增加坐标向量Z去描述。 在这个问题中,[X,Y]可以说是问题的真正输入模式,是主成分,即用减少后的2维平面同样可以很好地描述原数据集。
第二个是二维空间。
由图,我们用2个维度去描述数据点,同时做出线性回归,并将数据点投影到回归线上。实际上,当数据点线性度足够高的时候,我们可以只用一个维度(图中的X)就可以很好的描述数据点的分布。 这个维度(蓝色的X),就是我们要找的真正输入模式,是主成分。
首先,我们先简介描述数据的工具——平均值,方差,协方差。 平均值表示了数据的样本中心。 方差表示了数据的离散程度。 一般来说,平均值和方差便足以描述一维数据的大致特征了。 同时,为了描述二维数据的相关关系,我们引入协方差,表明二维数据变化的方向关系。
由上面二维、三维图,我们可以看到,主成分方向上,数据的离散程度更大,或者具体的说:数据点在主成分方向上的方差很大。
那么,为什么方差很大就是主成分,就能更好地描述数据呢?
借用上面二维空间中的图,想象蓝色的向量是x,与其垂直的向量是y。 数据点分别在X,Y上做投影,很容易发现:X上的投影点离散,Y上的投影点密集。 想象极限情况,数据点完全线性分布,那么X上的投影点仍然保持原有的数据结构,而Y上的投影点则聚焦到了一起,变成了一个点。
所以说,主成分方向上,数据点的方差很大。 方差大,更有利于保持数据的原有结构不变。
首先,介绍一下数据。 先将数据减去其平均值,使得数据的平均值为0,这一步的作用是简化数学计算,使得协方差矩阵可以直接用点积来表示(后文中可以看到)。 设定数据集X∈Rm∗nX \in \mathbb{R}^{m*n},m表示样本点的数量,n表示样本点的维度。 在Rm∗n \mathbb{R}^{m*n}空间中,找到一个主成分方向e∈Rn∗1e\in \mathbb{R}^{n*1},将数据点投影到ee上,观察其在ee上的分布,即可找到对应该主成分方向的方差,表达式为
1m∑(x∗e−μx)2
\frac{1}{m}\sum (x*e-\mu_x)^2
由于μx=0\mu_x = 0(原数据的平均值为0,投影后数据的平均值为0)证明如下:
μx=1m∑(x∗e)=1m∑i=1m∑j=1nxijej=∑j=1n(∑i=1m1mxij)ej=0
\mu_x = \frac{1}{m}\sum (x*e)=\frac{1}{m}\sum_{i=1}^m \sum_{j=1}^n x_{ij}e_j =\sum_{j=1}^n (\sum_{i=1}^m \frac{1}{m} x_{ij})e_j=0 所以我们实际的优化函数为:
maxL(e)=max1m∑(x∗e)2=max1m∑i=1m(∑j=1nxijej)2
\max L(e) = \max \frac{1}{m}\sum (x*e)^2=\max \frac{1}{m}\sum_{i=1}^m (\sum_{j=1}^n x_{ij}e_j )^2 考虑限制条件,ee不可能无穷大,否则就没有意义了,我们需要寻找的是ee的方向而不是ee的大小,所以,不妨将ee单位化,受限条件为
s.t.E(e)=∥e∥=∑j=1nej2=1
s.t. \quad E(e)= \Vert e \Vert=\sum_{j=1}^n {e_j}^2=1 对于含有等式约束的优化问题,采用拉格朗日法,有
∇Le=λ∗∇Ee
\nabla L_e = \lambda *\nabla E_e 将上式展开变换,得
(∑i=1m1mxi∗xiT)e=λe
(\sum_{i=1}^m \frac{1}{m}{x_i * {x_i}^T})e = \lambda e 其中,左边括号里面的对象是协方差矩阵,记作Cov(n)Cov(n),则
Cov(n)e=λe
Cov(n)e = \lambda e 所以知道,当ee方向上方差最大时,也即e为主成分时,对应的ee为协方差矩阵的特征向量,对应的λ\lambda为协方差矩阵的特征值。
通过上文,我们知道,方差最大的ee对应着主成分,也就是协方差矩阵的特征向量。 那么,协方差矩阵的特征向量通常不止一个,如何评判特征向量对应的主成分的优劣呢(或者说,哪个主成分的方差最大呢)?
首先,设定考虑主成分ee,方差的表达式如下
1m∑(x∗e)2=1m∑i=1m(∑j=1nxijej)2=1m∑i=1m((∑j=1nxijej)(∑q=1nxiqeq))=∑j=1n∑q=1n(1m∑i=1mxijxiq)ejeq
\frac{1}{m}\sum (x *e)^2 = \frac{1}{m} \sum_{i=1}^m (\sum_{j=1}^n x_{ij}e_j)^2= \frac{1}{m} \sum_{i=1}^m( (\sum_{j=1}^n x_{ij}e_j) (\sum_{q=1}^n x_{iq}e_q)) =\sum_{j=1}^n \sum_{q=1}^n (\frac{1}{m} \sum_{i=1}^mx_{ij} x_{iq} )e_j e_q
=eT∗(Cov(j,q)∗e)=λe2=λ
=e^T*(Cov(j,q)*e)=\lambda e^2=\lambda 所以,主成分的优劣对应着主成分的方差大小,方差大小对应着协方差矩阵对应特征向量的特征值(特征向量都已单位化)。
选择PA的时候,常见的一句话就是:该主成分组解释了多少方差。 可以理解成:该主成分组解释了原数据组的多少离散程度,解释了多少结构。 这个百分比来源于
协方差矩阵对应主成分的特征值和协方差矩阵所有的特征值的和
\frac{协方差矩阵对应主成分的特征值和}{协方差矩阵所有的特征值的和} 一般来说,该比例大于90%,即很好地解释了原数据的方差。
最后,总结一下PCA:
博主是做机器学习的,PCA在机器学习中用处很多,但是PCA不是首要选择,一般情况下,我们应该先用原数据建立模型,再将其和PCA后的模型进行比较,切不可只做PCA后的模型。