Python 使用scikit学习PCA.score()时出错
我正在使用来自sklearn库的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_
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
时,会发生错误。