【发布时间】:2018-06-14 23:06:40
【问题描述】:
我正在使用 sklearn.decomposition.PCA 进行一些 PCA。我发现如果输入矩阵 X 很大,PCA.transform 的两个不同 PCA 实例的结果将不一样。例如,当 X 是一个 100x200 的矩阵时,就不会有问题。当 X 为 1000x200 或 100x2000 矩阵时,两个不同的 PCA 实例的结果会有所不同。我不确定这是什么原因:我想 sklearn 的 PCA 求解器中没有随机元素?我正在使用 sklearn 版本 0.18.1。使用 python 2.7
下面的脚本说明了这个问题。
import numpy as np
import sklearn.linear_model as sklin
from sklearn.decomposition import PCA
n_sample,n_feature = 100,200
X = np.random.rand(n_sample,n_feature)
pca_1 = PCA(n_components=10)
pca_1.fit(X)
X_transformed_1 = pca_1.transform(X)
pca_2 = PCA(n_components=10)
pca_2.fit(X)
X_transformed_2 = pca_2.transform(X)
print(np.sum(X_transformed_1 == X_transformed_2) )
print(np.mean((X_transformed_1 - X_transformed_2)**2) )
【问题讨论】:
-
尝试使用random_state参数:pca_1 =PCA(n_components=10, random_state=42)
标签: python-2.7 scikit-learn pca