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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Q&A

解決済

1回答

8012閲覧

ValueError: Found input variables with inconsistent numbers of samplesの解決方法

kouji_39

総合スコア164

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

0グッド

0クリップ

投稿2020/05/12 22:32

データを層samplingを使って、train、val、testで3分割するコード
を作っています。
train_test_splitのところで、ValueError: Found input variables with inconsistent numbers of samplesのエラーがでます。解決方法が知りたいです。

#Numpyの配列に変換 y = np.array(dataset[target_col])#ターゲット変数 X = np.array(dataset[feature_cols])#説明変数 #目的変数の可視化 pd.Series(y).hist(bins=25) #目的変数の離散化、可視化 bins=[0, 10, 20, 30] print(bins) binned_y=np.digitize(y,bins) pd.Series(binned_y).hist(bins=25) # 特徴量と正解を訓練データとテストデータと検証データに分割 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, stratify=binned_y, random_state=0) X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.5, stratify=binned_y, random_state=0) # 0.67 x 0.5 = 0.335 print('X_trainの形状:',X_train.shape,' y_trainの形状:',y_train.shape,' X_valの形状:',X_val.shape,' y_valの形状:',y_val.shape,' X_testの形状:',X_test.shape,' y_testの形状:',y_test.shape)

errorメッセージは以下===============================================
ValueError Traceback (most recent call last)
<ipython-input-18-d9ef67107817> in <module>()
1 # 特徴量と正解を訓練データとテストデータと検証データに分割
2 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, stratify=binned_y, random_state=0)
----> 3 X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.5, stratify=binned_y, random_state=0) # 0.67 x 0.5 = 0.335
4
5 print('X_trainの形状:',X_train.shape,' y_trainの形状:',y_train.shape,' X_valの形状:',X_val.shape,' y_valの形状:',y_val.shape,' X_testの形状:',X_test.shape,' y_testの形状:',y_test.shape)

3 frames
/usr/local/lib/python3.6/dist-packages/sklearn/utils/validation.py in check_consistent_length(*arrays)
210 if len(uniques) > 1:
211 raise ValueError("Found input variables with inconsistent numbers of"
--> 212 " samples: %r" % [int(l) for l in lengths])
213
214

ValueError: Found input variables with inconsistent numbers of samples: [77, 116]

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

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

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

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

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

meg_

2020/05/13 00:32

「train_test_split」は「sklearn.model_selection.train_test_split」のことですか?
kouji_39

2020/05/13 01:34

from sklearn.model_selection import train_test_split で呼び出したものです。
meg_

2020/05/13 01:50

y、X、X_train、y_trainのshapeは各処理後でどうなっていますか?
kouji_39

2020/05/13 01:58 編集

train_test_splitでエラーになり、shapeは確認できてません。 層化サンプリングで3等分したいので、試しに、思い付きで以下を実施しました。 X_train, X_val, X_test, y_train, y_val,y_test = train_test_split(X, y, train_size=39,test_size=38, stratify=binned_y, random_state=0) そしたら、ValueError: not enough values to unpack (expected 6, got 4) train,val,testが一回で3等分(39,39,38で全部で116)できる方法はないのでしょうか?
meg_

2020/05/13 01:58

1回目のtrain_test_split()は実行できているように見えますが? y、Xのshapeはどうなっていますか?
kouji_39

2020/05/13 02:02

X_trainの形状: (77, 10) y_trainの形状: (77,) X_testの形状: (39, 10) y_testの形状: (39,)
meg_

2020/05/13 03:04

magichanさんの回答にあるように、binned_yを再作成(binned_y=np.digitize(y_train,bins))してtrain_test_split()の引数に設定してはどうでしょうか?
kouji_39

2020/05/13 03:13

X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.5, stratify=binned_y, random_state=0)の行の前に、binned_y=np.digitize(y_train,bins)を入れることで、分割できました。 ありがとうございます。
kouji_39

2020/05/13 03:16 編集

今後ともよろしくお願いいたします。
guest

回答1

0

ベストアンサー

エラーの原因は

Python

1X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.5, stratify=binned_y, random_state=0) # 0.67 x 0.5 = 0.335

の行で、入力値のX_trainおよびy_train のデータサイズは(最初のtrain_test_plit()で分割されて)77になってますが、binned_y は分割されていないためデータサイズが元の 116 のままであるため、不整合が起きている事が原因かと思います。

y_train と整合がとれているBinningデータをstratifyパラメータに渡すように修正するとエラーは解決すると思います。

投稿2020/05/13 01:06

編集2020/05/13 01:10
magichan

総合スコア15898

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

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

kouji_39

2020/05/13 03:55

X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.5, stratify=binned_y, random_state=0)の行の前に、binned_y=np.digitize(y_train,bins)を入れることで、分割できました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問