train_test_split () hatası: Tutarsız sayıda örnek içeren girdi değişkenleri bulundu


21

Python için oldukça yeni ama bazı sınıflandırma verilerine dayanarak ilk RF modelimi oluşturuyorum. Tüm etiketleri int64 sayısal verilere dönüştürdüm ve numpy dizi olarak X ve Y'ye yükledim, ancak modelleri eğitmeye çalıştığımda bir hataya çarpıyorum.

Dizilerim şöyle görünüyor:

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

Geri izleme (en son yapılan son arama):

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

2039, train_test_split dizilerinde = dizinlenebilir (* diziler) Dosya "/Library/Python/2.7/site-packages/sklearn/utils/validation.py", satır 206, dizinlenebilir check_consistent_length (* sonuç) Dosya "/ Kütüphane / Python / 2.7 / site-paketleri / sklearn / utils / validation.py ", satır 181, check_consistent_length" örneklerinde:% r "% [uzunluklar için l için int (l]])

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

Gelecekte, lütfen programlama sorularını stackoverflow'a gönderin . Bu soru-cevap, programlama değil veri bilimi ile ilgilidir.
Ricardo Cruz

Yanıtlar:


15

Bu hatayla karşılaşıyorsunuz çünkü sizin Xve Yaynı uzunlukta (gerekli olan şey train_test_split), yani X.shape[0] != Y.shape[0]. Mevcut kodunuz verildiğinde:

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

Bu hatayı düzeltmek için:

  1. İçinden ekstra listesini çıkartın np.array()tanımlarken Xveya aşağıdaki komutla sonradan ekstra bir boyut kaldırın: X = X.reshape(X.shape[1:]). Şimdi şekli X(6, 29) olacak.
  2. Devrik Xçalıştırarak X = X.transpose()içinde örneklerin eşit sayıda olsun Xve Y. Şimdi, şekli X(29, 6) ve şekli Y(29,) olacaktır.

1
İnanılmaz bu benim için çalıştı! Teşekkürler Tuomastik! Rehberlik için gerçekten minnettarım :)
josh_gray

2

Train_test_split her ikisini de bekliyor Xve Yaynı uzunlukta bir liste mi beklemiyor ? X'inizin uzunluğu 6 ve Y'nin uzunluğu 29'dur. Bunu panda veri çerçevesine (29x6 boyutlu) dönüştürmeyi deneyebilir ve tekrar deneyebilir misiniz?

Verileriniz göz önüne alındığında, 6 özelliğiniz var gibi görünüyor. Bu durumda, X29 satır ve 6 sütuna dönüştürmeyi deneyin . Ardından bu veri çerçevesini 'e iletin train_test_split. Listenizi veri çerçevesine dönüştürebilirsiniz pd.DataFrame.from_records.


Yardımın için teşekkürler Sal! Haklısın, sadece aynı uzunluklara dönüştürmek zorunda kaldım. X şeklim (1, 6, 29) ve Y. şeklim (29,) idi. Sadece onları yeniden şekillendirmek zorunda kaldım ve hepsi benim için iyi çalıştı :)
josh_gray
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.