ImportError: aucun module nommé sklearn.cross_validation

174

J'utilise python 2.7 dans Ubuntu 14.04. J'ai installé scikit-learn, numpy et matplotlib avec ces commandes:

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

Mais lorsque j'importe ces packages:

from sklearn.cross_validation import train_test_split

Cela me renvoie cette erreur:

ImportError: No module named sklearn.cross_validation

Ce que je dois faire?

Arthurckl
la source
peut-être que le nom de votre module est erroné si vous avez installé sklearn et anaconda correctement.
CKM
11
Je ne fais que le répéter, mais vous devez désormais utiliser sklearn.model_selection. cross_validation n'est pas utilisable depuis sklearn 20+
Michal Mikuláši

Réponses:

584

Il doit concerner le changement de nom et la dépréciation du cross_validationsous-module en model_selection. Essayez de remplacer cross_validationàmodel_selection

Dima Lituiev
la source
8
Cela devrait certainement être la réponse choisie
rhys_jsk
Cela devrait être la réponse acceptée. Non seulement cela fonctionne, mais les votes sont plus de 200 à 4 au moment de mon message.
Jerry Destremps
Pourquoi les développeurs sklearn n'ont-ils pas mis un alias pour la compatibilité descendante? De plus, la documentation de cette ancienne version devrait indiquer ce refactor: scikit-learn.org/0.16/modules/generated/… .
flow2k
travaillé comme du charme
omah94
139

train_test_split est maintenant dans model_selection. Tapez simplement:

from sklearn.model_selection import train_test_split

ça devrait marcher

ayat ullah sony
la source
43

Je suppose que la sélection croisée n'est plus active. Nous devrions utiliser à la place la sélection de modèle. Vous pouvez l'écrire pour l'exécuter,from sklearn.model_selection import train_test_split

C'est tout.

Murat Şahin
la source
Ceci est la réponse. Tu es incroyable.
Biswajit Panday
35

Assurez-vous que Anaconda est installé, puis créez un virtualenv en utilisant conda . Cela garantira que toutes les importations fonctionnent

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
la source
Non, je ne l'ai pas, je dois installer Anaconda?
arthurckl
Eh bien, je vous suggère de l'installer, mais vous pouvez également essayer sudo apt-get install python-sklearn, cela devrait fonctionner.
Richard Rublev
7
La réponse de @DimaLituiev est vraiment la bonne réponse ici. Ce problème est principalement lié à un changement de nom, pas à un véritable package manquant.
Amrinder Arora
2
Ce n'est pas forcément nécessaire. Vous suggérez d'installer un nouvel environnement juste pour un package qui a été renommé, je dirais que cette solution est excessive. La solution de Dima doit être marquée comme bonne réponse
MuhsinFatih
Je suppose que la question aurait dû être posée s'il a travaillé ou non en premier "import sklearn". Si cela fonctionne, ce n'est peut-être pas un problème de dénomination.
ju.
24

sklearn.cross_validation est maintenant changé en sklearn.model_selection

Juste utiliser

from sklearn.model_selection import train_test_split

Je pense que cela fonctionnera.

Tanmoy Bhowmick
la source
15

Cela peut être dû à la dépréciation de sklearn.cross_validation. Veuillez remplacer sklearn.cross_validation par sklearn.model_selection

Réf- https://github.com/amueller/scipy_2015_sklearn_tutorial/issues/60

nantitv
la source
1
Il semble que votre réponse soit la même qu'une précédente donnée dans le même fil. Si vous pensez que cette réponse peut être améliorée, envisagez de la modifier au lieu de créer une nouvelle réponse à la même question.
Johan
@Johan Certains comment je n'ai pas vu l'autre réponse. Je pourrais supprimer ma réponse si vous préférez.
nantitv
12

Fractionnement de l'ensemble de données en ensemble d'apprentissage et ensemble de test

from sklearn.model_selection import train_test_split
ROHAN YEOLE
la source
2
Même solution que la réponse d'ayat ullah sony.
Eric Aya
9

Passé: from sklearn.cross_validation (Ce paquet est obsolète dans la version 0.18 à partir de 0.20, il est changé en from sklearn import model_selection).

Présent: from sklearn import model_selection

Exemple 2:

Passé: from sklearn.cross_validation import cross_val_score(Version 0.18 qui est obsolète)

Présent : from sklearn.model_selection import cross_val_score

baya prakash reddy
la source
7

sklearn.cross_validation est maintenant changé en sklearn.model_selection

Changez juste

sklearn.cross_validation

à

sklearn.model_selection
Sani Kamal
la source
4

changez le code comme ça

# from sklearn.cross_validation import train_test_split
from sklearn.model_selection import train_test_split
Muhammad Shabin
la source
4

Si vous avez du code qui doit exécuter différentes versions, vous pouvez faire quelque chose comme ceci:

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

Ce n'est pas idéal car vous comparez les versions de packages sous forme de chaînes, ce qui fonctionne généralement mais pas toujours. Si vous êtes prêt à installer packaging, c'est une bien meilleure approche:

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
la source
2

cross_validation est obsolète il y a quelque temps, essayez de le désactiver avec model_selection

Aniket Mukherjee
la source
essayez d'ajouter plus d'explications à votre réponse pour lui donner plus de valeur.
Zeina
2

train_test_splitfait partie du module sklearn.model_selection, par conséquent, vous devrez peut-être importer le module depuismodel_selection

Code:

from sklearn.model_selection import train_test_split
decision_scientist_noah
la source
0

Soit nous devons rétrograder scikit-learn vers la version compatible la plus récente. Et cela peut être fait après l'activation de l'environnement conda. Utilisez les commandes suivantes pour rétrograder scikit-learn:

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

OU

Lorsque nous ne voulons pas rétrograder scikit-learn. Ensuite, nous savions tous que le nom "cross_validation" est obsolète dans les nouvelles versions de scikit-learn et a été remplacé par "model_selection" dans la nouvelle version d'anaconda. Par conséquent, nous pourrions recevoir un avertissement ou même une erreur.

Pour éviter cela, il suffit de remplacer:

from sklearn.cross_validation import train_test_split

à

from sklearn.model_selection import train_test_split 

J'espère que cela aidera à résoudre le problème.

S Habeeb Ullah
la source