适用平台:Matlab2021及以上
什么是数据降维:数据降维是指将高维度的数据映射到低维度的空间中,同时保留数据中的重要信息。这种降维的操作可以帮助我们更好地理解和处理数据,并且可以降低计算的复杂度,提高机器学习算法的效率和准确率。
降维方法:PCA和KPCA都是降维技术,用于从高维数据中提取主要特征或进行非线性降维。下面将详细说明它们的原理和区别(附带程序结果)。
主成分分析
(Principal Component Analysis,PCA)
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表中,方便大家查阅。
部分程序:
完整程序:https://mbd.pub/o/bread/ZZqXmJdw
% 特征值排序 % 来自公众号《创新优化及预测代码》
[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);
%% 特征值绘图 % 来自公众号《创新优化及预测代码》
figure
plot(sortedEigenvalues,'b.-','MarkerSize',20,'linewidth',2);
ylim = get(gca,'Ylim');
hold on
% 绘制特征值等于1线 % 来自公众号《创新优化及预测代码》
x = 1:b;
y = ones(1,b);
plot(x,y,'r--','linewidth',2);
box off
% 设置文字大小,同时影响坐标轴标注、图例、标题等。
set(gca,'linewidth',1)
set(gca,'FontSize',10);
set(get(gca,'Xlabel'),'FontSize',10);
set(get(gca,'Ylabel'),'FontSize',10);
set(gca,'XColor','k','YColor','k');
% 坐标轴标注、标题等。 % 来自公众号《创新优化及预测代码》
legend('特征值λ','特征值等于1','FontSize',13);
xlabel('主成分个数','Interpreter', 'latex','FontSize',13);
ylabel('特征值λ','Interpreter', 'latex','FontSize',13);
grid off;
box off
部分图片来源于网络,侵权联系删除!
欢迎感兴趣的小伙伴联系小编获得完整版代码哦~,关注小编会继续推送更有质量的学习资料、文章程序代码~