Ошибка при использовании scikit-learn PCA.score () - PullRequest
0 голосов
/ 27 ноября 2018

Я использую PCA ( Анализ основных компонентов ) из библиотеки sklearn .Учебные комплекты, с которыми я работаю, имеют следующие формы: 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)

И я использую score из LogisticRegression, чтобы найти эффективность преобразования и среднюю точность подбора, используя набор тестовых данных:

print lr.score(X_test_pca, y_test)
>>> 0.9814814814814815

Однако,когда я использую score из 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,) 

Что я делаю не так?Как я могу проверить достоверность результатов PCA в X_testy_test)?

1 Ответ

0 голосов
/ 27 ноября 2018

Для PCA.score() вам нужно будет использовать исходные данные испытаний.В настоящее время вы отправляете X_test_pca в него, который уже преобразован им.

Для функции score() в любом методе scikit-learn вам потребуется тип данных, который вы использовали в функции fit().Не преобразованный вывод.PCA автоматически преобразует исходные данные в методе score(), а затем вычисляет лог-вероятность.

Измените это:

pca.score(X_test_pca, y=None)

на следующее:

pca.score(X_test_std, y=None)
...