it-roy-ru.com

Столбец-вектор у был пропущен, когда ожидался массив 1d

Мне нужно соответствовать RandomForestRegressor из sklearn.ensemble.

forest = ensemble.RandomForestRegressor(**RF_tuned_parameters)
model = forest.fit(train_fold, train_y)
yhat = model.predict(test_fold)

Этот код всегда работал, пока я не произвел некоторую предварительную обработку данных (train_y) . Сообщение об ошибке говорит:

DataConversionWarning: вектор-столбец y был передан, когда ожидался массив 1d. Пожалуйста, измените форму y на (n_samples,), например, используя ravel ().

модель = forest.fit (train_fold, train_y)

Ранее train_y был Series, теперь это массив numpy (это вектор-столбец). Если я применяю функцию train_y.ravel(), то она становится вектором строки, и сообщение об ошибке не появляется, поскольку этап прогнозирования занимает очень много времени (на самом деле он никогда не заканчивается ...).

В документах RandomForestRegressor я обнаружил, что train_y должен быть определен как y : array-like, shape = [n_samples] or [n_samples, n_outputs] Есть идеи, как решить эту проблему?

48
Klausos Klausos

Измените эту строку: 

model = forest.fit(train_fold, train_y)

чтобы:

model = forest.fit(train_fold, train_y.values.ravel())
90
Linda MacPhee-Cobb

Я также столкнулся с такой ситуацией, когда пытался обучитьKNNклассификатор. но похоже, что предупреждение исчезло после того, как я изменился:
knn.fit(X_train,y_train)
В
knn.fit(X_train, np.ravel(y_train,order='C'))

Перед этим я использовал import numpy as np.

12
Simon Leung

используйте код ниже:

model = forest.fit(train_fold, train_y.ravel())

если вы по-прежнему получаете пощечину по ошибке, как показано ниже?

Unknown label type: %r" % y

используйте этот код:

y = train_y.ravel()
train_y = np.array(y).astype(int)
model = forest.fit(train_fold, train_y)
8
Coral

У меня такая же проблема. Проблема заключалась в том, что метки были в формате столбца, в то время как он ожидал этого в строке . Использование np.ravel()

knn.score(training_set, np.ravel(training_labels))

Надеюсь, это решит это.

1

Еще один способ сделать это - использовать ravel

model = forest.fit(train_fold, train_y.values.reshape(-1,))
0
sushmit