ImportError: ningún módulo llamado sklearn.cross_validation


174

Estoy usando python 2.7 en Ubuntu 14.04. Instalé scikit-learn, numpy y matplotlib con estos comandos:

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

Pero cuando importo estos paquetes:

from sklearn.cross_validation import train_test_split

Me devuelve este error:

ImportError: No module named sklearn.cross_validation

¿Lo que necesito hacer?


quizás el nombre de su módulo sea incorrecto si ha instalado sklearn y anaconda correctamente.
CKM

11
Realmente solo lo estoy repitiendo, pero debes usar sklearn.model_selection de ahora en adelante. cross_validation no es utilizable desde sklearn 20+
Michal Mikuláši

Respuestas:


584

Debe relacionarse con el cambio de nombre y desaprobación del cross_validationsubmódulo a model_selection. Intenta sustituirlo cross_validationpormodel_selection


8
Esta definitivamente debería ser la respuesta seleccionada
rhys_jsk

Esta debería ser la respuesta aceptada. No solo funciona, sino que los votos son más de 200 a 4 en el momento de mi publicación.
Jerry Destremps

¿Por qué los desarrolladores de sklearn no pusieron un alias para la compatibilidad con versiones anteriores? Además, el documento de esa versión anterior debe indicar este refactor: scikit-learn.org/0.16/modules/generated/… .
flow2k

trabajó como encanto
omah94

139

train_test_split ahora está en model_selection. Sólo tipo:

from sklearn.model_selection import train_test_split

deberia de funcionar


43

Supongo que la selección cruzada ya no está activa. Deberíamos usar en su lugar la selección del modelo. Puedes escribirlo para correr,from sklearn.model_selection import train_test_split

Eso es.


Esta es la respuesta. Usted es maravilloso.
Biswajit Panday

35

Asegúrese de tener instalado Anaconda y luego cree un virtualenv usando conda . Esto asegurará que todas las importaciones funcionen

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

No, no lo tengo, ¿necesito instalar Anaconda?
arthurckl

Bueno, te sugiero que lo instales, pero también puedes probar sudo apt-get install python-sklearn, eso debería funcionar.
Richard Rublev

77
La respuesta de @DimaLituiev es realmente la respuesta correcta aquí. Este problema está relacionado principalmente con un cambio de nombre, no con un verdadero paquete perdido.
Amrinder Arora

2
Esto no es necesariamente necesario. Sugiere instalar un nuevo entorno solo para un paquete que fue renombrado, diría que esta solución es una exageración. La solución de Dima debe marcarse como respuesta correcta
MuhsinFatih

Supongo que la pregunta debería haberse abordado si él "importó sklearn" funcionó o no primero. Si funciona, quizás este no sea un problema de nomenclatura.
ju.

24

sklearn.cross_validation ahora se cambia a sklearn.model_selection

Solo usa

from sklearn.model_selection import train_test_split

Creo que eso funcionará.



15

Puede ser debido a la depreciación de sklearn.cross_validation. Reemplace sklearn.cross_validation con sklearn.model_selection

Ref. Https://github.com/amueller/scipy_2015_sklearn_tutorial/issues/60


1
Parece que su respuesta es la misma que la anterior dada en el mismo hilo. Si cree que esa respuesta puede mejorarse, considere editarla en lugar de hacer una nueva respuesta a la misma pregunta.
Johan

@Johan De alguna manera, no vi la otra respuesta. Podría eliminar mi respuesta si lo prefiere.
nantitv

12

División del conjunto de datos en el conjunto de entrenamiento y el conjunto de prueba

from sklearn.model_selection import train_test_split

2
La misma solución que la respuesta de ayat ullah sony.
Eric Aya

9

Pasado: from sklearn.cross_validation (Este paquete está en desuso en la versión 0.18 de 0.20 en adelante se cambia a from sklearn import model_selection).

Presente: from sklearn import model_selection

Ejemplo 2

Pasado: from sklearn.cross_validation import cross_val_score(Versión 0.18 que está en desuso)

Presente: from sklearn.model_selection import cross_val_score


7

sklearn.cross_validation ahora se cambia a sklearn.model_selection

Solo cambia

sklearn.cross_validation

a

sklearn.model_selection

4

cambia el código así

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

4

Si tiene un código que necesita ejecutar varias versiones, puede hacer algo como esto:

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

Sin embargo, esto no es ideal porque está comparando versiones de paquetes como cadenas, lo que generalmente funciona pero no siempre. Si está dispuesto a instalar packaging, este es un enfoque mucho mejor:

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 fue obsoleto hace algún tiempo, intente cambiarlo por model_selection


intenta agregar más explicaciones a tu respuesta para darle más valor.
Zeina

2

train_test_splites parte del módulo sklearn.model_selection, por lo tanto, es posible que deba importar el módulo desdemodel_selection

Código:

from sklearn.model_selection import train_test_split

0

O tenemos que degradar scikit-learn a la versión compatible más reciente. Y esto se puede hacer después de activar el entorno conda. Use los siguientes comandos para degradar scikit-learn:

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

O

Cuando no queremos degradar scikit-learn. Entonces todos supimos que el nombre "cross_validation" está en desuso en las versiones más nuevas de scikit-learn y fue reemplazado por "model_selection" dentro de la nueva versión de anaconda. Por lo tanto, podríamos recibir una advertencia o incluso un error.

Para evitar esto, solo necesitamos reemplazar:

from sklearn.cross_validation import train_test_split

a

from sklearn.model_selection import train_test_split 

Espero que esto ayude a resolver el problema.

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.