主成分分析(PCA)

2022-03-13  本文已影响0人  懒散的猪猪

PCA 简介

多元统计分析中普遍存在的困难中,有一个困难是多元数据的可视化。matlab 中的 plot 可以显示两个变量之间的关系,plot3 和surf 可以显示三维的不同。但是当有多于3个变量时,要可视化变量之间的关系就很困难了。

幸运的是,在一组多变量的数据中,很多变量常常是一起变动的。一个原因是很多变量是同一个驱动影响的结果。在很多系统中,只有少数几个这样的驱动,但是多余的仪器使我们测量了很多的系统变量。当这种情况发生的时候,你需要处理的就是冗余的信息。而你可以通过用一个简单的新变量代替这组变量来简化此问题。

PCA 是一种较为常用的降维技术,PCA 的思想是将n维特征映射到k维上,这k维是全新的正交特征。这k维特征称为主元,是重新构造出来的k维特征。在 PCA 中,数据从原来的坐标系转换到新的坐标系下,新的坐标系的选择与数据本身是密切相关的。其中,第一个新坐标轴选择的是原始数据中方差最大的方向,第二个新坐标轴选取的是与第一个坐标轴正交且具有最大方差的方向,依次类推,我们可以取到这样的k个坐标轴。

PCA 操作流程

  1. 去均值,即每一位特征减去各自的平均值(当然,为避免量纲以及数据数量级差异带来的影响,先标准化是必要的)
  2. 计算协方差矩阵
  3. 计算协方差矩阵的特征值与特征向量
  4. 对特征值从大到小排序
  5. 保留最大的k个特征向量
  6. 将数据转换到k个特征向量构建的新空间中

PCA 实例

考虑到实例的简洁性,这里只用二维数据。

假设二维数据为 data:

取均值:

特征值为:

特征向量为:

由此,便实现了 PCA 降维操作。

MATLAB 实现 PCA

上面已经对 PCA 的算法过程做了详细说明,这里只针对 MATLAB 中的 PCA 函数作介绍并加以实例说明(详情也可参考 MATLAB 的PCA 文档,官方文档更加细致):

[coef,score,latent] = pca(x);

x:为要输入的 n 维原始数据。带入这个 matlab 自带函数,将会生成新的 n 维加工后的数据(即 score)。此数据与之前的 n 维原始数据一一对应。

score:生成的n维加工后的数据存在 score 里。它是对原始数据进行的分析,进而在新的坐标系下获得的数据。他将这 n 维数据按贡献率由大到小排列。(即在改变坐标系的情况下,又对 n 维数据排序)。

latent:是一维列向量,每一个数据是对应 score 里相应维的贡献率,因为数据有 n 维所以列向量有n个数据。由大到小排列(因为 score 也是按贡献率由大到小排列)。

coef:是系数矩阵。通过 cofe 可以知道x是怎样转换成 score 的。

则模型为从原始数据出发:
score = bsxfun(@minus,x,mean(x,1))coef; (作用:可以把测试数据通过此方法转变为新的坐标系)
逆变换: x = bsxfun(@plus,score
inv(coef),mean(x,1))

代码示例(此处选择一个10维度的数据集):

%调用 pca 函数
[coef,score,latent,t2] = pca();

score
%测试score是否和score_test一样
score_test=bsxfun(@minus,x,mean(x,1))*coef;
score_test

latent=100*latent/sum(latent)%将latent总和统一为100,便于观察贡献率
pareto(latent);%调用 matlab 画排列图

上图当贡献率累加至95%,以后的维数会不在显示,最多只显示10维。

几个注意点:

———————— END ————————

本文使用 文章同步助手 同步

上一篇下一篇

猜你喜欢

热点阅读