ImportError: nessun modulo denominato sklearn.cross_validation


174

Sto usando Python 2.7 in Ubuntu 14.04. Ho installato scikit-learn, numpy e matplotlib con questi comandi:

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

Ma quando importare questi pacchetti:

from sklearn.cross_validation import train_test_split

Mi restituisce questo errore:

ImportError: No module named sklearn.cross_validation

Cosa devo fare?


forse il nome del tuo modulo è sbagliato se sklearn e anaconda sono stati installati correttamente.
CKM,

11
Lo sto davvero solo ripetendo, ma da ora in poi devi usare sklearn.model_selection. cross_validation non è utilizzabile da sklearn 20+
Michal Mikuláši

Risposte:


584

Deve riguardare la ridenominazione e il deprezzamento del cross_validationsottomodulo in model_selection. Provate a sostituire cross_validationamodel_selection


8
Questa dovrebbe essere sicuramente la risposta selezionata
rhys_jsk

Questa dovrebbe essere la risposta accettata. Non solo funziona, ma i voti sono oltre 200 a 4 al momento del mio post.
Jerry Destremps,

Perché gli sviluppatori sklearn non hanno inserito un alias per la compatibilità con le versioni precedenti? Inoltre, il documento per quella versione precedente dovrebbe indicare questo refactor: scikit-learn.org/0.16/modules/generated/… .
flow2k,

ha funzionato come per incanto
omah94 il

139

train_test_split è ora in model_selection. Basta digitare:

from sklearn.model_selection import train_test_split

dovrebbe funzionare


43

Immagino che la selezione incrociata non sia più attiva. Dovremmo usare invece la selezione del modello. Puoi scriverlo per correre,from sklearn.model_selection import train_test_split

Questo è tutto.


Questa è la risposta Sei fantastico.
Biswajit Panday,

35

Assicurati di avere Anaconda installato e quindi crea un virtualenv usando conda . Ciò garantirà il funzionamento di tutte le importazioni

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

No, non ce l'ho, devo installare Anaconda?
Arthurthur

Bene, ti suggerirei di installarlo, ma puoi anche provare sudo apt-get install python-sklearn, che dovrebbe funzionare.
Richard Rublev,

7
La risposta di @DimaLituiev è davvero la risposta corretta qui. Questo problema è principalmente legato a una ridenominazione, non a un vero pacchetto mancante.
Amrinder Arora,

2
Questo non è necessariamente necessario. Stai suggerendo di installare un nuovo ambiente solo per un pacchetto che è stato rinominato, direi che questa soluzione è eccessiva. La soluzione di Dima dovrebbe essere contrassegnata come risposta corretta
MuhsinFatih

Immagino che la domanda avrebbe dovuto essere indirizzata se prima ha funzionato "import sklearn". Se funziona, forse questo non è un problema di denominazione.
ju.

24

sklearn.cross_validation è ora cambiato in sklearn.model_selection

Basta usare

from sklearn.model_selection import train_test_split

Penso che funzionerà.



15

Potrebbe essere dovuto alla deprecazione di sklearn.cross_validation. Sostituisci sklearn.cross_validation con sklearn.model_selection

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


1
Sembra che la tua risposta sia la stessa di una precedente fornita nella stessa discussione. Se ritieni che la risposta possa essere migliorata, considera la possibilità di modificarla invece di creare una nuova risposta alla stessa domanda.
Johan

@Johan Alcuni come non ho visto l'altra risposta. Potrei cancellare la mia risposta se preferisci.
nantitv,

12

Dividere il set di dati nel set di allenamento e nel set di test

from sklearn.model_selection import train_test_split

2
Stessa soluzione della risposta di Ayat Ullah Sony.
Eric Aya,

9

Passato: from sklearn.cross_validation (Questo pacchetto è deprecato nella versione 0.18 da 0.20 in poi è cambiato in from sklearn import model_selection).

Presente: from sklearn import model_selection

Esempio 2:

Passato: from sklearn.cross_validation import cross_val_score(versione 0.18 che è obsoleta)

Presente : from sklearn.model_selection import cross_val_score


7

sklearn.cross_validation è ora cambiato in sklearn.model_selection

Basta cambiare

sklearn.cross_validation

per

sklearn.model_selection

4

cambia il codice in questo modo

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

4

Se hai un codice che deve eseguire varie versioni, potresti fare qualcosa del genere:

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

Questo non è l'ideale però perché stai confrontando le versioni del pacchetto come stringhe, che di solito funzionano ma non sempre. Se sei disposto a installare packaging, questo è un approccio molto migliore:

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 è stato deprecato qualche tempo fa, prova a cambiarlo con model_selection


prova ad aggiungere più spiegazioni alla tua risposta per darle più valore.
Zeina,

2

train_test_splitfa parte del modulo sklearn.model_selection, quindi potrebbe essere necessario importare il modulo damodel_selection

Codice:

from sklearn.model_selection import train_test_split

0

O dobbiamo effettuare il downgrade di scikit-learn alla versione compatibile più recente. E questo può essere fatto dopo aver attivato l'ambiente conda. Utilizzare i seguenti comandi per eseguire il downgrade di scikit-learn:

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

O

Quando non vogliamo effettuare il downgrade di scikit-learn. Quindi sapevamo tutti che il nome "cross_validation" è deprecato nelle nuove versioni di scikit-learn ed è stato sostituito da "model_selection" nella nuova versione di anaconda. Pertanto potremmo ricevere un avviso o anche un errore.

Per evitare ciò, dobbiamo solo sostituire:

from sklearn.cross_validation import train_test_split

per

from sklearn.model_selection import train_test_split 

Spero che questo possa aiutare a risolvere il problema.

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.