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?

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

Dima Lituiev
fuente
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

ayat ullah sony
fuente
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.

Murat Şahin
fuente
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
Richard Rublev
fuente
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á.

Tanmoy Bhowmick
fuente
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

nantitv
fuente
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
ROHAN YEOLE
fuente
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

baya prakash reddy
fuente
7

sklearn.cross_validation ahora se cambia a sklearn.model_selection

Solo cambia

sklearn.cross_validation

a

sklearn.model_selection
Sani Kamal
fuente
4

cambia el código así

# from sklearn.cross_validation import train_test_split
from sklearn.model_selection import train_test_split
Muhammad Shabin
fuente
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
jss367
fuente
2

cross_validation fue obsoleto hace algún tiempo, intente cambiarlo por model_selection

Aniket Mukherjee
fuente
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
decision_scientist_noah
fuente
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.

S Habeeb Ullah
fuente