一.原理简介
PCA主成分分析,是一种使用较为广泛的数据降维算法,主要思想是将n维数据特征映射到k维上,
这k维全新的正交数据特征称为主成分;
PCA的工作就是从原始的空间中顺序地找一组相互正交的坐标轴,新的坐标轴的选择与数据本身是
密切相关的。其中,第一个新坐标轴选择是原始数据中方差最大的方向,第二个新坐标轴选取是与
第一个坐标轴正交的平面中使得方差最大的,第三个轴是与第1,2个轴正交的平面中方差最大的。
依次类推,可以得到n个这样的坐标轴。通过这种方式获得的新的坐标轴我们发现,大部分方差都
包含在前面k个坐标轴中,后面的坐标轴所含的方差几乎为0。于是,我们可以忽略余下的坐标轴,
只保留前面k个含有绝大部分方差的坐标轴。事实上,这相当于只保留包含绝大部分方差的维度特
征,而忽略包含方差几乎为0的特征维度,实现对数据特征的降维处理。
二.算法流程
输入:数据集X={x1,x2,x3,…,xn},需要降维到k维;
Ⅰ.样本中心化(即每一个特征都减去各自的均值);
Ⅱ.计算协方差矩阵 (实际上除n或者n-1都一样,因为样本数据较大时两者比较接
近,也可以不除,因为同比例扩大缩小效果均一样);
Ⅲ.对协方差矩阵进行对角化,并将对角线上的特征值从大到小进行排序,选择其中k个最大的,将
该k个特征向量分别作为特征向量矩阵w;
Ⅳ.用Y=X*w就得到了降维后的新空间;(至于左乘还是右乘取决于数据是行向量还是列向量,列向
量就变成左乘w的转置)。
此外,值得注意的是并不是所有矩阵都可以用特征值分解(即对角化协方差矩阵),必须要求有n
个线性无关的向量,如果不满足这种情况怎么办呢,这时候我们可以采用奇异值分解的方法
(SVD),此方法可对所有矩阵进行分解,但复杂情况视情况而定。
三.证明最小重构误差和最大化投影方差等价
前面我们特征分解样本的协方差矩阵,而协方差矩阵的对角线上中心化后刚好是样本的投影方差,
并取前k个特征值对应的特征向量作为投影矩阵2,解决了PCA的最大可分性问题。接下来从最小重
构误差入手,即使得样本离我们的超平面越近越好,解决PCA的最小重构问题。
首先假设数据集为n维,共有m组数据(x1,x2,x3,…,xm),注意这里每一个 均为n维的列向量;
原坐标系为(w1,w2,w3,…,wm),其中w为标准正交基,即 ,;
将数据从n维降到p维,则新的坐标系为(w1,w2,w3,…,wp),样本点 在p维坐标系里的表示为
;而若要恢复数据,则;
需要注意的是X是n*m的矩阵,W是m*p的矩阵,此处均采用的是列向量;
则目标函数为:
则优化求解过程如下所示:
由于优化的是W,所以我们加上约束条件 ,利用拉格朗日乘子法如下所示:
对W求导令其为0,我们可以得到以下等式:
于是原问题也转化为了特征分解求X的协方差矩阵的特征向量的问题,由此证明两个问题是等价的。这里我们也是取前p个特征值最大对应的特征向量组成W。
当然,不难发现,从本质上说特征向量其实表示的是数据不变的特征方向,而特征值表示数据在这个方向变 化的幅度,也就是该方向上的方差;而协方差矩阵我们选择 p 个最大的特征值,也就是保留了变化最显著的 p 个方向,这样我们可以最大程度地保留数据的重要信息,同时去除一些不 必要的,次要的特征,从而达到降噪的目的。
四.PCA用于人脸识别
PCA用于人脸识别主要是靠它的降维矩阵,通过设置降维的维度选取不同数量的特征向量组成投影矩阵。人脸识别的大致过程为:
(1)首先将数据集按一定比例划分为训练集和测试集;
(2)将人脸图片按列向量读入成一个矩阵;
(3)用PCA从训练集中提取一定数量的特征向量组成投影矩阵;
(4)用测试集的人脸土拍你进行测试,即将其用得到的特征矩阵进行投影,用分类器对其进行分类,与正确标签进行比较正确与否,从而计算人脸识别的正确率。
值得注意的是:我们一般用KNN(K临近分类器)进行分类。
详细代码可见:Machine_Learning/code/PCA at main · breakthrougher/Machine_Learning (github.com)
----- 以上为本人学习机器学习这门课总结出的一些知识点和手敲的代码,有错误或者疑问可以评论区交流,欢迎指正!!!
标签:特征向量,方差,--,矩阵,协方差,降维,坐标轴,PCA From: https://blog.csdn.net/m0_74194861/article/details/140327191