我正在尝试使用sklearn
中的PCA
,设置n_components = 5
。我使用fit_transform(data)
对数据进行降维处理。
最初,我尝试对pca.components_
的值和我的x_features
数据进行经典的矩阵乘法,但结果不同。所以我可能是在进行乘法时出了错,或者我没有理解fit_transform
的工作原理。
下面是一个比较经典矩阵乘法和fit_transform
的示例:
import numpy as npfrom sklearn import decompositionnp.random.seed(0)my_matrix = np.random.randn(100, 5)`mdl = decomposition.PCA(n_components=5)mdl_FitTrans = mdl.fit_transform(my_matrix)pca_components = mdl.components_mdl_FitTrans_manual = np.dot(pca_components, my_matrix.transpose())mdl_FitTrans_manualT = mdl_FitTrans_manual.transpose()
我期望mdl_FitTrans == mdl_FitTrans_manual
的结果是True
,但结果是False
。
回答:
查看sklearn
中transform()
方法的实现方式:https://github.com/scikit-learn/scikit-learn/blob/a5ab948/sklearn/decomposition/base.py#L101
根据其描述,手动降维的步骤如下:
import numpy as npfrom sklearn import decompositionnp.random.seed(0)data = np.random.randn(100, 100)mdl = decomposition.PCA(n_components=5)mdl_fit = mdl.fit(data)data_transformed = mdl_fit.transform(data)data_transformed_manual = np.dot(data - mdl_fit.mean_, mdl.components_.T)np.all(data_transformed == data_transformed_manual)True