1次元配列が期待されるときに列ベクトルyが渡されました


117

私はフィットする必要がありますRandomForestRegressorからsklearn.ensemble

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

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

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

モデル= 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]か?


何ですtrain_fold.shapetrain_y.shape
Alexander

@Alexander:train_fold:tuple(749904,24)... train:y.ravel():tuple(749904、)
Klausos Klausos

元気そう。100行のデータをトレーニングして、正しく機能することを確認しましたか(終了していないと言ったため)?また、train_yデータの内容を調べて、前処理によってデータが破損していないことを確認しましたか?
Alexander

印刷RF_tuned_parametersしてください。
イマノールLuengo

@imaluengo:{'n_estimators':40、 'max_features':0.8、 'n_jobs':2、 'verbose':True、 'min_samples_split':6、 'random_state':123}
Klausos Klausos

回答:


188

この行を変更します。

model = forest.fit(train_fold, train_y)

に:

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

編集:

.values配列の値を提供します。(形状:(n、1)

.ravel その配列形状を(n、)に変換します


33
実際に何が変わるのか、誰かが説明するかもしれません。
Rahul Bali

2
AttributeError: 'numpy.ndarray' object has no attribute 'values'
john ktejik

12
numpy.ndarrayがある場合は、代わりにtrain_y.ravel()を使用してください。
チャリティーレシンスキー2017

13
@RahulParashar何ravel()が行われるか:持っているy.shape == (10, 1)場合、を使用しy.ravel().shape == (10, )ます。つまり、配列をフラット化します。
PascalVKooten 2018

これは有用な警告ですか?
アレックス

18

KNN分類器をトレーニングしようとしたときにも、この状況に遭遇しました。しかし、私が変更した後、警告が消えたようです:
knn.fit(X_train,y_train)

knn.fit(X_train, np.ravel(y_train,order='C'))

この行の前に、私は使用しましたimport numpy as np


この.ravel()アプローチを使用した場合、私の列ベクトルは配列ではなく行ベクトルへのコンバーターでしたが、この修正でうまくいきました。
kabdulla 2018年

12

私も同じ問題を抱えていました。問題は、ラベルが列形式であるのに列形式であるということでした。使用するnp.ravel()

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

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


1
つまりnp.ravel()
Pramesh Bajracharya

10

以下のコードを使用してください:

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)

3

これを行う別の方法は、 ravel

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

これは、Pandasシリーズでは機能しますが、Pandas DataFramesでは機能しないことを付け加えておきます。
Sal Alturaigi、

2

ではneuraxle、あなたは簡単にこの問題を解決することができます:

p = Pipeline([
   # expected outputs shape: (n, 1)
   OutputTransformerWrapper(NumpyRavel()), 
   # expected outputs shape: (n, )
   RandomForestRegressor(**RF_tuned_parameters)
])

p, outputs = p.fit_transform(data_inputs, expected_outputs)

Neuraxleは、ディープラーニングプロジェクトでのハイパーパラメータ調整とAutoMLのためのsklearnのようなフレームワークです。


1
format_train_y=[]
for n in train_y:
    format_train_y.append(n[0])

2
このコードは問題を解決する可能性がありますが、これが問題を解決する方法と理由の説明含めると、投稿の品質が向上し、おそらくより多くの投票が得られます。あなたが今尋ねている人だけでなく、あなたが将来の読者のための質問に答えていることを忘れないでください。回答を編集して説明を追加し、適用される制限と前提を示してください。
ダーマン

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.