Dość nowy w Pythonie, ale budowanie mojego pierwszego modelu RF na podstawie niektórych danych klasyfikacyjnych. Przekształciłem wszystkie etykiety w dane liczbowe int64 i załadowałem do X i Y jako tablicę numpy, ale próbuję wyszkolić modele, popełniam błąd.
Oto jak wyglądają moje tablice:
>>> 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 (ostatnie połączenie ostatnio):
File "<stdin>", line 1, in <module> File "/Library/Python/2.7/site-packages/sklearn/cross_validation.py", line
2039, w tablicach train_test_split = indeksowalny (* tablice) Plik "/Biblioteka/Python/2.7/site-packages/sklearn/utils/validation.py", wiersz 206, w indeksowalnym pliku check_consistent_length (* wynik) / Biblioteka / Python / 2.7 / site-packages / sklearn / utils / validation.py ", wiersz 181, w check_consistent_length" samples:% r "% [int (l) dla l o długości])
ValueError: Found input variables with inconsistent numbers of samples: [1, 29]
python
scikit-learn
sampling
josh_gray
źródło
źródło
Odpowiedzi:
Używasz do tego błędu, ponieważ Twój
X
iY
nie mają taką samą długość (czegotrain_test_split
wymaga), tjX.shape[0] != Y.shape[0]
. Biorąc pod uwagę twój obecny kod:Aby naprawić ten błąd:
np.array()
przy definiowaniuX
lub usunąć dodatkowy wymiar potem za pomocą następującego polecenia:X = X.reshape(X.shape[1:])
. Teraz będzie to kształtX
(6, 29).X
, uruchamiając,X = X.transpose()
aby uzyskać taką samą liczbę próbek wX
iY
. Teraz kształtX
będzie (29, 6), a kształtY
będzie (29,).źródło
Nie train_test_split spodziewa zarówno
X
iY
być listę samej długości? Twój X ma długość 6, a Y ma długość 29. Czy możesz spróbować przekonwertować go na ramkę danych pandy (o wymiarze 29 x 6) i spróbować ponownie?Biorąc pod uwagę twoje dane, wygląda na to, że masz 6 funkcji. W takim przypadku spróbuj przekonwertować plik
X
na 29 wierszy i 6 kolumn. Następnie przekaż tę ramkę danych dotrain_test_split
. Możesz przekonwertować listę na ramkę danych za pomocąpd.DataFrame.from_records
.źródło