Подтвердить что ты не робот

Вектор-столбец y передавался при ожидании 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().

model = forest.fit(train_fold, train_y)

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

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

4b9b3361

Ответ 1

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

model = forest.fit(train_fold, train_y)

в

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

Ответ 2

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

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

Ответ 3

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

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)

Ответ 4

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

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

Ответ 5

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

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

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