ImportError: Brak modułu o nazwie sklearn.cross_validation


174

Używam Pythona 2.7 w Ubuntu 14.04. Zainstalowałem scikit-learn, numpy i matplotlib za pomocą tych poleceń:

sudo apt-get install build-essential python-dev python-numpy \
python-numpy-dev python-scipy libatlas-dev g++ python-matplotlib \
ipython

Ale kiedy importuję te pakiety:

from sklearn.cross_validation import train_test_split

Zwraca mi ten błąd:

ImportError: No module named sklearn.cross_validation

Co muszę zrobić?


być może nazwa twojego modułu jest nieprawidłowa, jeśli poprawnie zainstalowałeś sklearn i anaconda.
CKM

11
Naprawdę tylko to powtarzam, ale od teraz musisz używać sklearn.model_selection. cross_validation nie działa od sklearn 20+
Michal Mikuláši

Odpowiedzi:


582

Musi odnosić się do zmiany nazwy i wycofania cross_validationpodmodułu na model_selection. Spróbuj podstawić cross_validationdomodel_selection


8
To zdecydowanie powinna być wybrana odpowiedź
rhys_jsk

To powinna być akceptowana odpowiedź. Nie tylko to działa, ale głosy są ponad 200 do 4 w momencie mojego wpisu.
Jerry Destremps

Dlaczego programiści sklearn nie umieścili aliasu w celu zapewnienia kompatybilności wstecznej? Dokument dla tej starszej wersji powinien również wskazywać ten refaktor: scikit-learn.org/0.16/modules/generated/… .
flow2k

działało jak urok
omah94

139

train_test_split jest teraz w modelu_selection. Wystarczy wpisać:

from sklearn.model_selection import train_test_split

powinno działać


43

Myślę, że selekcja krzyżowa nie jest już aktywna. Zamiast tego powinniśmy użyć wyboru modelu. Możesz to napisać do uruchomienia,from sklearn.model_selection import train_test_split

Otóż ​​to.


To jest odpowiedź. Jesteś niesamowity.
Biswajit Panday

35

Upewnij się, że masz Anaconda zainstalowany, a następnie utworzyć virtualenv korzystając Conda . Zapewni to działanie całego importu

Python 2.7.9 |Anaconda 2.2.0 (64-bit)| (default, Mar  9 2015, 16:20:48) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Anaconda is brought to you by Continuum Analytics.
Please check out: http://continuum.io/thanks and https://binstar.org
>>> from sklearn.cross_validation import train_test_split

Nie, nie mam, muszę zainstalować Anacondę?
arthurckl

Cóż, proponuję ci go zainstalować, ale możesz też spróbować sudo apt-get install python-sklearn, to powinno działać.
Richard Rublev

7
Odpowiedź @DimaLituiev jest tutaj naprawdę poprawną odpowiedzią. Ten problem jest głównie związany ze zmianą nazwy, a nie z prawdziwym brakującym pakietem.
Amrinder Arora

2
To niekoniecznie jest potrzebne. Sugerujesz zainstalowanie nowego środowiska tylko dla jednego pakietu, którego nazwa została zmieniona, powiedziałbym, że to przesada. Rozwiązanie Dimy powinno być oznaczone jako poprawna odpowiedź
MuhsinFatih

Wydaje mi się, że należało odpowiedzieć na pytanie, czy najpierw zadziałał „import sklearn”, czy nie. Jeśli to działa, może to nie jest problem z nazwami.
ju.

24

sklearn.cross_validation jest teraz zmieniony na sklearn.model_selection

Po prostu użyj

from sklearn.model_selection import train_test_split

Myślę, że to zadziała.



15

Być może jest to spowodowane wycofaniem sklearn.cross_validation. Zamień sklearn.cross_validation na sklearn.model_selection

Ref- https://github.com/amueller/scipy_2015_sklearn_tutorial/issues/60


1
Wygląda na to, że twoja odpowiedź jest taka sama, jak poprzednia podana w tym samym wątku. Jeśli uważasz, że tę odpowiedź można poprawić, rozważ jej edycję zamiast tworzenia nowej odpowiedzi na to samo pytanie.
Johan

@Johan Jakoś nie widziałem innej odpowiedzi. Mogę usunąć odpowiedź, jeśli wolisz.
nantitv

12

Dzielenie zbioru danych na zbiór uczący i zbiór testowy

from sklearn.model_selection import train_test_split

2
To samo rozwiązanie, co odpowiedź Ayat Ullah Sony.
Eric Aya

9

Wcześniej: from sklearn.cross_validation (Ten pakiet jest przestarzały w wersji 0.18 od 0.20 i później, jest zmieniany na from sklearn import model_selection).

Teraźniejszość: from sklearn import model_selection

Przykład 2:

Wcześniej: from sklearn.cross_validation import cross_val_score(wersja 0.18, która jest przestarzała)

Teraźniejszość : from sklearn.model_selection import cross_val_score


7

sklearn.cross_validation jest teraz zmieniony na sklearn.model_selection

Po prostu zmień

sklearn.cross_validation

do

sklearn.model_selection

4

zmień kod w ten sposób

# from sklearn.cross_validation import train_test_split
from sklearn.model_selection import train_test_split

4

Jeśli masz kod, który musi uruchamiać różne wersje, możesz zrobić coś takiego:

import sklearn
if sklearn.__version__ > '0.18':
    from sklearn.model_selection import train_test_split
else:
    from sklearn.cross_validation import train_test_split

Nie jest to jednak idealne, ponieważ porównujesz wersje pakietów jako ciągi znaków, co zwykle działa, ale nie zawsze. Jeśli chcesz zainstalować packaging, jest to znacznie lepsze podejście:

from packaging.version import parse
import sklearn
if parse(sklearn.__version__) > parse('0.18'):
    from sklearn.model_selection import train_test_split
else:
    from sklearn.cross_validation import train_test_split

2

cross_validation został wycofany jakiś czas temu, spróbuj go wyłączyć za pomocą model_selection


spróbuj dodać więcej wyjaśnień do swojej odpowiedzi, aby nadać jej większą wartość.
Zeina

2

train_test_splitjest częścią modułu sklearn.model_selection, dlatego może być konieczne zaimportowanie modułu zmodel_selection

Kod:

from sklearn.model_selection import train_test_split

0

Albo musimy obniżyć scikit-learn do najnowszej kompatybilnej wersji. Można to zrobić po aktywacji środowiska Conda. Użyj następujących poleceń, aby obniżyć wersję scikit-learn:

pip uninstall scikit-learn
pip install scikit-learn==0.19.2

LUB

Kiedy nie chcemy obniżać wersji scikit-learn. Wtedy wszyscy wiedzieliśmy, że nazwa „cross_validation” jest przestarzała w nowszych wersjach scikit-learn i została zastąpiona przez „model_selection” w nowej wersji anakondy. Dlatego możemy otrzymać ostrzeżenie lub nawet błąd.

Aby tego uniknąć, wystarczy wymienić:

from sklearn.cross_validation import train_test_split

do

from sklearn.model_selection import train_test_split 

Mam nadzieję, że pomoże to rozwiązać problem.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.