Matlab PCA碎石图:如何确定最具方差贡献的原始变量?
关于PCA碎石图与原始变量方差贡献的澄清与解决方法
首先要明确核心概念:你用explained绘制的碎石图,展示的是**主成分(原始变量的线性组合)**的方差占比,而非单个原始变量的方差贡献。PCA的输出是按主成分的方差降序排列的,这和原始变量本身的方差没有直接的一一对应关系。
一、若想找「原始变量自身方差最大的那个」
直接计算原始变量的方差即可,无需通过PCA:
% 计算每个原始变量的方差(X为n行7列数据集,每行一个样本、每列一个变量) original_var = var(X); % 绘制原始变量方差柱状图,序号与原始数据列直接对应 bar(original_var) xlabel('原始变量序号') ylabel('方差') title('各原始变量的方差分布')
通过这个图就能直接看出是变量3还是变量6的方差更大,序号完全对应原始数据的变量顺序。
二、若想找「对主成分贡献最大的原始变量」
主成分是原始变量的线性组合,coeff(载荷矩阵)的每一列对应一个主成分的载荷向量,向量元素代表对应原始变量在该主成分中的权重(绝对值越大,贡献越大):
% 以方差最大的第一主成分为例,提取其载荷的绝对值 pc1_loadings = abs(coeff(:, 1)); % 找到对第一主成分贡献最大的原始变量序号 [max_contribution, var_idx] = max(pc1_loadings); fprintf('对第一主成分贡献最大的原始变量是:变量%d\n', var_idx); % 可视化载荷矩阵,直观对比所有主成分与原始变量的关联 heatmap(coeff, 'XLabel', '主成分', 'YLabel', '原始变量', 'Title', '主成分-原始变量载荷矩阵')
如果要看其他主成分,只需把coeff(:,1)换成coeff(:,2)、coeff(:,3)等即可。
关键区分
explained:主成分的方差占总方差的比例,主成分按方差降序排列,与原始变量无直接对应var(X):单个原始变量自身的方差,直接对应原始变量序号coeff:原始变量对每个主成分的贡献权重,用于判断原始变量在主成分中的影响力
内容的提问来源于stack exchange,提问作者user2587726
相关产品推荐
相关产品推荐

