ImportError: Nenhum módulo denominado model_selection

89

Estou tentando usar a train_test_splitfunção e escrever:

from sklearn.model_selection import train_test_split

e isso causa

ImportError: No module named model_selection

Por quê? E como superar?

Escurece
fonte
2
Apenas me ocorreu que você não aceitou nenhuma resposta em pelo menos suas últimas dez perguntas. Lembre-se de que aceitar a resposta mais útil ajudará o respondente e as pessoas a analisar sua pergunta no futuro.
linusg de

Respostas:

179

Acho que você tem a versão errada do scikit-learn, uma situação semelhante foi descrita aqui no GitHub . Anteriormente (antes v0.18), train_test_splitestava localizado no cross_validationmódulo:

from sklearn.cross_validation import train_test_split

No entanto, agora está no model_selectionmódulo:

from sklearn.model_selection import train_test_split

então você precisará da versão mais recente.

Para atualizar para pelo menos uma versão 0.18, faça:

pip install -U scikit-learn

(Ou pip3, dependendo da sua versão do Python). Se você instalou de uma maneira diferente, certifique-se de usar outro método para atualizar, por exemplo, ao usar o Anaconda.

Linusg
fonte
7
Isso não funcionou para mim, mas a solução de Farhard Maleki, "conda update scikit-learn" funcionou.
Alex Kinman
Eu executei o comando pip que você forneceu e geraria um erro solicitando que eu atualizasse o pip. Então eu atualizei o pip e reran, e diria que não havia necessidade de atualizar o sklearn, eu já tenho a versão mais recente (0.17) mesmo que não fosse o caso. Não tentando pechinchar, apenas tentando compartilhar informações.
Alex Kinman
@AlexKinman Se você tiver o Python 2 e 3 instalado, certifique-se de usar o comando "pip correto". Tem certeza de que não tem venvs ou está no correto? Isso parece estranho, você poderia abrir um shell Python e inserir import sklearn, sklearn(sim, apenas a palavra) e sklearn.__version__? Mesmo que tenha sido corrigido para você, seria interessante saber de onde veio o problema.
linusg
sklearn Out [2]: <module 'sklearn' from 'C: \ Users \ XYZ \ AppData \ Local \ Continuum \ Anaconda2 \ lib \ site-packages \ sklearn_ init_ .pyc'> sklearn .__ version__ Out [3]: '0,18 .2 ' Mas isso foi depois de executar a atualização do Conda do sklearn
Alex Kinman
De qualquer forma, agora funciona bem para você. Eu não usei muito o Anaconda, mas acho que não se integra com o pip. Resposta editada, todos os usuários do Anaconda saberão :)
linusg
26

Atualizar sklearn

conda update scikit-learn

Farhad Maleki
fonte
4
Isso funcionou, a abordagem da resposta aceita não. Obrigado
Alex Kinman
9

Eu encontrei esse problema ao importar GridSearchCV.

Apenas alterado sklearn.model_selectionpara sklearn.grid_search.

curry_xyd
fonte
6

Eu tive o mesmo problema ao usar o Jupyter Notebook, não importa o que atualizei no Python 3, conda, não consegui obter no Jupyter:

import sklearn
print (sklearn.__version__)
0.17.1

para MOSTRAR scikit-learn-0.18.1

Finalmente, removi o Anaconda3 e o Jupyter Notebook e reinstalei do zero. Eu tenho que trabalhar.

http://ukitech.blogspot.com/2017/02/sklearnmodelselection.html

Uki D. Lucas
fonte
5

você tem sklearn? se não, faça o seguinte:

sudo pip install sklearn

Depois de instalar o sklearn

from sklearn.model_selection import train_test_split

funciona bem

Alex L
fonte
3

Para instalar o scikit-learn versão 18.0, usei os dois comandos:

conda update scikit-learn

pip install -U scikit-learn

Mas não funciona. Houve um problema "Não é possível instalar o 'scikit-learn'. É um projeto instalado do distutils e, portanto, não podemos determinar com precisão quais arquivos pertencem a ele, o que levaria a apenas uma desinstalação parcial".

Finalmente, posso instalá-lo usando o seguinte comando:

pip install --user --upgrade scikit-learn == 0.18.0

Minh Vo
fonte
3

No final de setembro de 2016, o SciKit Learn 0.18 foi lançado e houve uma pequena mudança no código. Com o SciKit Learn 0.18, a função train_test_split agora é importada de model_selection em vez de cross_validation.

from sklearn.cross_validation import train_test_split

foi alterado para:

from sklearn.model_selection import train_test_split

O mesmo também aconteceu com GridSearchCV.

Paras Patidar
fonte
2

Como disse @linusg, uma opção é apenas importar validação cruzada da seguinte maneira:

from sklearn import cross_validation
X_train,X_test,y_train,y_test = cross_validation.train_test_split(X,y,test_size=0.3)
MCardus
fonte
2

A última versão estável do sklearn 0.20.0 tem train_test_split em model_selection e não em cross_validation

Para verificar sua versão do sklearn:

import sklearn print ( versão sklearn. ) 0.20.2

Sameer Kumar Choudhary
fonte
1

Adicionando algumas informações à resposta anterior de @linusg:

sklearnmantém um histórico de lançamento de todas as suas alterações. Pense em verificar de vez em quando. Aqui está o link para a documentação.

Como você pode ver na documentação da versão 0.18 , foi criado um novo módulo chamado model_selection. Portanto, ele não existia nas versões anteriores.

Atualize sklearne funcionará!

MMF
fonte
0

Sua versão do sklearn é muito baixa, model_selectionfoi importada pela 0.18.1, então atualize a versão do sklearn.

Changyuan Chen
fonte