You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MATLAB中将低维PCA投影点还原至原始空间?

关于PCA降维后还原回高维空间的问题解答

嘿,这个问题我之前做PCA可视化后还原数据时也踩过坑,咱们一步步理清楚哈!

首先得先明确你用的MATLAB pca 函数的输出逻辑,再看你的还原代码问题在哪,最后给正确的方法:

1. 先理清你现有PCA代码的逻辑(顺便纠正可能的笔误)

你说X是455样本×30特征的矩阵,但你调用的是 pca(X') ——这里其实有个小问题:MATLAB的pca默认要求输入是样本数×特征数的矩阵(行是样本,列是特征)。如果X是455×30(样本×特征),那X'就是30×455,相当于把30个特征当成了“样本”,455个样本当成了“特征”,这显然和你后续用gscatter(score(:,1),score(:,2),Y)的需求矛盾(Y是455个样本标签,score应该是455行才对)。所以正确的PCA调用应该是:

[coeff, score, ~, ~, ~, mu] = pca(X); % X是455×30,样本×特征

此时:

  • coeff:30×30的矩阵,每一列是一个主成分正交向量(前2列就是你用来降维的主成分)
  • score:455×30的矩阵,每一行是对应样本在主成分空间的得分(score(:,1:2)就是你画散点图的2D投影)
  • mu:1×30的向量,是原始数据每个特征的均值

2. 你的还原代码为什么无效?

你写的projecte30dz=z*coeff(1:2,:)是错误的,原因有两个:

  • 维度逻辑错了:主成分向量是coeff的列,不是行。coeff(1:2,:)取的是前2行,这完全不是用来还原的主成分方向
  • 没考虑均值:PCA降维时是先对原始数据去均值的,还原时必须加回均值才能回到原始数据空间

3. 正确的还原方法

假设你现在的z是n个新样本的2D得分(n×2的矩阵,和score(:,1:2)的格式一致),要还原回30维空间,步骤如下:

步骤1:通过得分还原出去均值的30维数据

利用主成分向量的正交性,我们用得分乘以coeff前2列的转置,得到去均值的高维数据:

X_centered_recon = z * coeff(:,1:2)';

这里coeff(:,1:2)是30×2的矩阵(前2个主成分向量),转置后是2×30,和n×2的z相乘得到n×30的去均值数据。

步骤2:加回均值得到原始空间的30维数据

因为PCA降维前先对数据做了去均值处理,所以还原时必须加回每个特征的均值mu:

X_recon = X_centered_recon + mu;

4. 重要提醒

这种还原是近似还原,因为你只保留了前2个主成分,丢失了剩下28个主成分携带的信息,所以还原后的30维数据和原始数据会有一定误差——误差大小取决于前2个主成分的方差解释率(你可以用explained参数查看,explained(1)+explained(2)就是前2个主成分解释的方差占比)。

内容的提问来源于stack exchange,提问作者havakok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:24:18