数据处理(一):降维之主成分分析(PCA)
降维目的:样本数据为高维数据时,对数据进行降维操作,避免模型出现过拟合。
1.过拟合含义:训练集误差小,验证集误差大。
过拟合三种解决方案:1)增加数据集;2)正则化; 3)降维。
2.高维灾难:
具有高维度特征的数据易导致高维灾难。
高维灾难的几何角度解释: 高维灾难含义:高维数据分布具有稀疏性;不容易根据特征对数据进行分类.
3.降维
降维分类:
1)直接降维(特征选择(lasso))
2)线性降维(PCA,MDS)
3)非线性降维(流形:ISOMAP,LLE)
4.主成分分析(PCA) 【一般要求覆盖率达到85%以上】
1) PCA本质:将一组线性相关的数据通过正交变换转化为一组线性无关的数据,本质是特征空间的重构+主成分筛选。
2)PCA转化为优化问题:最大投影方差(最小重构距离)
最大投影方差:数据进行特征转换后,筛选出投影方差最大的前q个基变量,即主成分(尽可能多地保留原数据的信息)
【最小重构代价:数据进行特征转换后,筛选出重构代价最小的(p-(q+1))个基变量,即被筛掉的特征(使转换筛选后去掉的信息尽可能少),本质和最大投影方差一样】
转化为带约束的优化问题:用拉格朗日乘子法求解,输出为主成分P【被筛去的成分P1】
最大投影误差 【最小重构代价】
=> problem: optimization
P = argmax PT*S*P 【PT*S*P是变换后样本的协方差】
s.t PTP = 1 【P为正交阵】
=> solution: P,lambda 【拉格朗日乘子法通过求解导数为0得出的最优解:当变换矩阵 P 等于协方差矩阵S的特征向量时,可以实现方差最大化】
SP=lambda*P
取 lambda 的前q个最大的特征值; 取前q个最大的特征值对应的特征向量组成变换矩阵P;
newdata=data*T(因为data(nxm):n为样本数,m为特征数,所以右乘变换矩阵;反之则左乘);
i)均值、协方差、中心矩阵H(几何角度理解:将数据平移至特征空间的原点)
矩阵表示:(视频更为清楚,仅为自己方便回顾)
X={x1 x2 x3 ... xN}
mean: x_bar=1/N*XT*1n
covariance: S=1/N*XTHX || S=1/N*XTX (两者相等?)
centering matrix H: H=IN-1/N*1N1NT
ii) 为什么用协方差(的特征值和特征向量) 【另一种解释可以通过拉格朗日乘子法公式推导】
PCA目标:最大化特征本身的方差;最小化不同特征间的相关度(这里的特征指的是变换后的特征)
=> 最大化转化后的样本的协方差 S1(S1=uTSu);最小化S'除了对角元素之外的元素。
为什么要追求最大化方差:
根据信息论,某维度的方差越大,表示所包含的信息越多,表明在该维度上不同样本的差异性越大,所以要某一维度上追求样本的方差最大化。
为什么要最小化S1除了主对角元素之外的元素:
协方差矩阵主对角线的元素表示某一特征维度自己的方差,除此之外的元素表示不同特征之间的相关性,也就是问为什么要最小化不同维度间的相关性。因为特征间如果有相关性,即可以通过一个特征推导出另一个特征,那么两个特征中就有一个是冗余的,没必要。所以要最小化不同特征间的相关性,可以通过使最终的主成分均为正交向量来实现相关性为0。(正交向量相关性为0,实对称矩阵特征向量均为正交向量,所以只要协方差矩阵为实对称矩阵,对其求解特征向量,将特征向量作为主成分,则自动满足主成分相关性为0的条件)
为什么要选取大的特征值:
当一个矩阵作用于它的特征向量时,相当于对特征向量进行大小缩放,不改变其方向,特征值越大,说明其拉伸的的比例越大,协方差的特征值的绝对值表示变换后该主成分上保留原始信息的多少,所以要提取出大的特征值。大的特征值对应的特征向量就是主成分。
4)PCA 步骤:
去均值化得到中心化的样本X=X-X_bar;
公式得到协方差矩阵S;
公式求协方差矩阵特征值和特征向量;
特征值从大到小排序,取前p个特征值(对特征值归一化,p的大小由设置的贡献率约束);
p个特征值对应的特征向量组成变换矩阵T;
得到降维后的新样本 newdata=data*T;
5)代码例子
特征值函数:
matlab:eig
python3:numpy.linalg.eig
参考资料:
B站PCA白板推导:
1.https://www.bilibili.com/video/BV1vW411S7tH?from=search&seid=9820368741324620986
2.https://www.bilibili.com/video/BV1vW411S7tH?from=search&seid=16536718430318256576
3.https://www.bilibili.com/video/BV1vW411S7tH?p=4
4.https://www.cnblogs.com/simon-c/p/4902651.html 作者:simon_c
5.https://blog.csdn.net/qq_34562093/article/details/80568060, PCA与协方差矩阵,作者:Fourier
6.https://www.cnblogs.com/tclikang/archive/2012/11/26/2789200.html,数理统计协方差,作者:superbug
7.https://github.com/LJRice/KL-PAC-_face ,PCA人脸识别python代码