核主成分分析(KPCA)降维
最后更新于:2024-04-07 21:40:09
一、代码运行环境
MATLAB2017a及更新版本。
二、程序介绍
1.demo_KPCA.m文件
核主成分分析PCA降维函数khPCA.m的测试脚本文件,可以直接运行。程序运行完成后,会绘制出如下两张图:
此时在工作区能找到KPCA降维后的变量:kpcaVal,以及主成分方差占比具体数值:explained
2.khPCA.m文件
KPCA降维和画图的主函数文件。
KPCA降维以及画图功能全部封装在此函数。注意不能直接运行该函数文件,而要参照demo_KPCA.m文件的写法进行函数调用。
function [kpcaVal,explained] = khKPCA(data,options,species,figflag)
% 执行KPCA操作,并实现画图
% 依赖函数:KernelPca.m,原始代码见:https://github.com/kitayama1234/MATLAB-Kernel-PCA
% 输入:
% data:拟进行降维的数据,data维度为m*n,其中m为特征值种类数,n为每个特征值数据长度
% options:一些与kpca降维有关的设置,使用结构体方式赋值,比如 options.autoDir = 'on',具体包括:
% -autoDir:是否进行自动纠错,'on'为是,否则为否。开启自动纠错后会智能调整数据的行列方向。
% -NumDimensions:降维后的数据维度,默认为2,注意NumDimensions不能大于data原本维度
% -kernel: kernel类型选择('linear', 'gaussian', or 'polynomial'),默认为linear
% -gamma:超参数gamma的数值,默认为2
% -r:超参数r的数值,默认为1
% -d:超参数d的数值,默认为2
% -AutoScale:是否进行标准化,True或False,默认为False
% -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:每个主成分解释方差占总方差的百分比,以列向量形式返回。
% PS:数据归一化的相关参数,只有在options.Standardize设置为true时会返回该参数
3.KernelPca.m文件
实现KPCA降维的核心程序,该程序开源地址为:
https://github.com/kitayama1234/MATLAB-Kernel-PCA
三、快速开始
1.运行测试脚本
先在MATLAB里打开下载好的文件夹,然后运行demo_KPCA.m程序,程序运行完毕后如果没报错,且正常画出分布图像,则说明运行环境正常,程序正确。
2.修改仿真数据/导入数据
复制一个demo_KPCA.m的文件副本,在这个副本里做如下修改:
(1)第一种情况,你可能想要对你自己要研究的数据进行降维,此时你需要对 demo_KPCA.m 脚本文件中的第1小节内容进行修改替换即可。需要注意的是,请最好保持变量名的一致,即将待降维的矩阵命名为data。此时数据替换完成。
(2)第二种情况,你可能是想对一段真实采集的数据进行滤波,此时需要根据你的文件类型的不同(excel,txt,csv等),将数据导入MATLAB的方法有所不同。同学们可以看博主针对常用文件的导入方法的这个教程,教程上未包含的数据类型,大家可以再参考这个文档。导入完成后请将这个待降维信号命名为data。
3.实现PCA降维
参照 demo_KPCA.m文件中第二步,按照实际需求设置options.NumDimensions 、options.Standardize及figflag等参数的值。
运行程序即可。
四、关于完整版与公开版代码
功能 | 完整版 | 公开版 |
数据导入、参数设置、实现PCA降维 | √ | √ |
软件全部源码(函数m文件) | √ | × |
画图无水印 | √ | × |
降维数据长度 | 无限制 | 150以内 |
五、获取公开版程序(需使用电脑浏览器打开)
KPCA代码(公开版)
注:公开版代码需使用MATLAB2022a及以上版本
六、获取完整版程序(使用电脑浏览器或者手机浏览器打开)
获取通道一(淘宝):点击此处获取完整版程序
获取通道二(本页面):点击下面“立即支付”按钮,付款后获取完整版代码下载链接和售后联系方式~本通道处于测试阶段,使用该通道可以额外优惠(仅需39元)。付款完成后刷新一下本页面即可看到下载链接。
(注意支付跳转失败的话,请使用浏览器打开本页面)
七、完整版代码重要更新
20230312 完成初版代码
八、常见问题
问题1:该降维方法只能降维到二维或者三维吗?
降维方法可以将高维数据降至任意低维度,而不仅仅是二维或三维。具体的降维维度取决于你的需求和应用场景。不过降维到二维或者三维可以进行可视化展示,更高维度则不行。