train_test_split()エラー:サンプル数が一致しない入力変数が見つかりました


21

Pythonはかなり新しいですが、いくつかの分類データに基づいて最初のRFモデルを構築します。すべてのラベルをint64数値データに変換し、numpy配列としてXおよびYにロードしましたが、モデルをトレーニングしようとするとエラーが発生します。

配列は次のようになります。

>>> X = np.array([[df.tran_cityname, df.tran_signupos, df.tran_signupchannel, df.tran_vmake, df.tran_vmodel, df.tran_vyear]])

>>> Y = np.array(df['completed_trip_status'].values.tolist())

>>> X
array([[[   1,    1,    2,    3,    1,    1,    1,    1,    1,    3,    1,
            3,    1,    1,    1,    1,    2,    1,    3,    1,    3,    3,
            2,    3,    3,    1,    1,    1,    1],
        [   0,    5,    5,    1,    1,    1,    2,    2,    0,    2,    2,
            3,    1,    2,    5,    5,    2,    1,    2,    2,    2,    2,
            2,    4,    3,    5,    1,    0,    1],
        [   2,    2,    1,    3,    3,    3,    2,    3,    3,    2,    3,
            2,    3,    2,    2,    3,    2,    2,    1,    1,    2,    1,
            2,    2,    1,    2,    3,    1,    1],
        [   0,    0,    0,   42,   17,    8,   42,    0,    0,    0,   22,
            0,   22,    0,    0,   42,    0,    0,    0,    0,   11,    0,
            0,    0,    0,    0,   28,   17,   18],
        [   0,    0,    0,   70,  291,   88,  234,    0,    0,    0,  222,
            0,  222,    0,    0,  234,    0,    0,    0,    0,   89,    0,
            0,    0,    0,    0,   40,  291,  131],
        [   0,    0,    0, 2016, 2016, 2006, 2014,    0,    0,    0, 2015,
            0, 2015,    0,    0, 2015,    0,    0,    0,    0, 2015,    0,
            0,    0,    0,    0, 2016, 2016, 2010]]])

>>> Y
array(['NO', 'NO', 'NO', 'YES', 'NO', 'NO', 'YES', 'NO', 'NO', 'NO', 'NO',
       'NO', 'YES', 'NO', 'NO', 'YES', 'NO', 'NO', 'NO', 'NO', 'NO', 'NO',
       'NO', 'NO', 'NO', 'NO', 'NO', 'NO', 'NO'], 
      dtype='|S3')

>>> X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.3)

トレースバック(最後の最後の呼び出し):

  File "<stdin>", line 1, in <module>
  File "/Library/Python/2.7/site-packages/sklearn/cross_validation.py", line

2039、train_test_split配列= indexable(* arrays)File "/Library/Python/2.7/site-packages/sklearn/utils/validation.py"、206行目、indexable check_consistent_length(* result)File" / Library / Python / 2.7 / site-packages / sklearn / utils / validation.py "、行181、check_consistent_length" samples:%r "%[長さlの場合はint(l)])

ValueError: Found input variables with inconsistent numbers of samples: [1, 29]

今後、プログラミングの質問stackoverflowに投稿してください。このQ&Aは、プログラミングではなくデータサイエンスに関するものです。
リカルドクルス

回答:


15

XYは同じ長さ(train_test_split必要な長さ)を持っていないため、このエラーが発生していますX.shape[0] != Y.shape[0]。現在のコードを考えます:

>>> X.shape
(1, 6, 29)
>>> Y.shape
(29,)

このエラーを修正するには:

  1. 次のコマンドを使用して、np.array()定義時に内部の余分なリストを削除するXか、後で余分なディメンションを削除しますX = X.reshape(X.shape[1:])。これで、の形状はX(6、29)になります。
  2. Xを実行X = X.transpose()して転置し、Xとで同じ数のサンプルを取得しYます。これで、の形状はX(29、6)になり、の形状はY(29、)になります。

1
これは私にとっては素晴らしいことでした!ありがとうTuomastik!私は本当にガイダンスに感謝します:)
josh_gray

2

train_test_splitは両方Xを期待しY、同じ長さのリストではないのですか?Xの長さは6で、Yの長さは29です。それをパンダデータフレーム(29x6次元)に変換して、もう一度試してください。

データを考えると、6つの機能があるように見えます。その場合、X29行6列になるように変換してみてください。次に、そのデータフレームをに渡しtrain_test_splitます。を使用してリストをデータフレームに変換できますpd.DataFrame.from_records


助けてくれてありがとうSal!あなたは正しいです、私はそれを同じ長さに変換する必要がありました。私のX.shapeは(1、6、29)で、Y.shapeは(29、)でした。私はちょうどそれらを
作り直さ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.