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

  统计/机器学习 数据降维 Python    浏览次数: 2714
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面经 问答 实战

高代兄   2017-03-28 08:50



  相关主题

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

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

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

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

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

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

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

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

PCA的目标函数   1回答

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

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

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



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

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

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

我们谢绝答非所问。

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

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