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ć?

arthurckl
źródło
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

Dima Lituiev
źródło
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ć

ayat ullah sony
źródło
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.

Murat Şahin
źródło
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
Richard Rublev
źródło
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.

Tanmoy Bhowmick
źródło
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

nantitv
źródło
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
ROHAN YEOLE
źródło
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

baya prakash reddy
źródło
7

sklearn.cross_validation jest teraz zmieniony na sklearn.model_selection

Po prostu zmień

sklearn.cross_validation

do

sklearn.model_selection
Sani Kamal
źródło
4

zmień kod w ten sposób

# from sklearn.cross_validation import train_test_split
from sklearn.model_selection import train_test_split
Muhammad Shabin
źródło
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
jss367
źródło
2

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

Aniket Mukherjee
źródło
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
Decision_scientist_noah
źródło
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.

S Habeeb Ullah
źródło