我想用Python里sklearn.decomposition.PCA函数对数据进行降维。我看到有三个方法,一个是fit,一个是fit_transform,还有一个是transform,这三个到底怎么用?
1个回答
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)