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

  统计/机器学习 数据降维 Python    浏览次数:12358        分享
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 数据降维结果不一致

Truncated SVD和PCA有什么区别吗?

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

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

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

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

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

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

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

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

  随便看看

怎么在jupyter notebook里查看python的版本?

怎么把pandas dataframe中一列英文文本全部转成小写?

怎么理解库克距离(Cook's distance)?

序列的autocorrelation(自相关系数)的计算公式

怎么从矩母函数(mgf)推导得到概率密度函数(pdf)?