通过PCA降维后无法还原原始数据

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

为了更好地理解PCA,并确保我可以将PCA产生的结果与原始数据互换使用,我想从PCA的得分和系数中重现原始数据集。

我使用以下代码获取PCA的得分和系数,然后将其转换回原始数据集。

%all_feats是大小为128 x 19882的原始数据集[n m] = size(double(all_feats));Amean = mean(double(all_feats));Astd = std(double(all_feats));B =  zscore(double(all_feats)); %标准化数据[COEFF,testy] = pca(B,  'NumComponents',2); %这不会产生相同的结果%[COEFF,testy] = pca(B); %这可以工作,但值> 0back = ((B * COEFF) * COEFF') .* repmat(Astd,[n 1]) + repmat(Amean,[n 1]);

我发现当我使用[COEFF,testy] = pca(B);时,backall_feats相同,但原始数据集中的所有0都被替换为非常小的值,如3.517186542012496e-13。我认为由于它们非常小,在其他用途中可能可以视为0。但有没有办法解决这个问题?比如得到完全相同的数据?

另外,如果我想通过使用[COEFF,testy] = pca(B, 'NumComponents',2);将维度减少到2,那么back看起来与all_feats完全不同。这是为什么?数据在降维过程中是否发生了变化?我不能用它代替原始数据集吗?


回答:

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

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注