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?


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


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


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í.


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

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.



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


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

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


7

sklearn.cross_validation agora foi alterado para sklearn.model_selection

Apenas mude

sklearn.cross_validation

para

sklearn.model_selection

4

mude o código assim

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

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

2

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


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

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.