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

  统计/机器学习 监督式学习 数据预处理 数据降维    浏览次数:10234        分享
1

我要建立一个二元分类器,因为数据维数比较大,我考虑了先做PCA来降维,然后再做一个分类器。

我试了好几个算法,比如决策树,随机森林,gbm,发现总是直接原始数据训练出来的模型精度很高,用PCA降维后的数据训练的模型精度较低。

请问理论上讲PCA会降低分类器的精度吗?


 

thatdeep   2018-04-27 09:57



   4个回答 
9

pca后testing精度变好和变坏都见过。和很多因素有关,比如pca前要normalization,能量阈值(99%)的选择,数据本身的复杂度(是否能用线性模型表示),模型的拟合复杂函数的能力(线性或深度神经网络),还有模型的训练程度(overfitting或者underfitting)。pca原本是针对简单数据和线性模型,如果数据和模型都很复杂,pca效果很难保证。

我理解是两种情况下pca有好处:1.损失的信息里噪音占多数,有人说相当于加了正则项;2.模型太弱(比如线性),本来就提取不出被扔掉的信息,反而会学到一部分噪音。

非线性降维可以了解下kernel pca,t-SNE,autoencoder。

------------------------------------------------

举例说明下PCA在线性回归里的作用。

$y=Xw$里$w=X^{-1}y=(X^TX)^{-1}Xy$。 当$X$的condition number很大时(ill-conditioned),$(X)^{-1}$会有很大误差,比如放大$X$里的round-off error。而condition number是$X$的最大singular value/最小singular value。

PCA的作用是:

$PCA(X)=SVD(X)=USV^T$,而X的singular value$S$等于$X^TX$的eigen value的平方根。

$X^{-1}=VS^{-1}U^T$。$s_i$指第i个singular value。假如$s_i=10^{-30}$ 则 $1/s_i=10^{30}$ 。也就说$s_i$很小的维度,误差会放大很多。

PCA降维就是扔掉$S$中很小的一些维度,变向减小了剩余的$X_1$的condition number, 让$X_1^{-1}$ 的误差更小。

正则项作用:

如果不用PCA扔掉这些$s_i$小的维度,还可以用正则项(比如 Tikhonov regularization),相当于在$s_i=s_i+c$, $c$是一常数,这样也能降低$X$的condition number。比如加正则项前condition number=100/0.001=100000,加正则项后condition number=(100+1)/(0.001+1)=100.899,变小了1000倍。



SofaSofa数据科学社区DS面试题库 DS面经

Zealing   2018-04-28 17:55

讲得很好! - 曾经是科比   2018-05-06 11:22
4

很多时候,我们在分类或者回归任务前先PCA降维,不一定是为了精度。可能是为了

  1. 为了可视化(降到2或者3维)
  2. 为了减小数据量、增加训练速度
  3. 为了去掉冗余的特征

在PCA之后,数据的维度降低,必然会造成信息丢失,减少的维度越多,丢失信息越多;同时,数据中的噪声也可能被降低。所以精度可能提高、也可能降低。

最直接的方法是做cross validation,选出最佳的PCA后数据的维度。


SofaSofa数据科学社区DS面试题库 DS面经

okayguy   2018-04-29 03:24

2

我理解的PCA就是在总体上降低数据的信息量,在删减数据的时候难免会同时删减有效信息和噪音信息。

当删减噪音信息比较多的时候,PCA就是对精度有帮助的。

当删减有效信息比较多的时候,PCA就是对精度有反作用的。

SofaSofa数据科学社区DS面试题库 DS面经

robin_he   2019-10-20 01:48

1

我觉得会的,因为降维毕竟会损失很多信息。


SofaSofa数据科学社区DS面试题库 DS面经

dirkdirk   2018-04-28 08:51



  相关讨论

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

Truncated SVD和PCA有什么区别吗?

用pca对数据集降维时为什么一定要训练集和测试集?

PCA算法是一种保距算法吗?

主成分分析法(PCA)算是黑盒算法吗?

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

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

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

PCA与非负矩阵分解(NMF)的异同?

sklearn pca 数据降维结果不一致

  随便看看

R里线性回归结果中最后的F-statistic什么意思?有什么用?

为什么矩阵的二范数和向量的二范数的定义不同?

怎么把pandas dataframe中的一列转成一个list?

KNN中K值的选择

推荐系统里的ALS是什么意思?