Проблемы с трансляцией в NumPy - PullRequest
0 голосов
/ 04 февраля 2019

Я пытаюсь установить PCA на данные поезда и испытаний.

X_train.shape

(2735, 219)

PCA:

pca = PCA(n_components=30)
X_train = pca.fit_transform(X_train)

Данные испытаний:

test_values.shape
(395, 219)

Преобразование:

test_values = pca.transform(test_values)

Ошибка:

ValueError: operands could not be broadcast together with shapes (395,219) (30,)

Я не уверен, почему произошла ошибка широковещания, оба массива имеют одинаковые столбцы 219. Любые предложения, пожалуйста

Ответы [ 3 ]

0 голосов
/ 04 февраля 2019

Я попытался воспроизвести ваш пример, и все работает нормально:

x_train = np.random.randint(10, size=50).reshape(10, 5)
pca = PCA(n_components=3)
print(x_train.shape)
x_train = pca.fit_transform(x_train)
test_values = np.random.randint(10, size=100).reshape(20, 5)
print(test_values.shape)
test_values = pca.transform(test_values)
print(test_values.shape)

Код выводит:

(10, 5)
(20, 5)
(20, 3)

Убедитесь, что ошибка появляется на линии с PCA.Похоже, вы делаете какую-то операцию с массивами неправильной формы.

0 голосов
/ 04 февраля 2019

Держу пари, что это проблема с сохраняемой переменной, если вы используете ipython, ноутбук или что-то в этом роде.Если это не так, вы можете проигнорировать этот ответ.

Рассмотрите следующие ячейки.

enter image description here

Когда я запускаю эти ячейки, Все отлично.Однако, если я попытаюсь запустить вторую ячейку снова, я получу эту ошибку:

ValueError: operands could not be broadcast together with shapes (395,219) (30,)

Это потому, что X_train теперь является 2735, 30 матрицей, а pca установлена ​​на этой матрице, так чтоожидает матрицу n, 30.

Если вы очистите свои переменные или реорганизуете свой код так, чтобы он не помещался в уже преобразованные данные, проблема может быть решена.

0 голосов
/ 04 февраля 2019

Это не совсем ответ.Но чтобы помочь вам понять сценарий, я выкладываю это!

import numpy as np
from sklearn.decomposition import PCA
X = np.random.randn(2735, 219)
pca = PCA(n_components=30)
pca.fit(X)

test_values = np.random.randn(395 , 219)

pca.transform(test_values)

Вышеуказанные коды работают просто отлично!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...