【问题标题】:Error when using scikit-learn PCA.score()使用 scikit-learn PCA.score() 时出错
【发布时间】:2019-04-28 19:42:44
【问题描述】:

我正在使用 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)

而且,我使用来自LogisticRegressionscore 来使用测试数据集查找转换的功效和拟合的平均准确度:

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 的结果的优劣?

【问题讨论】:

  • 我在这里看到的基本问题是将映射(变换)应用于训练集和测试集。您刚刚完成了对数据集的训练。
  • @min2bro :感谢您的回答。但是,我很困惑。当我在来自 LogisticRegression (lr.score(X_test_pca, y_test)) 的 score 中使用 X_testy_test 时,没有发现任何错误。当我从PCA 使用score 时发生错误。

标签: python machine-learning scikit-learn pca


【解决方案1】:

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

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

改变这个:

pca.score(X_test_pca, y=None)

到这里:

pca.score(X_test_std, y=None)

【讨论】:

    猜你喜欢
    • 2018-07-21
    • 2018-01-27
    • 2016-02-28
    • 2019-11-26
    • 2018-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多