ImportError: ningún módulo llamado model_selection

89

Estoy tratando de usar la train_test_splitfunción y escribir:

from sklearn.model_selection import train_test_split

y esto causa

ImportError: No module named model_selection

¿Por qué? ¿Y cómo superarlo?

Atenúa
fuente
2
Se me acaba de ocurrir que no ha aceptado ninguna respuesta en al menos sus últimas diez preguntas. Recuerde, aceptar la respuesta más útil ayudará a la persona que responde y a las personas que buscan su pregunta en el futuro.
linusg

Respuestas:

179

Supongo que tiene la versión incorrecta de scikit-learn, se describió una situación similar aquí en GitHub . Anteriormente (antes v0.18), train_test_splitestaba ubicado en el cross_validationmódulo:

from sklearn.cross_validation import train_test_split

Sin embargo, ahora está en el model_selectionmódulo:

from sklearn.model_selection import train_test_split

por lo que necesitará la versión más reciente.

Para actualizar al menos a la versión 0.18, haga:

pip install -U scikit-learn

(O pip3, dependiendo de su versión de Python). Si lo ha instalado de una manera diferente, asegúrese de usar otro método para actualizar, por ejemplo, cuando usa Anaconda.

linusg
fuente
7
Esto no funcionó para mí, sin embargo, la solución de Farhard Maleki, "conda update scikit-learn" sí lo hizo.
Alex Kinman
Ejecuté el comando pip que me diste y arrojaría un error pidiéndome que actualice pip. Luego actualicé pip y volví a ejecutar, y me diría que no había necesidad de actualizar sklearn, ya tengo la última versión (0.17), aunque ese no era el caso. No estoy tratando de regatear, solo estoy tratando de compartir información.
Alex Kinman
@AlexKinman Si tiene Python 2 y 3 instalados, asegúrese de usar el comando "right pip". ¿Estás seguro de que no tienes venvs o estás en el correcto? Esto suena extraño, ¿podrías abrir un shell de Python y poner import sklearn, sklearn(sí, solo la palabra) y sklearn.__version__? Aunque ya está solucionado para usted, sería interesante saber de dónde vino el problema.
linusg
sklearn Out [2]: <módulo 'sklearn' de 'C: \ Users \ XYZ \ AppData \ Local \ Continuum \ Anaconda2 \ lib \ site-packages \ sklearn_ init_ .pyc '> sklearn .__ versión__ Out [3]: '0.18 .2 ' Pero esto es después de haber ejecutado la actualización Conda de sklearn
Alex Kinman
De todos modos, bien te funciona ahora. No he usado tanto Anaconda, pero supongo que no se integra con pip. Respuesta editada, todos los usuarios de Anaconda lo sabrán :)
linusg
26

Actualizar sklearn

actualización de conda scikit-learn

Farhad Maleki
fuente
4
Esto funcionó, el enfoque de la respuesta aceptada no lo hizo. Gracias
Alex Kinman
9

Encontré este problema cuando importo GridSearchCV.

Recién cambiado sklearn.model_selectiona sklearn.grid_search.

curry_xyd
fuente
6

Tuve el mismo problema mientras usaba Jupyter Notebook, no importa lo que actualicé en Python 3, conda, no pude obtener en Jupyter:

import sklearn
print (sklearn.__version__)
0.17.1

para MOSTRAR scikit-learn-0.18.1

Finalmente, eliminé Anaconda3 y Jupyter Notebook y los reinstalé de nuevo. Yo tengo que trabajar.

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

Uki D. Lucas
fuente
5

tienes sklearn? si no, haga lo siguiente:

sudo pip install sklearn

Después de instalar sklearn

from sklearn.model_selection import train_test_split

funciona bien

Alex L
fuente
3

Para instalar scikit-learn versión 18.0, utilicé ambos comandos:

actualización de conda scikit-learn

pip install -U scikit-learn

Pero no funciona. Hubo un problema "No se puede instalar 'scikit-learn'. Es un proyecto instalado de distutils y, por lo tanto, no podemos determinar con precisión qué archivos pertenecen a él, lo que conduciría a una desinstalación parcial".

Finalmente, puedo instalarlo usando el siguiente comando:

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

Minh Vo
fuente
3

A finales de septiembre de 2016, se lanzó SciKit Learn 0.18 y hubo un ligero cambio en el código. Con SciKit Learn 0.18, la función train_test_split ahora se importa desde model_selection en lugar de cross_validation.

from sklearn.cross_validation import train_test_split

ha sido cambiado a:

from sklearn.model_selection import train_test_split

Lo mismo también ha sucedido con GridSearchCV.

Paras Patidar
fuente
2

Como dijo @linusg, una opción es simplemente importar la validación cruzada de la siguiente manera:

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
fuente
2

La última versión estable de sklearn 0.20.0 tiene train_test_split bajo model_selection no bajo cross_validation

Para verificar su versión de sklearn:

importar sklearn print ( versión sklearn. ) 0.20.2

Sameer Kumar Choudhary
fuente
1

Agregando algo de información a la respuesta anterior de @linusg:

sklearnmantiene un historial de versiones de todos sus cambios. Piense en comprobarlo de vez en cuando. Aquí está el enlace a la documentación.

Como puede ver en la documentación de la versión 0.18 , se creó un nuevo módulo llamado model_selection. Por tanto, no existía en versiones anteriores.

¡Actualiza sklearny funcionará!

MMF
fuente
0

Su versión de sklearn es demasiado baja, la model_selectionimporta 0.18.1, así que actualice la versión de sklearn.

Changyuan Chen
fuente