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?


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.


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


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.



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


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


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.


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)

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


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á!


0

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.