Principal Component Analysis
方差:数据与平均数之差平方和的平均数。更多详见
Principal Component Analysis(PCA)是最常用的线性降维方法,它的目标是通过某种线性投影,将高维的数据映射到低维的空间中表示,并期望在所投影的维度上数据的方差最大,以此使用较少的数据维度,同时保留住较多的原数据点的特性。
通俗的理解,如果把所有的点都映射到一起,那么几乎所有的信息(如点和点之间的距离关系)都丢失了,而如果映射后方差尽可能的大,那么数据点则会分散开来,以此来保留更多的信息。可以证明,PCA是丢失原始数据信息最少的一种线性降维方式。(实际上就是最接近原始数据,但是PCA并不试图去探索数据内在结构)
PCA 的理论基础:
关于为什么协方差的特征向量就是 k 维理想特征,有3个理论,分别是:
1. 最大方差理论
2. 最小误差理论
3. 坐标轴相关度理论
这里简单描述下最大方差理论:
(1) 最大方差理论:
信号处理中认为信号具有较大的方差,噪声有较小的方差,信噪比就是信号与噪声的方差比,越大越好。因此我们认为,最好的 k 为特征既是将 n 维样本点转换为 k 维后,每一维上的样本方差都很大
下图5个样本点:(已做过预处理,均值为0,特征方差归一)
PCA 处理图解如下:
降维转换后:
上图中的直线就是我们选取的特征向量,上面实例中PCA的过程就是将空间的2维的点投影到直线上。
那么问题来了,两幅图都是PCA的结果,哪一幅图比较好呢?
先解释一下投影的概念:
红色点表示样例x(i),蓝色点表示x(i)在u上的投影,u是直线的斜率也是直线的方向向量,而且是单位向量。蓝色点是x(i)在u上的投影点,离原点的距离是<x(i),u>(即x(i)Tu或者uTx(i))由于这些样本点(样例)的每一维特征均值都为0,因此投影到u上的样本点(只有一个到原点的距离值)的均值仍然是0。
(2)最小误差理论:
根据最大方差理论,答案是降维后左图,其实也就是样本投影后间隔较大,容易区分。
其实从另一个角度看,左边的图每个点直线上的距离绝对值之和比右边的每个点到直线距离绝对值之和小,是不是有点曲线回归的感觉?其实从这个角度看,这就是最小误差理论:选择投影后误差最小的直线。
再回到上面的左图,也就是我们要求的最佳的 u ,前面说了,最佳的 u 也就是最佳的曲线,它能够使投影后的样本方差最大或者是误差最小。
另外,由于我们前面PCA算法第一步的时候已经执行对样本数据的每一维求均值,并让每个数据减去均值的预处理了,所以每个特征现在的均值都为0,投影到特征向量上后,均值也为0.因此方差为:
最后的等式中中间的那部分其实就是样本方差的协方差矩阵(xi 的均值为 0)
由于 u 是单位向量,得到
上式两边同乘以 u,得到:
于是我们得到:
最佳投影直线就是特征值 λ 最大是对应的特征向量,其次是 λ 第二大对应的特征向量(求解的到的特征向量都是正交的)。其中 λ 就是我们的方差,也对应了我们前面的最大方差理论,也就是找到能够使投影后方差最大的直线
Coursera上Ag讲解部分:
Principal Component Analysis Problem Formulation
PCA 所做的就是寻找 一个投影平面 ,对数据进行投影, 使得这个能够最小化 。另外, 在应用PCA之前通常的做法是先进行均值归一化和特征规范化 ,使得特征x1和x2均值为0, 数值在可比较的范围之内。
更一般的情况是我们有 n 维的数据想降到 k 维 。在这种情况下, 我们不仅仅只寻找单个的向量 来对数据进行投影 ,我们要找到 k 个方向 来对数据进行投影 ,从而最小化投影误差。
(1)假设我们要从2维数据降维至1维数据,那么PCA算法的目的是找到一个直线,使得所有样本投影到这条直线的距离误差最小。
(2) 专业解释:
- 假设我们要从2维数据降至1维数据,那么PCA算法的目的是找到一个向量u(1)使得所有数据样本投影到这个向量时的投影误差最小。
- 假设我们要从n维数据降至k维数据,那么PCA目的是找到一组向量u(1),u(2),u(3),.......u(k)使得所有数据样本投影到这个向量时的投影误差最小。
(3)PCA和线性回归的区别
- PCA和LR是不同的算法,PCA计算的是投影误差,而LR计算的是预测值与实际值的误差。
- PCA中只有特征没有标签数据y,LR中既有特征样本也有标签数据。
Principal Component Analysis Algorithm
(1)数据预处理:
我们首先应该计算出 每个特征的均值 μ 然后我们用 x - μ 来替换掉 x 这样就使得 所有特征的均值为0
(2)PCA算法目的:
PCA算法是找到一组向量u(1),u(2),u(3),.......u(k)使得所有数据样本投影到这个向量时的投影误差最小。
(3) PCA算法
- 计算协方差矩阵Σn×n
Σ=1m∑i=1n(x(i))(x(i))T
-利用SVD奇异值分解分解协方差矩阵
[U,S,V]=svd(Σ)
-得到矩阵
Un×n=???|u(1)||u(2)||u(3)||...||u(n)|???
在实际运算中也可以用eig()函数代替SVD函数,因为协方差矩阵始终为对称正定矩阵(n*n),一定会存在特征值,奇异值矩阵分解主要是针对那些不是方阵的矩阵进行的一种分解。
(4)PCA降维
前面算出的新特征向量组成的矩阵为nxn维的,为了降维,我们可以只取出前k个向量,然后将原始数据样本x(1),x(2),x(3),.......x(m)(x∈Rn) 转化为新的特征向量下的新数据样本z(1),z(2),z(3),.......z(m)
z=UTreducex=???|u(1)||u(2)||u(3)||...||u(k)|???Tx
(5)PCA算法总结
- 对数据进行均值归一化,确保每一个特征的均值为0,根据实际情况看是否做特征缩放,以使得所有特征之间具有比较行。
- 计算所有样本之间的协方差矩阵
- 利用奇异值分解对协方差矩阵进行分解求出新的特征向量空间
- 然后取前k个向量作为新的特征向量空间,将原始特征空间中的数据样本x转化为新特征空间中的新的数据样本z。(注意不包括偏差项x0)
Applying PCA
Reconstruction from Compressed Representation
之前讲了如何利用PCA算法将高维数数据降维至低维数据,现在我们想如何将压缩后的数据转化为开始的高维数据。之前的新样本数据为:
z=UTreducex=???|u(1)||u(2)||u(3)||...||u(k)|???Tx
转化为原始高维数据则为:
xappox=Ureducez
Choosing the Number of Principal Components
在 PCA 算法中 我们把n维特征变量 降维到k维特征变量 这个数字k也被称作 主成分的数量 或者说是我们保留的主成分的数量 ,如何选择k?
- 平均平方映射误差 (Average Squared Projection Error)
1m∑i=1m||x(i)?x(i)approx||2
- 数据的总变差 (Total Variation)
frac1m∑i=1m||x(i)||2则有:
1m∑mi=1||x(i)?x(i)approx||21m∑mi=1||x(i)||2≤0.01(1%)1m∑mi=1||x(i)?x(i)approx||21m∑mi=1||x(i)||2≤0.05(5%)1m∑mi=1||x(i)?x(i)approx||21m∑mi=1||x(i)||2≤0.1(10%)
一个常见的 选择K值的经验法则是选择能够使得它们之间的比例小于等于0.01的最小的k值 ,换言之 一个非常常用的 ,选择k值的方法是 :我们希望平均平方映射误差, 就是x和其映射值之间的平均距离除以数据的总变差, 就是数据的变化有多大。
该方差的步骤是:
选择不同的k值,运行PCA计算Xapprox,然后代入上述方法计算是否满足上述条件。
(2)利用奇异值进行计算
当用SVD对样本之间的协方差矩阵进行计算时,可以求出协方差矩阵的奇异值Sij,则通过计算贡献率
∑ki=1Sij∑ni=1Sij
有:
1?∑ki=1Sij∑ni=1Sij=1m∑mi=1||x(i)?x(i)approx||21m∑mi=1||x(i)||2
(3)计算不同K值对应的累积贡献率,可以选择主成分的数量。例如我要保留原始数据99%的差异性,则令:
∑ki=1Sij∑ni=1Sij≥0.99
Advice for Applying PCA
(1)利用PCA加速监督学习算法
- 将训练样本的特征向量提取出来(不包括标签数据)
- 运行PCA将原始训练样本x(1),x(2),x(3),.......x(m)(x∈Rn)映射到降维后新数据样本z(1),z(2),z(3),.......z(m)(z∈Rk)中
- 将新的训练样本和标签数据重新组合重新的训练样本进行学习求解最优参数θ
- 如果有新样本加入,则首先要对新样本进行PCA映射,然后将得到的新样本z代入到模型中进行计算
PCA只运行到训练样本中,不用在交叉验证数据集和测试数据集中,当求得了映射关系后,可以将这种关系直接应用到交叉验证数据集和测试数据集中
(2)PCA的应用
数据压缩
- 压缩数据,减小存储空间和内存空间
- 加速学习算法
可视化
(3)不建议利用PCA防止过拟合问题
PCA可以减少特征的数量(维数),所以在理论上讲可以防止过拟合问题,但是并不是最好的方法。最好的方法还是利用规则化参数对算法防止过拟合。
(4)何时使用PCA
并不是所有的问题都是要对原始数据进行PCA降维,首先应看在不使用PCA的情况下算法的运行情况,如果未达到所期望的结果,再考虑PCA对数据进行降维。
(5) 总结与讨论
PCA技术的一大好处是对数据进行降维的处理。我们可以对新求出的“主元”向量的重要性进行排序,根据需要取前面最重要的部分,将后面的维数省去,可以达到降维从而简化模型或是对数据进行压缩的效果。同时最大程度的保持了原有数据的信息。
PCA技术的一个很大的优点是,它是完全无参数限制的。在PCA的计算过程中完全不需要人为的设定参数或是根据任何经验模型对计算进行干预,最后的结果只与数据相关,与用户是独立的。
但是,这一点同时也可以看做是缺点。如果用户对观测对象有一定的先验知识,掌握了数据的一些特征,却无法通过参数化等放啊对处理过程进行干预,可能会得不到预期的效果,效率也不高。
黑点表示采样数据,排列成转盘的形状
容易想象,该数据的主元是(P1,P2)。但是这显然不是最优和最简化的主元。(P1,P2)之间存在着非线性的关系。根据先验的知识可知旋转角θ是最优的主元(类比极坐标)。则在这种情况下,PCA就会失效。但是,如果加入先验的知识,对数据进行某种规划,就可以将数据转化为以θ为线性的空间中。这类根据先验知识对数据预先进行非线性转换的方法就成为Kernel-PCA,它扩展了PCA能够处理的问题的范围,又可以结合一些先验约束,是比较流行的方法。
有时数据的分布并不是满足高斯分布。在非高斯分布的情况下,PCA方法得出的主元可能并不是最优的。在寻找主元不能将方差作为衡量重要性的标准。要根据数据的分布情况选择合适的描述完全分布的变量,然后根据概率分布:
P(y1,y2)=P(y1)P(y2)
来计算两个向量上数据分布的相关性。等价的,保持主元间的正交假设,寻找的主元同样要使P(y1,y2)=0。这一类方法被称为独立主元分解(ICA)
这种情况下,方差最大的方向并不是最优主元方向。
参考:PCA–主成分分析(Principal components analysis)-最大方差解释
【Stanford机器学习笔记】12-Dimensionality Reduction
四大机器学习降维算法:PCA、LDA、LLE、Laplacian Eigenmaps