Próbuję użyć train_test_split
z pakietu scikit Learn, ale mam problem z parametrem stratify
. Poniżej znajduje się kod:
from sklearn import cross_validation, datasets
X = iris.data[:,:2]
y = iris.target
cross_validation.train_test_split(X,y,stratify=y)
Jednak pojawia się następujący problem:
raise TypeError("Invalid parameters passed: %s" % str(options))
TypeError: Invalid parameters passed: {'stratify': array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])}
Czy ktoś ma pomysł, co się dzieje? Poniżej znajduje się dokumentacja funkcji.
[…]
stratyfikacja : podobna do tablicy lub Brak (domyślnie Brak)
Jeśli nie ma wartości Brak, dane są dzielone w sposób warstwowy, używając tego jako tablicy etykiet.
Nowość w wersji 0.17: podział na warstwy
[…]
split
scikit-learn
training-data
test-data
Daneel Olivaw
źródło
źródło
Odpowiedzi:
Scikit-Learn po prostu mówi ci, że nie rozpoznaje argumentu „stratyfikacja”, a nie, że używasz go nieprawidłowo. Dzieje się tak, ponieważ parametr został dodany w wersji 0.17, jak wskazano w cytowanej dokumentacji.
Musisz więc tylko zaktualizować Scikit-Learn.
źródło
scikit-learn 0.21.2 py37h2a6a0b8_0 conda-forge
Ten
stratify
parametr powoduje podział tak, aby proporcja wartości w wytworzonej próbie była taka sama, jak proporcja wartości przekazanych do parametrustratify
.Na przykład, jeśli zmienna
y
jest binarną zmienną kategorialną z wartościami0
i1
zawiera 25% zer i 75% jedynek,stratify=y
upewni się, że losowy podział ma 25%0
i 75% wartości1
.źródło
stratify
. Następnie, po drugie, aby skorygować nierównowagę, ostatecznie musisz przeprowadzić oversampling lub undersampling na zbiorze uczącym. Wiele klasyfikatorów Sklearn ma parametr zwany wagą klasy, który można ustawić na zrównoważony. Na koniec możesz również wybrać bardziej odpowiednią metrykę niż dokładność dla niezrównoważonego zbioru danych. Spróbuj, F1 lub obszar pod ROC.Dla mojej przyszłej osoby, która przychodzi tutaj przez Google:
train_test_split
jest teraz wmodel_selection
, stąd:jest sposobem na użycie go. Ustawienie
random_state
jest pożądane ze względu na powtarzalność.źródło
W tym kontekście stratyfikacja oznacza, że metoda train_test_split zwraca podzbiory treningowe i testowe, które mają takie same proporcje etykiet klas, jak zbiór danych wejściowych.
źródło
Spróbuj uruchomić ten kod, to „po prostu działa”:
źródło
sklearn
wersją '0.17', dystrybucją Anaconda dla Pythona 3,5. Mogę tylko zasugerować sprawdzenie jeszcze raz, jeśli poprawnie wprowadzisz kod i zaktualizujesz oprogramowanie.sklearn
...