web-dev-qa-db-ja.com

1d配列が予期されたときに列ベクトルyが渡されました

sklearn.ensembleからRandomForestRegressorに合わせる必要があります。

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

このコードは、データの前処理(train_y)を行うまで常に機能していました。エラーメッセージは言う:

DataConversionWarning:1d配列が予想されるときに列ベクトルyが渡されました。たとえば、ravel()を使用して、yの形状を(n_samples、)に変更してください。

モデル= forest.fit(train_fold、train_y)

以前はtrain_yはシリーズでしたが、現在はnumpy配列です(列ベクトルです)。 train_y.ravel()を適用すると、行ベクトルになり、エラーメッセージは表示されません。予測ステップでは非常に長い時間がかかります(実際には終了しません...)。

RandomForestRegressorのドキュメントで、train_yy : array-like, shape = [n_samples] or [n_samples, n_outputs]として定義する必要があることがわかりました。この問題を解決する方法はありますか?

63
Klausos Klausos

この行を変更します。

model = forest.fit(train_fold, train_y)

に:

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

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))

これで解決することを願っています。

これを行う別の方法は、ravelを使用することです

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