主成分分析(PCA)降维

最后更新于:2024-04-07 21:39:46

一、代码运行环境

MATLAB2012b及更新版本。

二、程序介绍

1.demo_PCA.m文件

主成分分析PCA降维函数khPCA.m的测试脚本文件,可以直接运行。程序运行完成后,会绘制出如下两张图:

此时在工作区能找到PCA降维后的变量:pcaVal,以及主成分方差占比具体数值:explained

运行完成后的工作区

2.khPCA.m文件

PCA降维和画图的主函数文件。

PCA降维以及画图功能全部封装在此函数。注意不能直接运行该函数文件,而要参照demo_PCA.m文件的写法进行函数调用。

function [pcaVal,explained,coeff,PS] = khPCA(data,options,species,figflag)
% 对数据进行PCA降维并且画图
% 输入:
% data:拟进行降维的数据,data维度为m*n,其中m为特征值种类数,n为每个特征值数据长度
% options:一些与pca降维有关的设置,使用结构体方式赋值,比如 options.autoDir = 'on',具体包括:
%              -autoDir:是否进行自动纠错,'on'为是,否则为否。开启自动纠错后会智能调整数据的行列方向。
%              -NumDimensions:降维后的数据维度,默认为2,注意NumDimensions不能大于data原本维度
%              -Standardize:输入数据是否进行标准化,false (默认) | true           
% 
% species:分组变量,可以是数组、数值向量、字符数组、字符串数组等,但是需要注意此变量维度需要与Fea的组数一致。该变量可以不赋值,调用时对应位置写为[]即可
%          例如species可以是[1,1,1,2,2,2,3,3,3]这样的数组,代表了Fea前3行数据为第1组,4-6行数据为第2组,7-9行数据为第三组。
%          关于此species变量更多信息,可以查看下述链接中的"Grouping variable":
%          https://ww2.mathworks.cn/help/stats/gscatter.html?s_tid=doc_ta#d124e492252
% 
% figflag:是否画图,'on'为画图,'off'为不画,只有NumDimensions为2或者3时起作用,3以上无法画图
% 输出:
% pcaVal:主成分分数,即经过pca分析计算得到的主元,每一列是一个主元
% explained:每个主成分解释方差占总方差的百分比,以列向量形式返回。
% coeff:主成分系数,由于data*coeff=score,所以当有一组新的数据data2想要以同样的主元坐标系进行降维时,可以使用data2*coeff得到,然后截取相应的列
% 但如果options.Standardize设置为true,则需要采用下述指令实施同步归一化及降维: mapminmax('apply',data2,PS)*coeff
% PS:数据归一化的相关参数,只有在options.Standardize设置为true时会返回该参数

三、快速开始

1.运行测试脚本

先在MATLAB里打开下载好的文件夹,然后运行demo_PCA.m程序,程序运行完毕后如果没报错,且正常画出分布图像,则说明运行环境正常,程序正确。

2.修改仿真数据/导入数据

复制一个demo_PCA.m的文件副本,在这个副本里做如下修改:

(1)第一种情况,你可能想要对你自己要研究的数据进行降维,此时你需要对 demo_PCA.m 脚本文件中的第1小节内容进行修改替换即可。需要注意的是,请最好保持变量名的一致,即将待降维的矩阵命名为data。此时数据替换完成。

(2)第二种情况,你可能是想对一段真实采集的数据进行滤波,此时需要根据你的文件类型的不同(excel,txt,csv等),将数据导入MATLAB的方法有所不同。同学们可以看博主针对常用文件的导入方法的这个教程,教程上未包含的数据类型,大家可以再参考这个文档导入完成后请将这个待降维信号命名为data

3.实现PCA降维

参照 demo_PCA.m文件中第二步,按照实际需求设置options.NumDimensions 、options.Standardize及figflag的值。

运行程序即可。

四、关于完整版与公开版代码

功能完整版公开版
数据导入、参数设置、实现PCA降维
软件全部源码(函数m文件)×
画图无水印×
降维数据长度无限制150以内

五、获取公开版程序(需使用电脑浏览器打开)

PCA代码(公开版)

注:公开版代码需使用MATLAB2022a及以上版本

六、获取完整版程序(使用电脑浏览器或者手机浏览器打开)

获取通道一(淘宝):点击此处获取完整版程序

获取通道二(本页面):点击下面“立即支付”按钮,付款后获取完整版代码下载链接和售后联系方式~本通道处于测试阶段,使用该通道可以额外优惠(仅需39元)。付款完成后刷新一下本页面即可看到下载链接。

(注意支付跳转失败的话,请使用浏览器打开本页面)

您需要先支付 39元 才能查看此处内容!立即支付

七、完整版代码重要更新

20230303 完成初版代码

八、常见问题

问题1:该降维方法只能降维到二维或者三维吗?

降维方法可以将高维数据降至任意低维度,而不仅仅是二维或三维。具体的降维维度取决于你的需求和应用场景。不过降维到二维或者三维可以进行可视化展示,更高维度则不行。