使用 scikit-learn PCA.score() 时出错
Error when using scikit-learn PCA.score()
我正在使用 sklearn 库中的 PCA
(主成分分析)。我正在使用的训练集具有以下形状:X_train: (124, 13), y_train: (124, )
。测试集具有以下形状:X_test: (54, 13), y_test: (54, )
。
我就是这样做的 PCA
:
from sklearn.decomposition import PCA
pca = PCA(0.75) #75 % variance retained
X_train_pca = pca.fit_transform(X_train_std)
X_test_pca = pca.transform(X_test_std)
print X_train_pca.shape, X_test_pca.shape, y_train.shape, y_test.shape
>>> (124, 5), (54, 5), (124,), (54,)
为了检验主成分分析结果的好坏,我先用了逻辑回归。
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression()
lr = lr.fit(X_train_pca, y_train)
并且,我使用 LogisticRegression
中的 score
来使用测试数据集找到转换的功效和拟合的平均准确度:
print lr.score(X_test_pca, y_test)
>>> 0.9814814814814815
但是,当我使用 PCA (sklearn)
中的 score
时,我遇到错误:
print pca.score(X_test_pca, y=None)
---------------------------------------------------------------------------
ValueError
Traceback (most recent call last)
<ipython-input-217-540210963ed0> in <module>()
----> 3 print pca.score(X_test_pca, y=None)
/Users/username/.local/lib/python2.7/site-packages/sklearn/decomposition/pca.pyc in score(self, X, y)
529 Average log-likelihood of the samples under the current model
530 """
--> 531 return np.mean(self.score_samples(X))
532
533
/Users/username/.local/lib/python2.7/site-packages/sklearn/decomposition/pca.pyc in score_samples(self, X)
503
504 X = check_array(X)
--> 505 Xr = X - self.mean_
506 n_features = X.shape[1]
507 log_like = np.zeros(X.shape[0])
ValueError: operands could not be broadcast together with shapes (54,5) (13,)
我做错了什么?如何测试 X_test
(和 y_test
)中 PCA
的结果好坏?
对于PCA.score()
,您将需要使用原始测试数据。目前你正在向它发送 X_test_pca
,它已经被它转换了。
对于任何 scikit-learn 方法中的 score()
函数,您将需要在 fit()
函数中使用的数据类型。不是转换后的输出。 PCA
会在score()
方法里面自动转换原始数据,然后计算log-likelihood。
改变这个:
pca.score(X_test_pca, y=None)
对此:
pca.score(X_test_std, y=None)
我正在使用 sklearn 库中的 PCA
(主成分分析)。我正在使用的训练集具有以下形状:X_train: (124, 13), y_train: (124, )
。测试集具有以下形状:X_test: (54, 13), y_test: (54, )
。
我就是这样做的 PCA
:
from sklearn.decomposition import PCA
pca = PCA(0.75) #75 % variance retained
X_train_pca = pca.fit_transform(X_train_std)
X_test_pca = pca.transform(X_test_std)
print X_train_pca.shape, X_test_pca.shape, y_train.shape, y_test.shape
>>> (124, 5), (54, 5), (124,), (54,)
为了检验主成分分析结果的好坏,我先用了逻辑回归。
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression()
lr = lr.fit(X_train_pca, y_train)
并且,我使用 LogisticRegression
中的 score
来使用测试数据集找到转换的功效和拟合的平均准确度:
print lr.score(X_test_pca, y_test)
>>> 0.9814814814814815
但是,当我使用 PCA (sklearn)
中的 score
时,我遇到错误:
print pca.score(X_test_pca, y=None)
---------------------------------------------------------------------------
ValueError
Traceback (most recent call last)
<ipython-input-217-540210963ed0> in <module>()
----> 3 print pca.score(X_test_pca, y=None)
/Users/username/.local/lib/python2.7/site-packages/sklearn/decomposition/pca.pyc in score(self, X, y)
529 Average log-likelihood of the samples under the current model
530 """
--> 531 return np.mean(self.score_samples(X))
532
533
/Users/username/.local/lib/python2.7/site-packages/sklearn/decomposition/pca.pyc in score_samples(self, X)
503
504 X = check_array(X)
--> 505 Xr = X - self.mean_
506 n_features = X.shape[1]
507 log_like = np.zeros(X.shape[0])
ValueError: operands could not be broadcast together with shapes (54,5) (13,)
我做错了什么?如何测试 X_test
(和 y_test
)中 PCA
的结果好坏?
对于PCA.score()
,您将需要使用原始测试数据。目前你正在向它发送 X_test_pca
,它已经被它转换了。
对于任何 scikit-learn 方法中的 score()
函数,您将需要在 fit()
函数中使用的数据类型。不是转换后的输出。 PCA
会在score()
方法里面自动转换原始数据,然后计算log-likelihood。
改变这个:
pca.score(X_test_pca, y=None)
对此:
pca.score(X_test_std, y=None)