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?


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


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


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.


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

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.



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


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

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


7

sklearn.cross_validation est maintenant changé en sklearn.model_selection

Changez juste

sklearn.cross_validation

à

sklearn.model_selection

4

changez le code comme ça

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

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

2

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


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

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.