ImportError: aucun module nommé model_selection

89

J'essaye d'utiliser la train_test_splitfonction et d'écrire:

from sklearn.model_selection import train_test_split

et cela provoque

ImportError: No module named model_selection

Pourquoi? Et comment surmonter?

Dims
la source
2
Il m'est venu à l'esprit que vous n'avez accepté aucune réponse à au moins vos dix dernières questions. N'oubliez pas que l'acceptation de la réponse la plus utile aidera le répondant et les personnes qui recherchent votre question à l'avenir.
linusg

Réponses:

179

Je suppose que vous avez la mauvaise version de scikit-learn, une situation similaire a été décrite ici sur GitHub . Auparavant (avant v0.18), train_test_splitse trouvait dans le cross_validationmodule:

from sklearn.cross_validation import train_test_split

Cependant, maintenant c'est dans le model_selectionmodule:

from sklearn.model_selection import train_test_split

vous aurez donc besoin de la dernière version.

Pour mettre à niveau vers au moins la version 0.18, procédez comme suit:

pip install -U scikit-learn

(Ou pip3, selon votre version de Python). Si vous l'avez installé d'une manière différente, assurez-vous d'utiliser une autre méthode de mise à jour, par exemple lors de l'utilisation d'Anaconda.

Linusg
la source
7
Cela n'a pas fonctionné pour moi, mais la solution de Farhard Maleki, "conda update scikit-learn" a fonctionné.
Alex Kinman
J'ai exécuté la commande pip que vous avez donnée et une erreur me demandait de mettre à jour pip. Ensuite, j'ai mis à niveau pip et reran, et cela dirait qu'il n'était pas nécessaire de mettre à niveau sklearn, j'ai déjà la dernière version (0.17) même si ce n'était pas le cas. Je n'essaye pas de marchander, j'essaie simplement de partager des informations.
Alex Kinman
@AlexKinman Si vous avez installé Python 2 et 3, assurez-vous d'utiliser la commande "right pip". Etes-vous sûr de ne pas avoir de venvs ou êtes-vous dans le bon? Cela semble étrange, pourriez-vous ouvrir un shell Python et y mettre import sklearn, sklearn(oui, juste le mot) et sklearn.__version__? Même s'il est résolu pour vous, il serait intéressant de savoir d'où vient le problème.
linusg
sklearn Out [2]: <module 'sklearn' de 'C: \ Users \ XYZ \ AppData \ Local \ Continuum \ Anaconda2 \ lib \ site-packages \ sklearn_ init_ .pyc'> sklearn .__ version__ Out [3]: '0.18 .2 ' Mais c'est après avoir exécuté la mise à niveau Conda de sklearn
Alex Kinman
Quoi qu'il en soit, ça marche pour vous maintenant. Je n'ai pas tellement utilisé Anaconda, mais je suppose que cela ne s'intègre pas avec pip. Réponse modifiée, tous les utilisateurs d'Anaconda le sauront :)
linusg
26

Mettre à jour sklearn

mise à jour conda scikit-learn

Farhad Maleki
la source
4
Cela a fonctionné, l'approche de la réponse acceptée n'a pas fonctionné. Merci
Alex Kinman
9

J'ai rencontré ce problème lors de l'importation GridSearchCV.

Juste changé sklearn.model_selectionen sklearn.grid_search.

curry_xyd
la source
6

J'ai eu le même problème en utilisant Jupyter Notebook, peu importe ce que j'ai mis à jour dans Python 3, conda, je ne pouvais pas entrer dans Jupyter:

import sklearn
print (sklearn.__version__)
0.17.1

pour MONTRER scikit-learn-0.18.1

Enfin, j'ai supprimé Anaconda3 et Jupyter Notebook et réinstallé à neuf. Je l'ai fait fonctionner.

http://ukitech.blogspot.com/2017/02/sklearnmodelselection.html

Uki D. Lucas
la source
5

avez-vous sklearn? sinon, procédez comme suit:

sudo pip install sklearn

Après avoir installé sklearn

from sklearn.model_selection import train_test_split

fonctionne bien

Alex L
la source
3

Pour installer scikit-learn version 18.0, j'ai utilisé les deux commandes:

mise à jour conda scikit-learn

pip install -U scikit-learn

Mais ça ne marche pas. Il y a eu un problème "Impossible d'installer 'scikit-learn'. C'est un projet installé par distutils et nous ne pouvons donc pas déterminer avec précision quels fichiers lui appartiennent, ce qui ne conduirait qu'à une désinstallation partielle".

Enfin, je peux l'installer en utilisant la commande suivante:

pip install --user --upgrade scikit-learn == 0.18.0

Minh Vo
la source
3

Fin septembre 2016, SciKit Learn 0.18 est sorti et il y a eu un léger changement dans le code. Avec SciKit Learn 0.18, la fonction train_test_split est désormais importée de model_selection au lieu de cross_validation.

from sklearn.cross_validation import train_test_split

a été changé en:

from sklearn.model_selection import train_test_split

La même chose s'est produite pour GridSearchCV.

Paras Patidar
la source
2

Comme @linusg l'a dit, une option consiste simplement à importer la validation croisée comme suit:

from sklearn import cross_validation
X_train,X_test,y_train,y_test = cross_validation.train_test_split(X,y,test_size=0.3)
MCardus
la source
2

La dernière version stable de sklearn 0.20.0 a train_test_split est sous model_selection pas sous cross_validation

Afin de vérifier votre version de sklearn:

importer sklearn print ( version sklearn) 0.20.2

Sameer Kumar Choudhary
la source
1

Ajout d'informations à la réponse précédente de @linusg:

sklearnconserve un historique des versions de tous ses changements. Pensez à le vérifier de temps en temps. Voici le lien vers la documentation.

Comme vous pouvez le voir dans la documentation de la version 0.18 , un nouveau module a été créé appelé model_selection. Par conséquent, il n'existait pas dans les versions précédentes.

Mettez à jour sklearnet cela fonctionnera!

MMF
la source
0

Votre version de sklearn est trop basse, model_selectionest importée par 0.18.1, veuillez donc mettre à jour la version de sklearn.

Changyuan Chen
la source