ImportError: Kein Modul mit dem Namen sklearn.cross_validation


174

Ich verwende Python 2.7 in Ubuntu 14.04. Ich habe scikit-learn, numpy und matplotlib mit folgenden Befehlen installiert:

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

Aber wenn ich diese Pakete importiere:

from sklearn.cross_validation import train_test_split

Es gibt mir diesen Fehler zurück:

ImportError: No module named sklearn.cross_validation

Was ich tun muss?


Möglicherweise ist Ihr Modulname falsch, wenn Sie sklearn und anaconda korrekt installiert haben.
— CKM

11
Ich wiederhole es wirklich nur, aber Sie müssen von nun an sklearn.model_selection verwenden. cross_validation ist nicht verwendbar seit sklearn 20+
— Michal Mikuláši

Antworten:


582

Es muss sich auf die Umbenennung und Ablehnung des cross_validationUntermoduls beziehen model_selection. Versuchen Sie ersetzen cross_validationzumodel_selection


8
Dies sollte definitiv die ausgewählte Antwort sein
— rhys_jsk

Dies sollte die akzeptierte Antwort sein. Es funktioniert nicht nur, sondern die Stimmen sind zum Zeitpunkt meines Beitrags über 200 zu 4.
— Jerry Destremps

Warum haben sklearn-Entwickler aus Gründen der Abwärtskompatibilität keinen Alias ​​eingegeben? Außerdem sollte das Dokument für diese ältere Version diesen Refaktor angeben : scikit-learn.org/0.16/modules/generated/… .
— flow2k

arbeitete wie Charme
— omah94

139

train_test_split befindet sich jetzt in model_selection. Schreib einfach:

from sklearn.model_selection import train_test_split

es sollte funktionieren


43

Ich denke, die Kreuzauswahl ist nicht mehr aktiv. Wir sollten stattdessen die Modellauswahl verwenden. Sie können es schreiben, um zu laufen,from sklearn.model_selection import train_test_split

Das ist es.


Das ist die Antwort. Du bist toll.
— Biswajit Panday

35

Stellen Sie sicher, dass Sie Anaconda installiert haben, und erstellen Sie dann eine virtuelle Umgebung mit conda . Dadurch wird sichergestellt, dass alle Importe funktionieren

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

Nein, ich habe es nicht, ich muss Anaconda installieren?
— Arthurckl

Nun, ich würde Ihnen vorschlagen, es zu installieren. Aber Sie können auch versuchen, sudo apt-get install python-sklearn, das sollte funktionieren.
— Richard Rublev

7
Die Antwort von @DimaLituiev ist hier wirklich die richtige Antwort. Dieses Problem hängt hauptsächlich mit einer Umbenennung zusammen, nicht mit einem wirklich fehlenden Paket.
— Amrinder Arora

2
Dies ist nicht unbedingt erforderlich. Sie schlagen vor, eine neue Umgebung nur für ein umbenanntes Paket zu installieren. Ich würde sagen, diese Lösung ist ein Overkill.
— Dimas

Ich denke, die Frage hätte beantwortet werden müssen, ob "import sklearn" funktioniert hat oder nicht. Wenn es funktioniert, ist dies möglicherweise kein Namensproblem.
— ju.

24

sklearn.cross_validation wird jetzt in geändert sklearn.model_selection

Benutz einfach

from sklearn.model_selection import train_test_split

Ich denke das wird funktionieren.



15

Möglicherweise liegt es an der Ablehnung von sklearn.cross_validation. Bitte ersetzen Sie sklearn.cross_validation durch sklearn.model_selection

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


1
Es scheint, dass Ihre Antwort dieselbe ist wie eine vorherige, die im selben Thread angegeben wurde. Wenn Sie der Meinung sind, dass diese Antwort verbessert werden kann, sollten Sie sie bearbeiten , anstatt eine neue Antwort auf dieselbe Frage zu geben.
— Johan

@ Joan Einige, wie ich die andere Antwort nicht gesehen habe. Ich könnte meine Antwort löschen, wenn Sie es vorziehen.
— Nantitv

12

Aufteilen des Datensatzes in Trainingssatz und Testsatz

from sklearn.model_selection import train_test_split

2
Gleiche Lösung wie die Antwort von Ayat ullah Sony.
— Eric Aya

9

Vergangenheit: from sklearn.cross_validation (Dieses Paket ist in der Version 0.18 ab 0.20 veraltet und wird in geändert. from sklearn import model_selection)

Geschenk: from sklearn import model_selection

Beispiel 2:

Vergangenheit: from sklearn.cross_validation import cross_val_score(Version 0.18, die veraltet ist)

Geschenk : from sklearn.model_selection import cross_val_score


7

sklearn.cross_validation wird jetzt in geändert sklearn.model_selection

Nur ändern

sklearn.cross_validation

zu

sklearn.model_selection

4

Ändern Sie den Code wie folgt

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

4

Wenn Sie Code haben, der verschiedene Versionen ausführen muss, können Sie Folgendes tun:

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

Dies ist jedoch nicht ideal, da Sie Paketversionen als Zeichenfolgen vergleichen, was normalerweise funktioniert, aber nicht immer. Wenn Sie zur Installation bereit sind, packagingist dies ein viel besserer Ansatz:

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 war vor einiger Zeit veraltet. Versuchen Sie es mit model_selection auszuschalten


Versuchen Sie, Ihrer Antwort mehr Erklärungen hinzuzufügen, um ihr mehr Wert zu verleihen.
— Zeina

2

train_test_splitist Teil des Moduls sklearn.model_selection, daher müssen Sie das Modul möglicherweise aus importierenmodel_selection

Code:

from sklearn.model_selection import train_test_split

0

Entweder müssen wir scikit-learn auf die neueste kompatible Version herunterstufen. Dies kann nach Aktivierung der Conda-Umgebung erfolgen. Verwenden Sie die folgenden Befehle, um scikit-learn herunterzustufen:

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

ODER

Wenn wir Scikit-Learn nicht herabstufen wollen. Dann wussten wir alle, dass der Name "cross_validation" in neueren Versionen von scikit-learn veraltet ist und in der neuen Anaconda-Version durch "model_selection" ersetzt wurde. Daher erhalten wir möglicherweise eine Warnung oder sogar einen Fehler.

Um dies zu vermeiden, müssen wir nur ersetzen:

from sklearn.cross_validation import train_test_split

zu

from sklearn.model_selection import train_test_split 

Hoffe, dies wird helfen, das Problem zu lösen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.