ImportError: nenhum módulo chamado sklearn.cross_validation

174

Estou usando o python 2.7 no Ubuntu 14.04. Eu instalei o scikit-learn, numpy e matplotlib com estes comandos:

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

Mas quando eu importo esses pacotes:

from sklearn.cross_validation import train_test_split

Devolve-me este erro:

ImportError: No module named sklearn.cross_validation

O que eu preciso fazer?

arthurckl
fonte
talvez o nome do seu módulo esteja errado se você instalou o sklearn e o anaconda corretamente.
CKM #
11
Estou apenas repetindo, mas você deve usar o sklearn.model_selection a partir de agora. cross_validation não é utilizável desde sklearn 20+
Michal Mikuláši 23/03/19

Respostas:

584

Ele deve estar relacionado à renomeação e descontinuação do cross_validationsubmódulo para model_selection. Tente substituir cross_validationpormodel_selection

Dima Lituiev
fonte
8
Este deve ser definitivamente a resposta selecionada
rhys_jsk
Essa deve ser a resposta aceita. Não só funciona, mas os votos são superiores a 200 a 4 no momento da minha postagem.
Jerry Destremps
Por que os desenvolvedores do sklearn não criaram um alias para compatibilidade com versões anteriores? Além disso, o documento dessa versão mais antiga deve indicar esse refator : scikit-learn.org/0.16/modules/generated/… .
flow2k
funcionou como charme
omah94 16/06
139

train_test_split agora está em model_selection. Basta digitar:

from sklearn.model_selection import train_test_split

deveria funcionar

ayat ullah sony
fonte
43

Eu acho que a seleção cruzada não está mais ativa. Em vez disso, devemos usar a seleção de modelos. Você pode escrever para rodar,from sklearn.model_selection import train_test_split

É isso aí.

Murat Şahin
fonte
Esta é a resposta. Você é demais.
precisa saber é o seguinte
35

Verifique se o Anaconda está instalado e crie um virtualenv usando o conda . Isso garantirá que todas as importações funcionem

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
fonte
Não, não tenho, preciso instalar o Anaconda?
Arthurckl
Bem, eu sugiro que você o instale. Mas você também pode tentar o sudo apt-get install python-sklearn, que deve funcionar.
Richard Rublev
7
A resposta de @DimaLituiev é realmente a resposta correta aqui. Esse problema está relacionado principalmente a uma renomeação, e não a um pacote ausente verdadeiro.
Amrinder Arora
2
Isso não é necessariamente necessário. Você está sugerindo a instalação de um novo ambiente apenas para um pacote que foi renomeado, eu diria que esta solução é um exagero. A solução da Dima deve ser marcado como resposta correta
MuhsinFatih
Eu acho que a pergunta deveria ter sido abordada se ele "import sklearn" funcionou ou não primeiro. Se funcionar, talvez este não seja um problema de nomenclatura.
ju.
24

sklearn.cross_validation agora foi alterado para sklearn.model_selection

Apenas use

from sklearn.model_selection import train_test_split

Eu acho que vai funcionar.

Tanmoy Bhowmick
fonte
15

Talvez seja devido à descontinuação do sklearn.cross_validation. Substitua sklearn.cross_validation por sklearn.model_selection

Ref- https://github.com/amueller/scipy_2015_sklearn_tutorial/issues/60

nantitv
fonte
1
Parece que sua resposta é a mesma que a anterior, dada no mesmo tópico. Se você acha que essa resposta pode ser melhorada, considere editá- la em vez de fazer uma nova resposta para a mesma pergunta.
Johan
@ John De alguma forma, eu não vi a outra resposta. Eu poderia excluir minha resposta, se você preferir.
Nantitv
12

Dividindo o conjunto de dados no conjunto de treinamento e no conjunto de teste

from sklearn.model_selection import train_test_split
ROHAN YEOLE
fonte
2
A mesma solução que a resposta de ayat ullah sony.
Eric Aya
9

Passado: from sklearn.cross_validation (Este pacote foi descontinuado na versão 0.18 a partir de 0.20 em diante, foi alterado para from sklearn import model_selection).

Presente: from sklearn import model_selection

Exemplo 2:

Passado: from sklearn.cross_validation import cross_val_score(Versão 0.18, que está obsoleta)

Presente: from sklearn.model_selection import cross_val_score

baya prakash reddy
fonte
7

sklearn.cross_validation agora foi alterado para sklearn.model_selection

Apenas mude

sklearn.cross_validation

para

sklearn.model_selection
Sani Kamal
fonte
4

mude o código assim

# from sklearn.cross_validation import train_test_split
from sklearn.model_selection import train_test_split
Muhammad Shabin
fonte
4

Se você tiver um código que precise executar várias versões, poderá fazer algo assim:

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

Porém, isso não é ideal porque você está comparando versões de pacotes como strings, o que geralmente funciona, mas nem sempre. Se você deseja instalar packaging, esta é uma abordagem muito melhor:

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

cross_validation foi descontinuada há algum tempo, tente trocá-lo com model_selection

Aniket Mukherjee
fonte
tente adicionar mais explicações à sua resposta para dar mais valor.
Zeina
2

train_test_splitfaz parte do módulo sklearn.model_selection, portanto, pode ser necessário importar o módulo demodel_selection

Código:

from sklearn.model_selection import train_test_split
decision_scientist_noah
fonte
0

Temos que fazer o downgrade do scikit-learn para a versão compatível mais recente. E isso pode ser feito após a ativação do ambiente conda. Use os seguintes comandos para fazer o downgrade do scikit-learn:

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

OU

Quando não queremos fazer o downgrade do scikit-learn. Todos sabíamos que o nome "cross_validation" foi descontinuado nas versões mais recentes do scikit-learn e foi substituído por "model_selection" dentro da nova versão do anaconda. Portanto, podemos receber um aviso ou até um erro.

Para evitar isso, precisamos apenas substituir:

from sklearn.cross_validation import train_test_split

para

from sklearn.model_selection import train_test_split 

Espero que isso ajude a resolver o problema.

S Habeeb Ullah
fonte