ImportError: nessun modulo denominato model_selection


89

Sto cercando di usare la train_test_splitfunzione e scrivere:

from sklearn.model_selection import train_test_split

e questo causa

ImportError: No module named model_selection

Perché? E come superare?


2
Mi è appena venuto in mente che non hai accettato alcuna risposta almeno nelle tue ultime dieci domande. Ricorda, accettare la risposta più utile aiuterà chi ha risposto e le persone a guardare la tua domanda in futuro.
Linusg

Risposte:


179

Immagino che tu abbia la versione sbagliata di scikit-learn, una situazione simile è stata descritta qui su GitHub . In precedenza (prima v0.18), train_test_splitsi trovava nel cross_validationmodulo:

from sklearn.cross_validation import train_test_split

Tuttavia, ora è nel model_selectionmodulo:

from sklearn.model_selection import train_test_split

quindi avrai bisogno della versione più recente.

Per eseguire l'aggiornamento almeno alla versione 0.18, eseguire:

pip install -U scikit-learn

(Oppure pip3, a seconda della versione di Python). Se l'hai installato in un modo diverso, assicurati di utilizzare un altro metodo per l'aggiornamento, ad esempio quando usi Anaconda.


7
Questo non ha funzionato per me, tuttavia la soluzione di Farhard Maleki, "conda update scikit-learn" ha funzionato.
Alex Kinman

Ho eseguito il comando pip che hai dato e mi avrebbe generato un errore che mi chiedeva di aggiornare pip. Poi ho aggiornato pip e reran, e si direbbe che non era necessario aggiornare sklearn, ho già l'ultima versione (0.17) anche se non era così. Non provando a contrattare, solo cercando di condividere informazioni.
Alex Kinman

@AlexKinman Se hai installato Python 2 e 3, assicurati di usare il comando "right pip". Sei sicuro di non avere i venv o di essere in quello giusto? Sembra strano, potresti aprire una shell Python e inserire import sklearn, sklearn(sì, solo la parola) e sklearn.__version__? Anche se è stato risolto per te, sarebbe interessante sapere da dove proviene il 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 ' Ma questo è dopo che ho eseguito l'aggiornamento Conda di sklearn
Alex Kinman

Comunque, bene, ora funziona per te. Non ho usato molto Anaconda, ma immagino che non si integri con pip. Risposta modificata, tutti gli utenti di Anaconda lo sapranno :)
linusg


9

Ho riscontrato questo problema durante l'importazione GridSearchCV.

Appena cambiato sklearn.model_selectionin sklearn.grid_search.


6

Ho avuto lo stesso problema durante l'utilizzo di Jupyter Notebook, indipendentemente da ciò che ho aggiornato in Python 3, conda, non sono riuscito a entrare in Jupyter:

import sklearn
print (sklearn.__version__)
0.17.1

per MOSTRARE scikit-learn-0.18.1

Infine, ho rimosso Anaconda3 e Jupyter Notebook e li ho reinstallati di recente. Devo farlo funzionare.

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


5

hai sklearn? in caso contrario, procedi come segue:

sudo pip install sklearn

Dopo aver installato sklearn

from sklearn.model_selection import train_test_split

funziona bene


3

Per installare scikit-learn versione 18.0, ho usato entrambi i comandi:

conda update scikit-learn

pip install -U scikit-learn

Ma non funziona. Si è verificato un problema "Impossibile installare 'scikit-learn'. È un progetto installato da distutils e quindi non possiamo determinare con precisione quali file appartengono ad esso, il che porterebbe a una disinstallazione solo parziale".

Infine, posso installarlo utilizzando il seguente comando:

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


3

Alla fine di settembre 2016, SciKit Learn 0.18 è stato rilasciato e il codice è stato leggermente modificato. Con SciKit Learn 0.18 la funzione train_test_split viene ora importata da model_selection invece di cross_validation.

from sklearn.cross_validation import train_test_split

è stato modificato in:

from sklearn.model_selection import train_test_split

Lo stesso è accaduto anche per GridSearchCV.


2

Come ha detto @linusg, un'opzione è semplicemente importare la convalida incrociata come segue:

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

2

L'ultima versione stabile di sklearn 0.20.0 ha train_test_split sotto model_selection non sotto cross_validation

Per controllare la tua versione di sklearn:

import sklearn print (sklearn. version ) 0.20.2


1

Aggiungendo alcune informazioni alla risposta precedente di @linusg:

sklearnmantiene una cronologia delle versioni di tutte le sue modifiche. Pensa di controllarlo di tanto in tanto. Ecco il link alla documentazione.

Come puoi vedere nella documentazione per la versione 0.18 , è stato creato un nuovo modulo chiamato model_selection. Pertanto non esisteva nelle versioni precedenti.

Aggiorna sklearne funzionerà!


0

La tua versione di sklearn è troppo bassa, model_selectionviene importata dalla 0.18.1, quindi aggiorna la versione di sklearn.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.