ImportError: Немає модуля з іменем model_selection


89

Я намагаюся використовувати train_test_splitфункцію і написати:

from sklearn.model_selection import train_test_split

і це спричиняє

ImportError: No module named model_selection

Чому? А як подолати?


2
Мені просто здалося, що ви не прийняли жодної відповіді хоча б у своїх останніх десяти запитаннях. Пам’ятайте, що прийняття найбільш корисної відповіді допоможе відповідачу та людям, які розглядають ваше питання в майбутньому.
linusg

Відповіді:


179

Я думаю, у вас неправильна версія scikit-learn, подібна ситуація була описана тут на GitHub . Раніше (раніше v0.18) train_test_splitзнаходився в cross_validationмодулі:

from sklearn.cross_validation import train_test_split

Однак зараз це в model_selectionмодулі:

from sklearn.model_selection import train_test_split

тож вам знадобиться найновіша версія.

Щоб оновити принаймні до версії 0.18:

pip install -U scikit-learn

(Або pip3, залежно від вашої версії Python). Якщо ви встановили його іншим способом, переконайтеся, що ви використовуєте інший метод оновлення, наприклад, коли використовуєте Anaconda.


7
Це не спрацювало для мене, проте рішення Фархарда Малекі, "conda update scikit-learn".
Alex Kinman

Я запустив команду pip, яку ви дали, і вона видасть помилку з проханням оновити pip. Потім я модернізував pip і reran, і це означало, що не потрібно було оновлювати sklearn, я вже маю останню версію (0.17), навіть думав, що капелюх не так. Не намагаючись торгуватися, просто намагаючись поділитися інформацією.
Alex Kinman

@AlexKinman Якщо у вас встановлені Python 2 і 3, обов’язково використовуйте команду "right pip". Ви впевнені, що у вас немає венв або ви перебуваєте в потрібному? Це звучить дивно, НЕ могли б ви відкрити оболонку Python і покласти в import sklearn, sklearn(так, просто слово) і sklearn.__version__? Незважаючи на те, що це виправлено для вас, було б цікаво дізнатися, звідки виникла проблема.
linusg

sklearn Out [2]: <модуль 'sklearn' з 'C: \ Users \ XYZ \ AppData \ Local \ Continuum \ Anaconda2 \ lib \ site-пакети \ sklearn_ init_ .pyc'> sklearn .__ версія__ Вихід [3]: '0,18 .2 ' Але це після того, як я запустив оновлення Condera skleran
Алекс Кінман,

У будь-якому випадку, добре, це зараз у вас працює. Я не використовував Anaconda так багато, але, мабуть, він не інтегрується з pip. Відповідь відредаговано, усі користувачі Anaconda будуть знати :)
linusg


9

Я зіткнувся з цією проблемою під час імпорту GridSearchCV.

Просто змінив sklearn.model_selectionна sklearn.grid_search.


6

У мене була така сама проблема під час використання блокнота Jupyter, незалежно від того, що я оновлював у Python 3, conda, я не міг отримати в Jupyter:

import sklearn
print (sklearn.__version__)
0.17.1

ПОКАЗАТИ scikit-learn-0.18.1

Нарешті, я видалив Anaconda3 та Jupyter Notebook і перевстановив свіжий. Я змусив це працювати.

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


5

у вас є sklearn? якщо ні, виконайте наступне:

sudo pip install sklearn

Після встановлення sklearn

from sklearn.model_selection import train_test_split

працює нормально


3

Щоб встановити scikit-learn версію 18.0, я використав обидві команди:

conda оновлення

pip install -U scikit-learn

Але це не працює. Виникла проблема "Не вдається встановити 'scikit-learn'. Це встановлений проект, і тому ми не можемо точно визначити, які файли йому належать, що призведе до часткового видалення".

Нарешті, я можу встановити його, використовуючи таку команду:

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


3

Наприкінці вересня 2016 року було випущено SciKit Learn 0.18, і коди були незначно змінені. За допомогою SciKit Learn 0.18 функція train_test_split тепер імпортується з model_selection замість cross_validation.

from sklearn.cross_validation import train_test_split

було змінено на:

from sklearn.model_selection import train_test_split

Те ж саме сталося і з GridSearchCV.


2

Як сказав @linusg, одним із варіантів є просто перехресна перевірка імпорту таким чином:

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

Останній стабільний випуск sklearn 0.20.0 має train_test_split знаходиться у виборі model_ne під перехресною валідацією

Для того, щоб перевірити вашу версію sklearn:

імпорт sklearn друк (sklearn. версія ) 0.20.2


1

Додавання деякої інформації до попередньої відповіді від @linusg:

sklearnзберігає історію випусків усіх його змін. Подумайте перевірити це час від часу. Ось посилання на документацію.

Як ви можете бачити в документації до версії 0.18 , був створений новий модуль із назвою model_selection. Тому він не існував у попередніх версіях.

Оновіть, sklearnі це буде працювати!


0

Ваша версія sklearn занадто низька, model_selectionвона імпортується до 0.18.1, тому, будь ласка, оновіть версію sklearn.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.