一看就会!特征降维:PCA、KPCA主成分,重要性排序!核主成分分析,贡献度计算,特征值,散点图,一键运行!Matlab程序

文摘   教育   2024-12-28 09:19   江苏  
适用平台:Matlab2021及以上
什么是数据降维:数据降维是指将高维度的数据映射到低维度的空间中,同时保留数据中的重要信息。这种降维的操作可以帮助我们更好地理解和处理数据,并且可以降低计算的复杂度,提高机器学习算法的效率和准确率。
降维方法:PCAKPCA都是降维技术,用于从高维数据中提取主要特征或进行非线性降维。下面将详细说明它们的原理和区别(附带程序结果)。
完整代码:https://mbd.pub/o/bread/ZZqXmJdw

主成分分析

Principal Component AnalysisPCA

PCA是一种降维技术,其目标是从给定的特征中生成新的特征,而不仅仅是挑选已有的特征。这些新的特征,称为主成分,是原始特征的线性组合。这样,PCA通过将数据投影到具有最大方差的方向上,来实现降维。
PCA中,主成分是按照它们所捕获的方差的降序排列的。选择前几个主成分就可以实现降维,因为这些主成分包含了原始数据中大部分的方差信息。通过舍弃方差较小的主成分,可以实现数据的降维,同时尽可能保留原始数据的信息

计算步骤:
  • 数据中心化: 首先,对数据进行中心化操作,不改变原始样本的布局,即将每个特征的均值减去相应特征的均值,使数据的均值为零,这有助于消除原始数据的平移影响。

  • 协方差矩阵: PCA的核心思想是通过计算协方差矩阵,找到数据中的主成分,即数据中方差最大的方向。

  • 特征值和特征向量: 对协方差矩阵进行特征值分解,得到特征值和特征向量。特征向量构成了主成分,而特征值表示数据在这些主成分方向上的方差。

  • 降维: 选择特征值较大的特征向量,对应的维度即为主成分,可以将数据投影到这些主成分上,实现降维。

特点:

  • 线性降维:PCA是一种线性降维方法,只能捕捉数据中的线性结构。

  • 全局性:PCA通过考虑整体方差来选择主成分,因此可能无法很好地捕捉局部的非线性结构。

核主成分分析
Kernel Principal Component Analysis,KPCA
PCA是线性的,对于包含非线性结构的数据,效果可能不佳。KPCA引入了核技巧,该技巧允许在高维空间中进行非线性映射,而无需显式计算高维空间中的数据点。核技巧的基本思想是通过核函数(如多项式核或高斯核)计算原始特征空间中的点对之间的相似度,然后将这些相似度用作在高维空间中执行PCA的基础。

计算步骤:
  • 非线性映射: 通过核技巧,KPCA将原始数据映射到一个高维的特征空间,使得在这个空间中数据的非线性结构变得线性可分。这使得在高维空间中进行PCA成为可能。

  • 主成分提取: 在高维空间中,KPCA通过找到数据中的主成分来完成降维。这些主成分对应于高维空间中的方差最大的方向。

  • 降维: KPCA将数据映射到高维空间,然后选择其中最重要的主成分,从而实现了在原始数据空间中的降维效果。这有助于保留数据中的非线性结构。

特点:

  • 非线性映KPCA能够处理包含非线性结构的数据,使得在高维空间中进行线性分析成为可能。这对于一些实际问题,如图像识别和模式识别,非常有用。

  • 保留非线性结构:与传统PCA相比,KPCA更能够保留数据中的非线性结构,因此在处理非线性问题时通常能够提供更好的性能。

  • 核函数的选择:KPCA的性能很大程度上取决于选择的核函数。不同的核函数适用于不同类型的数据,因此在应用KPCA时需要仔细选择适当的核函数。

  • 计算复杂度:由于涉及高维空间的计算,KPCA的计算复杂度相对较高。这可能在处理大规模数据集时成为一个挑战。

总结:如果数据具有明显的线性结构,PCA可能足够。但如果数据包含复杂的非线性结构,或者需要更好地捕捉局部信息,那么KPCA可能更为合适。

为了便于新手小白上手,本程序还支持将特征值、贡献率以及

  • PCA降维后的数据
  • KPCA降维后的数据

写进了Excel中,方便大家套用。

部分程序:

% 特征值排序 % 来自公众号《创新优化及预测代码》[sortedEigenvalues, idx] = sort(diag(D), 'descend');
%% 提取前5个主成分numComponents = 5;topComponents = V(:, idx(1:numComponents));
% 通过PCA降维reducedData = centeredData * topComponents;
% 计算每个主成分的贡献率contributionRatio = sortedEigenvalues / sum(sortedEigenvalues);
% 计算累积贡献率cumulativeContribution = cumsum(contributionRatio);
%% 来自公众号《创新优化及预测代码》%% 记录数据 % 将特征值、贡献率和累积贡献率写入Excel文件 xlswrite('PCA降维后的数据.xlsx', reducedData, 'Sheet1');xlswrite('主成分的特征值.xlsx', sortedEigenvalues(1:numComponents), 'Sheet1');xlswrite('主成分的贡献率.xlsx', contributionRatio(1:numComponents), 'Sheet1');xlswrite('主成分的累计贡献率.xlsx', cumulativeContribution(1:numComponents), 'Sheet1');
部分图片来源于网络,侵权联系删除!

完整代码:https://mbd.pub/o/bread/ZZqXmJdw

欢迎感兴趣的小伙伴点击左下角阅读原文上方链接获得完整版代码哦~,关注小编会继续推送更有质量的学习资料、文章程序代码~

创新优化及预测代码
免费分享研究理论及方法,基础代码资料,努力提供电力系统相关专业预测及优化研究领域的创新性代码,保质保量!面包多地址:https://mbd.pub/o/yc_yh/work
 最新文章