ImportError: Tidak ada modul bernama model_selection

89

Saya mencoba menggunakan train_test_splitfungsi dan menulis:

from sklearn.model_selection import train_test_split

dan ini menyebabkan

ImportError: No module named model_selection

Mengapa? Dan bagaimana cara mengatasinya?

Redup
sumber
2
Saya baru saja terpikir, bahwa Anda belum menerima jawaban apa pun setidaknya dalam sepuluh pertanyaan terakhir Anda. Ingat, menerima jawaban yang paling membantu akan membantu penjawab dan orang-orang untuk melihat pertanyaan Anda di masa mendatang.
linusg

Jawaban:

181

Saya kira Anda memiliki versi yang salah scikit-learn, situasi serupa dijelaskan di sini di GitHub . Sebelumnya (sebelumnya v0.18), train_test_splitterletak di cross_validationmodul:

from sklearn.cross_validation import train_test_split

Namun, sekarang ada di model_selectionmodul:

from sklearn.model_selection import train_test_split

jadi Anda memerlukan versi terbaru.

Untuk mengupgrade ke setidaknya versi 0.18, lakukan:

pip install -U scikit-learn

(Atau pip3, tergantung pada versi Python Anda). Jika Anda menginstalnya dengan cara berbeda, pastikan Anda menggunakan metode lain untuk memperbarui, misalnya saat menggunakan Anaconda.

linusg
sumber
7
Ini tidak berhasil untuk saya, namun solusi Farhard Maleki, "conda update scikit-learn" berhasil.
Alex Kinman
Saya menjalankan perintah pip yang Anda berikan, dan akan muncul kesalahan yang meminta saya untuk mengupgrade pip. Kemudian saya mengupgrade pip dan reran, dan itu akan memberi tahu bahwa tidak perlu mengupgrade sklearn, saya sudah memiliki versi terbaru (0.17) meskipun tidak demikian. Bukan mencoba tawar-menawar, hanya mencoba berbagi info.
Alex Kinman
@AlexKinman Jika Anda telah menginstal Python 2 dan 3, pastikan untuk menggunakan perintah "right pip". Apakah Anda yakin tidak memiliki venv atau berada di tempat yang tepat? Ini terdengar aneh, bisakah Anda membuka shell Python dan memasukkan import sklearn, sklearn(ya, hanya kata) dan sklearn.__version__? Meskipun sudah diperbaiki untuk Anda, akan menarik untuk mengetahui dari mana asalnya.
linusg
sklearn Keluar [2]: <module 'sklearn' dari 'C: \ Users \ XYZ \ AppData \ Local \ Continuum \ Anaconda2 \ lib \ site-packages \ sklearn_ init_ .pyc '> sklearn .__ version__ Out [3]: '0.18 .2 ' Tapi ini setelah saya menjalankan peningkatan Conda dari sklearn
Alex Kinman
Bagaimanapun, bagus itu berhasil untuk Anda sekarang. Saya belum terlalu sering menggunakan Anaconda, tapi saya rasa ini tidak terintegrasi dengan pip. Jawaban sudah diedit, semua pengguna Anaconda akan tahu :)
linusg
26

Perbarui sklearn

conda memperbarui scikit-learn

Farhad Maleki
sumber
4
Ini berhasil, pendekatan jawaban yang diterima tidak. Terima kasih
Alex Kinman
9

Saya mengalami masalah ini saat mengimpor GridSearchCV.

Baru saja berubah sklearn.model_selectionmenjadi sklearn.grid_search.

curry_xyd
sumber
6

Saya memiliki masalah yang sama saat menggunakan Jupyter Notebook, tidak peduli apa yang saya perbarui dengan Python 3, conda, saya tidak bisa mendapatkan di Jupyter:

import sklearn
print (sklearn.__version__)
0.17.1

untuk MENAMPILKAN scikit-learn-0.18.1

Akhirnya, saya menghapus Anaconda3 dan Jupyter Notebook dan menginstal ulang segar. Saya mendapatkannya untuk bekerja.

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

Uki D. Lucas
sumber
5

apakah kamu punya sklearn? jika tidak, lakukan hal berikut:

sudo pip install sklearn

Setelah memasang sklearn

from sklearn.model_selection import train_test_split

bekerja dengan baik

Alex L.
sumber
3

Untuk menginstal scikit-learn versi 18.0, saya menggunakan kedua perintah:

conda memperbarui scikit-learn

pip install -U scikit-learn

Tapi itu tidak berhasil. Ada masalah "Tidak dapat menginstal 'scikit-learn'. Ini adalah proyek yang diinstal distutils dan oleh karena itu kami tidak dapat secara akurat menentukan file mana yang menjadi miliknya yang hanya akan menyebabkan penghapusan sebagian".

Akhirnya, saya dapat menginstalnya dengan menggunakan perintah berikut:

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

Minh Vo
sumber
3

Pada Akhir September 2016, SciKit Learn 0.18 dirilis dan ada sedikit perubahan pada kode. Dengan SciKit Learn 0.18, fungsi train_test_split sekarang diimpor dari model_selection alih-alih cross_validation.

from sklearn.cross_validation import train_test_split

telah diubah menjadi:

from sklearn.model_selection import train_test_split

Hal yang sama juga terjadi untuk GridSearchCV.

Paras Patidar
sumber
2

Seperti yang dikatakan @linusg, salah satu opsinya hanya mengimpor crossvalidation sebagai berikut:

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

Rilis Stabil terbaru dari sklearn 0.20.0 memiliki train_test_split di bawah model_selection tidak dalam cross_validation

Untuk memeriksa versi sklearn Anda:

impor sklearn print (sklearn. version ) 0.20.2

Sameer Kumar Choudhary
sumber
1

Menambahkan beberapa info ke jawaban sebelumnya dari @linusg:

sklearnmenyimpan riwayat rilis semua perubahannya. Pikirkan untuk memeriksanya dari waktu ke waktu. Berikut tautan ke dokumentasinya.

Seperti yang Anda lihat di dokumentasi untuk versi 0.18 , modul baru telah dibuat bernama model_selection. Oleh karena itu tidak ada di versi sebelumnya.

Perbarui sklearndan itu akan berhasil!

MMF
sumber
0

Versi sklearn Anda terlalu rendah, model_selectiondiimpor oleh 0.18.1, jadi harap perbarui versi sklearn.

Changyuan Chen
sumber