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

  统计/机器学习 数据降维 Python    浏览次数:4496        分享
3

我想用Python里sklearn.decomposition.PCA函数对数据进行降维。我看到有三个方法,一个是fit,一个是fit_transform,还有一个是transform,这三个到底怎么用?

 

想当小五哥   2017-03-25 11:10



   1个回答 
12

fit, fit_transform, transform这三个方法用数学公式表达起来可能更直白。

假设需要被PCA的原始矩阵是$X$,$n$行$p$列,PCA的参数$n\_component = k \ll p$.

按照PCA的原理,

$$X\approx M N,$$

其中矩阵$M$是$n$行$k$列,$N$是$k$行$p$列。因为$NN^T$约等于单位矩阵,

$$M \approx XN^T,$$

$M$就是降维之后的数据,只剩下了$k$个特征。


>>> pca = sklearn.decomposition.PCA(n_components=k)

>>> pca.fit(X)

# fit就相当于求$N$的过程。

>>> M = pca.transform(X)

# transform就相当于用矩阵$N$左乘$X$,从而得到$M$。


当然这两步也可以合成一步来完成

>>> pca = sklearn.decomposition.PCA(n_components=k)

>>> M = pca.fit_transform(X)


如果你想用$X$降维的方式对另外一个数据集$S$进行降维(比如先对训练集降维,然后对测试集用一样的方式进行降维),

$$H \approx SN^T$$

那么fit和transform两个步骤就不能合并了。

>>> pca = sklearn.decomposition.PCA(n_components=k)

>>> pca.fit(X)

>>> H = pca.transform(S)



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

高代兄   2017-03-28 08:50



  相关主题

sklearn pca 数据降维结果不一致   2回答

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

PCA算法是一种保距算法吗?   1回答

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

PCA的目标函数   1回答

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

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

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

一个关于PCA与eigenvector的问题   2回答

Truncated SVD和PCA有什么区别吗?   1回答

PCA需要正态性作为提前假设吗?   1回答

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



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

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

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

我们谢绝答非所问。

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

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