train_test_split () -Fehler: Eingabevariablen mit inkonsistenter Anzahl von Stichproben gefunden

21

Ziemlich neu in Python, aber ich baue mein erstes RF-Modell basierend auf einigen Klassifizierungsdaten auf. Ich habe alle Bezeichnungen in Int64-numerische Daten konvertiert und als Numpy-Array in X und Y geladen. Beim Versuch, die Modelle zu trainieren, tritt jedoch ein Fehler auf.

So sehen meine Arrays aus:

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

Rückverfolgung (letzter Anruf zuletzt):

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

2039, in train_test_split arrays = indexable (* arrays) Datei "/Library/Python/2.7/site-packages/sklearn/utils/validation.py", Zeile 206, in indexable check_consistent_length (* result) Datei "/ Library / Python / 2.7 / site-packages / sklearn / utils / validation.py ", Zeile 181, in check_consistent_length" Beispiele:% r "% [int (l) für l in Längen])

ValueError: Found input variables with inconsistent numbers of samples: [1, 29]
josh_gray
quelle
Bitte senden Sie in Zukunft Programmierfragen an stackoverflow . In diesem Q & A geht es um Datenwissenschaft, nicht um Programmierung.
Ricardo Cruz

Antworten:

15

Sie stoßen auf diesen Fehler, weil Sie Xund Ynicht die gleiche Länge haben (was train_test_spliterforderlich ist), dh X.shape[0] != Y.shape[0]. Ausgehend von Ihrem aktuellen Code:

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

So beheben Sie diesen Fehler:

  1. Entfernen Sie die zusätzliche Liste von innen np.array()bei der Definition Xoder die zusätzliche Dimension entfernen anschließend mit dem folgenden Befehl ein : X = X.reshape(X.shape[1:]). Nun ist die Form von X(6, 29).
  2. Transponieren , Xindem Sie die X = X.transpose()gleiche Anzahl von Proben zu bekommen in Xund Y. Nun ist die Form des XWillens (29, 6) und die Form des YWillens (29,).
Tuomastik
quelle
1
Erstaunlich, das hat bei mir funktioniert! Vielen Dank, Tuomastik! Ich schätze die Anleitung wirklich :)
Josh_gray
2

Erwartet train_test_split nicht beides Xund Yeine Liste gleicher Länge? Ihr X hat eine Länge von 6 und Y eine Länge von 29. Können Sie versuchen, das in einen Pandas-Datenrahmen (mit der Dimension 29x6) zu konvertieren und es erneut zu versuchen?

In Anbetracht Ihrer Daten haben Sie anscheinend 6 Funktionen. Versuchen Sie Xin diesem Fall, Ihr Format in 29 Zeilen und 6 Spalten umzuwandeln . Übergeben Sie dann diesen Datenrahmen an train_test_split. Sie können Ihre Liste mit in einen Datenrahmen konvertieren pd.DataFrame.from_records.

Sal
quelle
Danke für die Hilfe Sal! Du hast recht, ich musste es nur auf die gleichen Längen umrechnen. Meine X.shape war (1, 6, 29) und Y.shape war (29,). Ich musste sie nur umformen und alles hat gut funktioniert :)
josh_gray