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.