首页 文章

通过PCA减小尺寸后无法生成原始数据

提问于
浏览
2

我有一个非常大的数据集,我需要用于分类目的 . 但是当我尝试在MatLab中使用它时,我会得到并且 out of memory 错误 . 为了解决这个问题,我试着研究PCA,因为这是解决这些问题的预期解决方案 .

因此,为了更好地理解PCA并确保我可以交替使用PCA和原始数据产生的结果,我想从PCA分数和系数中重现原始数据集 .

我使用以下代码获取PCA分数和系数,然后将其更改回原始数据集 .

%all_feats is the original dataset of size 128 x 19882
[n m] = size(double(all_feats));
Amean = mean(double(all_feats));
Astd = std(double(all_feats));
B =  zscore(double(all_feats)); %standardise the data
[COEFF,testy] = pca(B,  'NumComponents',2); %This does not reproduce the same result
%[COEFF,testy] = pca(B); %This works ok, but with values > 0
back = ((B * COEFF) * COEFF') .* repmat(Astd,[n 1]) + repmat(Amean,[n 1]);

我发现当我使用 [COEFF,testy] = pca(B); 时, backall_feats 相同,但原始数据集中的所有 0 都被替换为极小的值,如 3.517186542012496e-13 . 我认为,因为它们很小,所以它们也可以用于其他目的 . 但有什么方法可以解决这个问题吗?比如获得相同的数据 .

此外,如果我想通过使用 [COEFF,testy] = pca(B, 'NumComponents',2); 将尺寸缩小到2,那么 back 看起来就像 all_feats . 这是为什么?数据是否因尺寸减小而改变?我可以不用它来代替原始数据集吗?

1 回答

  • 3

    降维技术 lose 信息 . 你 cannot 重现你的初始数据,只有它的"approximation" . 实际上这可以看作是一种 compression . 与有损压缩技术类似 - 您无法恢复确切的原始数据 .

相关问题