在 sklearn-python 工具箱中,有两个函数transform和fit_transformabout sklearn.decomposition.RandomizedPCA。两个函数的说明如下
transform
fit_transform
sklearn.decomposition.RandomizedPCA
但是它们之间有什么区别?
该.transform方法适用于您已经计算过PCA的情况,即如果您已经调用了它的.fit方法。
.transform
PCA
.fit
In [12]: pc2 = RandomizedPCA(n_components=3) In [13]: pc2.transform(X) # can't transform because it does not know how to do it. --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-13-e3b6b8ea2aff> in <module>() ----> 1 pc2.transform(X) /usr/local/lib/python3.4/dist-packages/sklearn/decomposition/pca.py in transform(self, X, y) 714 # XXX remove scipy.sparse support here in 0.16 715 X = atleast2d_or_csr(X) --> 716 if self.mean_ is not None: 717 X = X - self.mean_ 718 AttributeError: 'RandomizedPCA' object has no attribute 'mean_' In [14]: pc2.ftransform(X) pc2.fit pc2.fit_transform In [14]: pc2.fit_transform(X) Out[14]: array([[-1.38340578, -0.2935787 ], [-2.22189802, 0.25133484], [-3.6053038 , -0.04224385], [ 1.38340578, 0.2935787 ], [ 2.22189802, -0.25133484], [ 3.6053038 , 0.04224385]])
所以你想fit RandomizedPCA然后transform作为:
fit
RandomizedPCA
In [20]: pca = RandomizedPCA(n_components=3) In [21]: pca.fit(X) Out[21]: RandomizedPCA(copy=True, iterated_power=3, n_components=3, random_state=None, whiten=False) In [22]: pca.transform(z) Out[22]: array([[ 2.76681156, 0.58715739], [ 1.92831932, 1.13207093], [ 0.54491354, 0.83849224], [ 5.53362311, 1.17431479], [ 6.37211535, 0.62940125], [ 7.75552113, 0.92297994]]) In [23]:
特别是 PCA.transform将通过矩阵的 PCA 分解获得的基变化应用于X矩阵Z。
X
Z