質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.44%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

9723閲覧

scikit-learnにおいて2項目以上の出力値をfitさせる方法

horiegom

総合スコア152

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/09/25 03:03

実現したいこと

scikit-learnの様々なモデルにおいて、

|入力1|入力2|入力3|出力1|出力2|
|:--|:--:|--:|
|0.3|0.5|0.6|1.4|0.2|
|0.7|0.3|0.2|1.2|0.4|
|0.9|0.1|0.1|1.0|0.5|

というデータにおいて、入力値1,2,3を用いて出力値1,2を1つのmodelで予測させたい

###エラーが発生するコード例 : 1モデルで出力1,2をfitさせる
from sklearn import linear_model

input_train = [[0.3, 0.5, 0.6], [0.7, 0.3, 0.2]]
output_train = [[1.4, 0.2], [1.2, 0.4]]
input_test = [[0.9, 0.1, 0.1]]
output_test = [[1.0, 1.5]]

model_ridge = linear_model.Ridge(alpha=1.0)
model_ridge.fit(input_train, output_train)

###発生エラー
model_ridge.fit(input_train, output_train)

中略

File "C:Users***\Anaconda3\envs\py35\lib\site-packages\sklearn\utils\validation.py", line 614, in column_or1d
ValueError: bad input shape (3,2)

###エラーが発生しないコード例 : 2モデルで出力1,2をfitさせる
from sklearn import linear_model

input_train = [[0.3, 0.5, 0.6], [0.7, 0.3, 0.2]]
output1_train = [[1.4], [1.2]]
output2_train = [[0.2], [0.4]]
input_test = [[0.9, 0.1, 0.1]]
output1_test = [[1.0]]
output2_test = [[1.5]]

model1_ridge = linear_model.Ridge(alpha=1.0)
model2_ridge = linear_model.Ridge(alpha=1.0)
model1_ridge.fit(input_train, output1_train)
model2_ridge.fit(input_train, output2_train)

###実現したいこと
エラーが発生する例の様に、1つのモデルを用いて複数の出力値を予測させたい。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

質問に記載されているコードをコピー&ペーストして実行したところ、エラーは再現されませんでした。

エラーメッセージによるとinputの配列が3×2となっています。コードを見る限り2×3のはずなので、当該コードに至るまでに配列の形状を変えてしまったことが疑われます。

投稿2018/09/25 03:37

R.Shigemori

総合スコア3376

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

horiegom

2018/09/25 03:58

失礼しました。実際にエラーが出ていたのはRidgeではなく、SGDとSVR(とxgboostのgbtree)でした。 質問の際に改変しておりました。
R.Shigemori

2018/09/25 04:02

そうみたいです。試しに単体で学習させた場合と係数の比較をしたところ、同値でした。どうやら独立して学習させているようです。
guest

0

ベストアンサー

最初から目的変数複数に対応しているモデルもあります(RandomForestRegressorやMLPRegressorなど)。

3.2.4.3.2. sklearn.ensemble.RandomForestRegressor — scikit-learn 0.19.2 documentation
sklearn.neural_network.MLPRegressor — scikit-learn 0.19.2 documentation

sklearn.multioutputのモデルを使って任意の1出力のモデルを多出力で使うことも可能です(この場合は内部的にはそれぞれを独立に予測しています。独立に予測するコードを書きやすくしただけとも言えます)。

sklearn.multioutput.MultiOutputRegressor — scikit-learn 0.19.2 documentation

投稿2018/09/25 03:15

編集2018/09/25 03:16
hayataka2049

総合スコア30935

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

horiegom

2018/09/25 04:00

失礼しました。実際にエラーが出ていたのはRidgeではなく、SGDとSVR(とxgboostのgbtree)でした。 SGDやSVRで複数目的変数としたい場合はMultioutputRegressorを使ってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.44%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問