使用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%的方差
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,它已经被PCA转换过了。

对于任何scikit-learn方法中的score()函数,你需要在fit()函数中使用的数据类型,而不是转换后的输出。PCA会在score()方法内部自动转换原始数据,然后计算对数似然。

将这个:

pca.score(X_test_pca, y=None)

改为这个:

pca.score(X_test_std, y=None)

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注