Python 使用scikit学习PCA.score()时出错

Python 使用scikit学习PCA.score()时出错,python,machine-learning,scikit-learn,pca,Python,Machine Learning,Scikit Learn,Pca,我正在使用来自sklearn库的PCA(主成分分析)。我正在使用的训练集具有以下形状:X\u-train:(124,13),y\u-train:(124,12)。测试集具有以下形状:X\u测试:(54,13),y\u测试:(54,13) 我就是这样做的PCA: from sklearn.decomposition import PCA pca = PCA(0.75) #75 % variance retained X_train_pca = pca.fit_transform(X_train_

我正在使用来自sklearn库的
PCA
主成分分析)。我正在使用的训练集具有以下形状:
X\u-train:(124,13),y\u-train:(124,12)
。测试集具有以下形状:
X\u测试:(54,13),y\u测试:(54,13)

我就是这样做的
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,)
为了检验主成分分析结果的优度,我首先使用logistic回归

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)中的
分数时,我会遇到错误:

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,) 
print pca.score(X\u test\u pca,y=None)
---------------------------------------------------------------------------
数值误差
回溯(最近一次呼叫最后一次)
在()
---->3打印主成分分析分数(X检验主成分分析,y=无)
/得分中的Users/username/.local/lib/python2.7/site-packages/sklearn/decomposition/pca.pyc(self,X,y)
529当前模型下样本的平均对数似然
530         """
-->531返回np.平均值(自我评分样本(X))
532
533
/分数样本中的Users/username/.local/lib/python2.7/site-packages/sklearn/decomposition/pca.pyc(self,X)
503
504 X=检查_阵列(X)
-->505 Xr=X-自身平均值_
506 n_特征=X.形状[1]
507 log_like=np.zero(X.shape[0])
ValueError:操作数无法与形状(54,5)(13,)一起广播
我做错了什么?我如何在
X_测试
(和
y_测试
)中测试
PCA
结果的优劣?

对于
PCA.score()
,您将需要使用原始测试数据。目前您正在向其中发送
X_测试PCA
,该数据已被转换

对于任何scikit学习方法中的
score()
函数,您将需要在
fit()
函数中使用的数据类型。而不是转换后的输出。
PCA
将自动转换
score()
方法中的原始数据,然后计算日志似然度

更改此项:

pca.score(X_test_pca, y=None)
为此:

pca.score(X_test_std, y=None)
对于
PCA.score()
,您将需要使用原始测试数据。当前您正在向其中发送
X\u test\u PCA
,该数据已被转换

对于任何scikit学习方法中的
score()
函数,您将需要在
fit()
函数中使用的数据类型。而不是转换后的输出。
PCA
将自动转换
score()
方法中的原始数据,然后计算日志似然度

更改此项:

pca.score(X_test_pca, y=None)
为此:

pca.score(X_test_std, y=None)

我在这里看到的基本问题是将映射(转换)应用于训练集和测试集。您刚刚对训练数据集进行了映射。@min2bro:谢谢您的回答。但是,我感到困惑。当我在LogisticReturnal(
lr.score)的
score
中使用
X_test
y_test
时,我没有发现任何错误(X_测试\u pca,y_测试)
)。当我使用
pca
中的
得分时,会发生错误。我在这里看到的基本问题是应用映射(变换)对于训练集和测试集。您刚刚对数据集进行了训练。@min2bro:谢谢您的回答。但是,我感到困惑。当我在逻辑回归(
lr.score(X\u test\u pca,y\u test)
中使用
X\u test
y\u test
时,我没有发现任何错误。当我从
PCA
使用
score
时,会发生错误。