说明:借鉴吴恩达机器学习视频课程和李航统计机器学习第十六章
引入
PCA是一种常用的无监督学习方法,它是一种降维方法,比如xi是样本点,xi∈Rn,通过PCA算法将xi变换为zi其中(zi∈Rk,k<n)。
《统计》:PCA利用正交变换把由线性相关变量表示的观测数据转换为少数几个由线性无关表示的数据,线性无关的变量称为主成分
PCA公式描述
先通过二维原数据对应的平面图直观体会PCA算法的原理:
PCA算法要达到所有样本点对应红线长度平方之和最小,其中PCA算法的目的就是要找到这样一条分割线或者分割面,最小化平方投影。
说到这儿,可能会觉得PCA与liner regression有点相似。
同:都是要找到一个超平面
异:L是用来判断每个x对应的预测值y^与真实值之间的距离;PCA则是最短化正交距离,只考虑x附属的对应的n维特征,与y没有关系。说直白点,L就是找各个点向超平面画平行于y轴的直线,而PCA则是向超平面引垂线。如下图(红线是L,蓝线是PCA)
PCA算法
首先要对数据进行预处理,计算所有样本点对应x的各个特征分量的均值,再用各个样本点的x值更新为该样本点对应的x值减去所有点的均值,满足
下图是把二维的原数据降维为一维的。
因此想要使用PCA必须要解决两个问题:
1、如何计算u(i)(决定超平面的方向向量)
2、如何计算z(i)(降维后的数据)
算法总结:
1、数据预处理,更新样本点的值,满足每一个特征均值都为零的任意特征缩放。
2、求更新后样本点的协方差Σ=
X右上角括号里面的i表示第几个样本点,该Σ阵中共由m个样本点构成,最后按照矩阵的位置求出均值来。即为协方差矩阵。
3、计算Σ里面的向量,利用SVD算法(任意矩阵A都存在奇异值分解)
S是n*n维的
具体SVD求解过程看https://blog.csdn.net/Monica_428/article/details/117379034?spm=1001.2014.3001.5501
4、降维矩阵Ureduce是U中前k列
5、计算Z(I)
PCA算法的三种实现方式
前两种是传统的主成分分析,后一种基于SVD的是现在比较常用的方法。
基于特征值分解协方差矩阵
例题1、(按照要求进行降维)
以X为例,我们用PCA方法将这两行数据降到一行。
1)因为X矩阵的每行已经是零均值,所以不需要去平均值。
2)求协方差矩阵:
3)求协方差矩阵的特征值与特征向量。
求解后的特征值为:
对应的特征向量为:
其中对应的特征向量分别是一个通解,和可以取任意实数。那么标准化后的特征向量为:
4)矩阵P为:
5)最后我们用P的第一行乘以数据矩阵X,就得到了降维后的表示:
结果如图1所示:
数据矩阵X降维投影结果
将原有二维数据投影到以
为方向的一维超平面上。为什么选择p的第一行,是因为第一行的特征向量对应的特征值大,因此选择其作为第一主成分。
基于相关矩阵的特征值分解
1、对样本矩阵x规范化
2、依据标准化后的计算样本相关矩阵
3、特征值特征向量、根据方差贡献率确定k值大小
4、k个样本的主成分
5 、计算主成分和原变量的相关系数,以及主成分对原变量的贡献率,
6、计算n个样本的主成分值
例题2:按照方差贡献率保留维数
设x1表示语文,x2等依次顺延
(1)计算该相关矩阵的特征值及特征向量
λ1=2.17, λ2=0.87, λ3=0.57, λ4=0.39
(2)特征值就是个各成分的方差贡献率,假设要求是累计方差贡献率大于0.75。
(3)求出λ1和λ2对应的特征向量
import numpy as np w, v = np.linalg.eig(np.array([[1,0.44,0.29,0.33], [0.44,1,0.35,0.32], [0.29,0.35,1,0.60], [0.33,0.32,0.60,1]])) print('特征值:{}\n特征向量:{}'.format(w,v))
结果:
因为机器对浮点数的处理问题,自带舍入误差,因此得到的结果不是准确的。该问题很难避免。
(4)求出主成分
上图就是主成分分析的解结果,变量y1,y2表示第一第二主成分
(5)求因子负荷量,以及主成分对变量x的贡献率
因子负荷量计算公式:ρ(yi,xj)(i=1,2 j=1,2,3,4)
因子负荷量计算过程
主成分对变量的贡献率
计算过程
总结:
通过表16.3可以看出
第一主成分对应的因子负荷量全部大于零,表明各科成绩提高都会使y1提高,也就是说第一主成分y1反映了学生的整体成绩,此外,因子负荷量相近,且ρ(y1,x4)数值最大,说明物理成绩在整体成绩中占据重要位置。
第二主成分有正有负,正的是语文和外语,负的是数学和物理,说明文科成绩提高可使y2提高,但理科成绩提高会使y2降低,也就是说,第二主成分y2反映了学生的文科成绩与理科成绩的关系。
将所有的成绩和第一第二主成分的因子负荷量在平面坐标系中表示出来,可以看出变量之间的关系,四个原变量聚合成两类。因子负荷量相近的语文英语为一类,数学和物理为一类。前者反应文科成绩,后者反应理科成绩。
基于SVD分解协方差矩阵
过程:
主成分数量选择
可视化数据的话k一般为2或者3.
PCA使用建议
主要对监督学习算法进行算法加速,因为通过PCA算法数据维数会下降进而算法更加高效,主要运用于图像识别,例如100*100维的像素降维维1000
降维几乎不影响分类准确性,而且运行速度会加速,
PCA误用
有些会用PCA防止过拟合,实际上PCA的功能主要是将样本点的特征数量降到低维。在抑制过拟合的公式中,主要是通过正则项
PCA用不到y,会舍掉一些信息,过程中没有关注到对应的y是什么,很有可能会舍掉一些有价值的信息
相反,在下面的公式中却可以很好的防止过拟合
因为y已知,不太可能丢失一些有价值的信息,
建议:在使用PCA之前先直接做想做的,考虑使用最原始的x,当要求算法速度快的时候,而且数据需要压缩,对内存有要求的时候再进行数据的PCA.