ImportError: нет модуля с именем model_selection


89

Я пытаюсь использовать train_test_splitфункцию и пишу:

from sklearn.model_selection import train_test_split

и это вызывает

ImportError: No module named model_selection

Зачем? А как побороть?


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

Ответы:


181

Я думаю, у вас неправильная версия 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". Вы уверены, что у вас нет Venvs или вы выбрали правильный? Это звучит странно, не могли бы вы открыть оболочку Python и положить в import sklearn, sklearn(да, просто слово) и sklearn.__version__? Несмотря на то, что это исправлено для вас, было бы интересно узнать, откуда возникла проблема.
linusg 06

sklearn Out [2]: <модуль 'sklearn' из 'C: \ Users \ XYZ \ AppData \ Local \ Continuum \ Anaconda2 \ lib \ site-packages \ sklearn_ init_ .pyc'> sklearn .__ version__ Out [3]: '0.18 .2 ' Но это после того, как я запустил обновление Sklearn Conda
Алекс Кинман

Во всяком случае, хорошо, что теперь это работает для вас. Я не так часто использовал Anaconda, но, думаю, он не интегрируется с pip. Ответ отредактирован, все пользователи Anaconda будут знать :)
linusg 06


9

Я столкнулся с этой проблемой при импорте GridSearchCV.

Просто изменил sklearn.model_selectionна sklearn.grid_search.


6

У меня была такая же проблема при использовании Jupyter Notebook, независимо от того, что я обновлял в 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

у тебя есть склеарн? в противном случае сделайте следующее:

sudo pip install sklearn

После установки sklearn

from sklearn.model_selection import train_test_split

работает отлично


3

Чтобы установить scikit-learn версии 18.0, я использовал обе команды:

conda update scikit-learn

pip install -U scikit-learn

Но это не работает. Возникла проблема «Невозможно установить 'scikit-learn'. Это проект, установленный distutils, и поэтому мы не можем точно определить, какие файлы ему принадлежат, что привело бы только к частичному удалению».

Наконец, я могу установить его, используя следующую команду:

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_selection, а не под cross_validation

Чтобы проверить свою версию sklearn:

импорт sklearn print ( версия 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.