ImportError: Brak modułu o nazwie model_selection

89

Próbuję użyć train_test_splitfunkcji i napisać:

from sklearn.model_selection import train_test_split

i to powoduje

ImportError: No module named model_selection

Czemu? A jak pokonać?

Dims
źródło
2
Po prostu dotarło do mnie, że nie zaakceptowałeś żadnej odpowiedzi w co najmniej dziesięciu ostatnich pytaniach. Pamiętaj, że zaakceptowanie najbardziej pomocnej odpowiedzi pomoże w przyszłości osobie odpowiadającej i osobom, które przyjrzą się Twojemu pytaniu.
linusg

Odpowiedzi:

181

Chyba masz złą wersję scikit-learn, podobna sytuacja została opisana tutaj na GitHubie . Wcześniej (wcześniej v0.18) train_test_splitznajdowało się w cross_validationmodule:

from sklearn.cross_validation import train_test_split

Jednak teraz jest w model_selectionmodule:

from sklearn.model_selection import train_test_split

więc będziesz potrzebować najnowszej wersji.

Aby zaktualizować do przynajmniej wersji 0.18, wykonaj:

pip install -U scikit-learn

(Lub pip3, w zależności od twojej wersji Pythona). Jeśli zainstalowałeś go w inny sposób, upewnij się, że używasz innej metody aktualizacji, na przykład podczas korzystania z Anacondy.

linusg
źródło
7
Dla mnie to nie zadziałało, ale rozwiązanie Farharda Malekiego „conda update scikit-learn” zadziałało.
Alex Kinman
Uruchomiłem polecenie pip, które podałeś, i spowodowałoby to błąd z prośbą o aktualizację pip. Potem zaktualizowałem pip i przeredagowałem, i to powiedziałoby, że nie ma potrzeby aktualizacji sklearn, mam już najnowszą wersję (0.17), nawet myślałem, że hat nie jest. Nie próbuję się targować, po prostu próbuję udostępniać informacje.
Alex Kinman,
@AlexKinman Jeśli masz zainstalowane Python 2 i 3, upewnij się, że używasz polecenia „right pip”. Czy na pewno nie masz wenvów lub jesteś w tym właściwym? Brzmi to dziwnie, można otworzyć powłoki Pythona i umieścić w import sklearn, sklearn(tak, właśnie to słowo) i sklearn.__version__? Nawet jeśli problem został rozwiązany, warto wiedzieć, skąd się wziął.
linusg
sklearn Out [2]: <moduł 'sklearn' z 'C: \ Users \ XYZ \ AppData \ Local \ Continuum \ Anaconda2 \ lib \ site-packages \ sklearn_ init_ .pyc'> sklearn .__ version__ Out [3]: '0.18 .2 „ Ale to jest po tym, jak uruchomiłem aktualizację sklearn Conda
Alex Kinman.
W każdym razie dobrze, że teraz działa. Nie używałem tak często Anacondy, ale myślę, że nie integruje się z pip. Odpowiedź zredagowana, wszyscy użytkownicy
Anacondy
26

Zaktualizuj sklearn

aktualizacja conda scikit-learn

Farhad Maleki
źródło
4
To zadziałało, podejście zaakceptowanej odpowiedzi nie. Dzięki
Alex Kinman
9

Napotkałem ten problem podczas importu GridSearchCV.

Właśnie zmieniono sklearn.model_selectionna sklearn.grid_search.

curry_xyd
źródło
6

Miałem ten sam problem podczas korzystania z Jupyter Notebook, bez względu na to, co zaktualizowałem w Pythonie 3, conda, nie mogłem uzyskać w Jupyter:

import sklearn
print (sklearn.__version__)
0.17.1

POKAŻ scikit-learn-0.18.1

Wreszcie usunąłem Anaconda3 i Jupyter Notebook i ponownie zainstalowałem nowy. Mam to do pracy.

http://ukitech.blogspot.com/2017/02/sklearnmodelselection.html

Uki D. Lucas
źródło
5

czy masz sklearn? jeśli nie, wykonaj następujące czynności:

sudo pip install sklearn

Po zainstalowaniu sklearn

from sklearn.model_selection import train_test_split

działa w porządku

Alex L.
źródło
3

Aby zainstalować scikit-learn w wersji 18.0, użyłem obu poleceń:

aktualizacja conda scikit-learn

pip install -U scikit-learn

Ale to nie działa. Wystąpił problem „Nie można zainstalować 'scikit-learn'. Jest to projekt zainstalowany w dystrybucji distutils i dlatego nie możemy dokładnie określić, które pliki do niego należą, co doprowadziłoby tylko do częściowego odinstalowania”.

Wreszcie mogę go zainstalować za pomocą następującego polecenia:

pip install --user --upgrade scikit-learn == 0.18.0

Minh Vo
źródło
3

Pod koniec września 2016, SciKit Learn 0.18 został wydany i nastąpiła niewielka zmiana w kodzie. W SciKit Learn 0.18 funkcja train_test_split jest teraz importowana z modelu_selection zamiast cross_validation.

from sklearn.cross_validation import train_test_split

został zmieniony na:

from sklearn.model_selection import train_test_split

To samo stało się z GridSearchCV.

Paras Patidar
źródło
2

Jak powiedział @linusg, jedną z opcji jest po prostu import krzyżowej walidacji w następujący sposób:

from sklearn import cross_validation
X_train,X_test,y_train,y_test = cross_validation.train_test_split(X,y,test_size=0.3)
MCardus
źródło
2

Najnowsza stabilna wersja sklearn 0.20.0 ma train_test_split jest objęty modelem_selection, a nie cross_validation

Aby sprawdzić swoją wersję sklearn:

import sklearn print ( wersja sklearn) 0.20.2

Sameer Kumar Choudhary
źródło
1

Dodanie informacji do poprzedniej odpowiedzi od @linusg:

sklearnprzechowuje historię wszystkich zmian. Pomyśl o sprawdzeniu tego od czasu do czasu. Oto link do dokumentacji.

Jak widać w dokumentacji do wersji 0.18 , utworzono nowy moduł o nazwie model_selection. Dlatego nie istniał w poprzednich wersjach.

Zaktualizuj sklearni zadziała!

MMF
źródło
0

Twoja wersja sklearn jest za niska, model_selectionzostała zaimportowana do 0.18.1, więc zaktualizuj wersję sklearn.

Changyuan Chen
źródło