在使用PCA降维时,有哪些坑?

  统计/机器学习 监督式学习 无监督学习 数据降维 开放问题    浏览次数: 1577
11

我有一个分类问题,列数很多,我试了下PCA降维,然后再训练分类器,可是结果反而差了不少。

不知道有没有人遇到过类似的情况,或者是我不小心踩进了PCA的坑?

大神们可以分享下PCA的坑吗?或者成功使用PCA的经验吗?


 

TheTheThe   2017-09-22 14:41



   6个回答 
13

除了各位说的,我再补充一些我所认为的坑


  • PCA依赖于线性假设。

            我们知道PCA本质上就是SVD,所以PCA不过是利用线性投影进行降维。但是数据的内在结构未必是简单的线性关系。


  • PCA是正交的。

            正如第一点所说,PCA是正交的投影,可是未必正交的就是最好的。想象一下,姚明和郭敬明(两个三维物体),我们用灯去照他们的影子,当灯光从两人正上方10米向下照的时候,两个人影子都是一坨圆;如果我们从侧面照他们,投影出来的两个影子,可能宽度差不多,长度却差不少,这样的影子(三维降到二维)就含有更多信息。


  • PCA让方差尽量大。

            PCA本质上就是抓住主体,放过细枝末节。但有时候细枝末节往往是很重要的。五个韩国姑娘,其中一个姑娘鼻子上有痣,于是你一眼就认出了。你对她们的照片做PCA,之后发现,大家的脸型五官都没变,但是那个痣却找不到了,那你还能认出那个姑娘吗?你的算法还能认出那个姑娘吗?


木子周   2017-10-11 09:50

PCA是个差强人意的照妖镜 - batmanX   2017-10-11 10:55
8

一定要记得先做标准化。参考这个


abuu   2017-09-24 13:14

5

降维不能降太多,不然丢失了太多信息,反而不利于预测

雷猴   2017-09-23 09:48

4

我也说个我的。我之前是把training set的特征和test set的特征和一起做了PCA降维。

其实这是大错特错的,因为在PCA中用test set的特征,这属于信息泄露。

正确的方法是在training set上fit_transform,在test set上transform。



道画师   2017-09-26 01:58

4

PCA降为前需要把相关性高的那些列去掉,不然会影响到PCA的效果。


清风   2017-09-27 09:43

2

说明你的样本量不够大。

为什么你要PCA降维? 因为你的数据样本大到上千万行几十列,必须用hadoop进行算法计算,而你只有一台1万的台式机,你需要做一定的数据信息舍弃,放弃精准度,得到一个95%或者90%近似正确的结果。

PCA降维的核心理念是,抓住核心部分,放弃一些有影响力但是却不那么重要的列,以此减少算法的计算复杂度。

如果你PCA降维后反而效果更差了,说明你的样本量(行数)不够大,放弃的那些列对结果有“较大”的影响。

所以,别人扛着三百斤的大石头(大数据),为了方便,造了一辆马车(PCA降维)。不代表,你扛着三斤的石头(你的数据集),也需要一辆马车(PCA降维)。在现实的情况中,如果BAT是三百斤的大石头,可能你扛的只是0.00003斤的石头,放口袋里就可以了,不需要马车。

每个数据集都是不一样的烟火,抛开了数据集属性谈算法,都是耍流氓。

天晴   2017-12-25 18:04



  相关主题

为什么PCA被称作非监督式学习?   2回答

PCA会降低分类器的精度吗?   3回答

PCA降维之前为什么要先标准化?   2回答

sklearn.decomposition.PCA方法中fit, fit_transform, transform应该怎么用   1回答

PCA降维中的特征值和特征向量   2回答

除了PCA,还有什么降维的方法?   9回答

利用PCA降维,降到几维比较合适?   1回答

PCA的目标函数   1回答

PCA和SVD是一回事吗?   1回答

python里怎么实现t-SNE降维?   1回答

维数大于样本数的问题   3回答

分类变量,进行One hot编码,维度升高,如何处理?   3回答



回答问题时需要注意什么?

我们谢绝在回答前讲“生动”的故事。

我们谢绝“这么简单,你自己想”、“书上有的,你认真看”这类的回答;如果你认为对方的提问方式或者内容不妥,你可以直接忽略该问题,不用进行任何作答,甚至可以对该问题投反对票。

我们谢绝答非所问。

我们谢绝自己不会、硬要回答。

我们感激每一个用户在编写答案时的努力与付出!