error train_test_split (): Ditemukan variabel input dengan jumlah sampel yang tidak konsisten

21

Cukup baru untuk Python tetapi membangun model RF pertama saya berdasarkan pada beberapa data klasifikasi. Saya telah mengkonversi semua label menjadi data numerik int64 dan dimuat ke X dan Y sebagai array numpy, tapi saya memukul kesalahan ketika saya mencoba untuk melatih model.

Berikut ini tampilan array saya:

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

Traceback (panggilan terakhir terakhir):

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

2039, di train_test_split array = indexable (* arrays) File "/Library/Python/2.7/site-packages/sklearn/utils/validation.py", baris 206, di indexable check_consistent_length (* hasil) File "/ Library / Python / 2.7 / paket-situs / sklearn / utils / validation.py ", baris 181, dalam check_consistent_length" sampel:% r "% [int (l) untuk l panjangnya]]

ValueError: Found input variables with inconsistent numbers of samples: [1, 29]
josh_gray
sumber
Di masa depan, silakan posting pertanyaan pemrograman ke stackoverflow . T&J ini tentang ilmu data, bukan pemrograman.
Ricardo Cruz

Jawaban:

15

Anda mengalami kesalahan itu karena Anda Xdan Ytidak memiliki panjang yang sama (yang train_test_splitdiperlukan), yaitu X.shape[0] != Y.shape[0],. Diberikan kode Anda saat ini:

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

Untuk memperbaiki kesalahan ini:

  1. Menghapus daftar ekstra dari dalam np.array()ketika mendefinisikan Xatau menghapus dimensi ekstra setelah itu dengan perintah berikut: X = X.reshape(X.shape[1:]). Sekarang, bentuk Xakan menjadi (6, 29).
  2. Transpos Xdengan menjalankan X = X.transpose()untuk mendapatkan jumlah sampel yang sama di Xdan Y. Sekarang, bentuk Xakan (29, 6) dan bentuk Yakan (29,).
tuomastik
sumber
1
Luar biasa ini bekerja untuk saya! Terima kasih Tuomastik! Saya sangat menghargai panduannya :)
josh_gray
2

Bukankah train_test_split mengharapkan keduanya Xdan Ymenjadi daftar dengan panjang yang sama? X Anda memiliki panjang 6 dan Y memiliki panjang 29. Mungkin coba mengonversinya menjadi bingkai data panda (dengan dimensi 29x6) dan coba lagi?

Mengingat data Anda, sepertinya Anda memiliki 6 fitur. Dalam hal ini, cobalah untuk mengonversi Anda Xmenjadi 29 baris dan 6 kolom. Lalu, sampaikan dataframe itu ke train_test_split. Anda dapat mengonversi daftar Anda menjadi bingkai data menggunakan pd.DataFrame.from_records.

Sal
sumber
Terima kasih atas bantuannya Sal! Anda benar, saya hanya harus mengubahnya dengan panjang yang sama. X.shape saya adalah (1, 6, 29) dan Y.shape adalah (29,). Saya hanya harus membentuk kembali mereka dan semuanya bekerja dengan baik untuk saya :)
josh_gray