TypeError: неподдерживаемые типы операндов для *: 'PCA' и 'float'

РЕДАКТИРОВАТЬ:

Вот заголовок csv данных:

    Fresh   Milk    Grocery Frozen  Detergents_Paper    Delicatessen
0   12669   9656    7561    214 2674    1338
1   7057    9810    9568    1762    3293    1776
2   6353    8808    7684    2405    3516    7844
3   13265   1196    4221    6404    507 1788
4   22615   5410    7198    3915    1777    5185

Я вижу ошибку:

TypeError: unsupported operand type(s) for *: 'PCA' and 'float'

Код:

from sklearn.decomposition import PCA

log_data = np.log(data)

# TODO: Apply PCA to the good data with the same number of dimensions as features
pca = PCA(n_components=4)

# TODO: Apply a PCA transformation to the sample log-data
pca_samples = pca.fit(log_data)

# Generate PCA results plot
pca_results = rs.pca_results(good_data, pca)

display(pd.DataFrame(np.round(pca_samples, 4), columns = pca_results.index.values))

Он жалуется на последнюю строчку

данные взяты из CSV, который, как было показано, работает нормально.


person user1072337    schedule 03.10.2016    source источник
comment
добавьте репрезентативную часть CSV-файла вверху вашего скрипта как объект StringIO и загрузите его как часть вашего примера.   -  person Paul H    schedule 03.10.2016
comment
Включите трассировку стека, чтобы мы знали, в чем проблема.   -  person tdelaney    schedule 03.10.2016
comment
Что такое rs? И строка np.log, вызывающая ошибку, не отображается. Есть ли что-то еще в этом сценарии?   -  person tdelaney    schedule 03.10.2016
comment
@PaulH Я добавил это вверху вопроса   -  person user1072337    schedule 03.10.2016
comment
@tdelaney rs относится к: import отображает как rs   -  person user1072337    schedule 03.10.2016
comment
pca_samples - это PCA объект (см. PCA.fit ()), поэтому np.round(pca_samples, 4) не удается. Вероятно, это проблема ... хотя трассировка стека, показывающая сбой в np.round, была бы полезна.   -  person tdelaney    schedule 03.10.2016
comment
Ты прав @tdelaney. Я нашел проблему. Я не запускал преобразование в строке pca_samples. Как раз то, что нужно. Вы можете оставить ответ, и я поставлю вам галочку, если хотите.   -  person user1072337    schedule 03.10.2016


Ответы (3)


PCA.fit() трансформирует модель на месте и возвращает self, чтобы вы могли связать другие операции модели. Так после

pca_samples = pca.fit(log_data)

pca_samples - это еще одна ссылка на pca.

person tdelaney    schedule 03.10.2016

pca.fit(X[, y]) просто поместите модель в X и верните self, то есть сам pca.

С этого момента вы хотите получить преобразованные данные с помощью

pd.DataFrame(np.round(pca_samples, 4), columns = pca_results.index.values))

Итак, вам следует позвонить pca.fit_transform()

fit_transform (X [, y]) Подгоните модель к X и примените уменьшение размерности к X.

См. документацию по pca и fit_transform

person GoingMyWay    schedule 09.11.2016

Чтобы ваш код работал, пожалуйста, посмотрите ниже протестированный код и строку, которую вы должны изменить!

#TODO: Transform log_samples using the PCA fit above

pca_samples = pca.fit_transform(log_samples)

Приведенный выше код работает очень хорошо.

person Carlos Pimentel    schedule 11.10.2018