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

时间:2014-10-03 19:33:39

标签: matlab image-processing machine-learning statistics classification

我有一个非常大的数据集,我需要将其用于分类目的。但是当我尝试在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都已替换为极小的值,例如{ {1}}。我认为,因为它们很小,所以它们也可以用于其他目的。但有什么方法可以解决这个问题吗?比如获得相同的数据。

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

1 个答案:

答案 0 :(得分:3)

降维技术丢失信息。你不能重现你的初始数据,只有它的“近似值”。实际上,这可以被视为一种压缩。与有损压缩技术类似 - 您无法恢复确切的原始数据。