train_test_split () errore: trovate variabili di input con numeri incoerenti di campioni


21

Abbastanza nuovo su Python ma costruendo il mio primo modello RF basato su alcuni dati di classificazione. Ho convertito tutte le etichette in dati numerici int64 e caricato in X e Y come una matrice numpy, ma sto provando un errore quando provo ad addestrare i modelli.

Ecco come appaiono i miei array:

>>> 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 (ultima chiamata più recente):

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

2039, in array train_test_split = indicizzabili (* array) File "/Library/Python/2.7/site-packages/sklearn/utils/validation.py", riga 206, in check_consistent_length indicizzabile (* risultato) File "/ Library / Python / 2.7 / site-pacchetti / sklearn / utils / validation.py ", riga 181, in check_consistent_length" campioni:% r "% [int (l) per l in lunghezze])

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

In futuro, si prega di inviare domande di programmazione a StackOverflow . Queste domande e risposte riguardano la scienza dei dati, non la programmazione.
Ricardo Cruz,

Risposte:


15

Stai riscontrando questo errore perché il tuo Xe Ynon ha la stessa lunghezza (che è ciò che train_test_splitrichiede), cioè X.shape[0] != Y.shape[0]. Dato il tuo codice attuale:

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

Per correggere questo errore:

  1. Cancella la lista più dall'interno di np.array()quando si definisce Xo rimuovere la dimensione supplementare in seguito con il seguente comando: X = X.reshape(X.shape[1:]). Ora, la forma di Xsarà (6, 29).
  2. Trasporre Xeseguendo X = X.transpose()per ottenere lo stesso numero di campioni in Xe Y. Ora, la forma di Xsarà (29, 6) e la forma di Ysarà (29,).

1
Incredibile questo ha funzionato per me! Grazie Tuomastik! Apprezzo molto la guida :)
josh_gray,

2

Train_test_split non prevede entrambi Xe Yun elenco della stessa lunghezza? La tua X ha una lunghezza di 6 e Y ha una lunghezza di 29. Puoi provare a convertirla in un frame di dati Panda (con dimensione 29x6) e riprovare?

Dati i tuoi dati, sembra che tu abbia 6 funzionalità. In tal caso, prova a convertire il tuo Xper avere 29 righe e 6 colonne. Quindi passare quel frame di dati a train_test_split. Puoi convertire la tua lista in dataframe usando pd.DataFrame.from_records.


Grazie per l'aiuto Sal! Hai ragione, dovevo solo convertirlo nelle stesse lunghezze. La mia X.shape era (1, 6, 29) e Y.shape era (29,). Ho appena dovuto rimodellarli e tutto ha funzionato bene per me :)
josh_gray
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.