IPython (python 2) — Ошибка импорта: нет модуля с именем model_selection

#python #scikit-learn #ipython #sklearn-pandas

#python #scikit-learn #ipython #sklearn-pandas

Вопрос:

IPython Notebook Python 2

Жалуюсь на эту строку:

 from sklearn.model_selection import train_test_split
  

Почему выбор модели не работает?

Комментарии:

1. У вас случайно нет скрипта с именем sklearn.py в вашем рабочем каталоге? Возможно, вы импортируете из этого скрипта вместо фактического sklearn пакета.

2. Насколько я знаю, я этого не делаю

3. Запустите import sklearn; print(sklearn.__file__) и просмотрите результат. Если выходные данные указывают на вашу версию python site-packages , значит, что-то не так, как вы установили sklearn . В этом случае вам, вероятно, потребуется его переустановить. В противном случае, если ваш вывод — это что угодно, кроме site-packages , то вы импортируете какой-то скрипт куда-то, который не является самим модулем. В таком случае вашим быстрым решением было бы сначала выйти из консоли, переименовать этот скрипт, вернуться к своей консоли и повторить попытку.

4. Вывод: /Users/******/anaconda/lib/python2.7/site-packages/sklearn/__init__.pyc

5. Помимо полной переустановки пакета, я бы посоветовал проверить версию пакета, чтобы убедиться, что она актуальна. Если вы используете номер версии ( sklearn.__version__ ) ниже 0.18 , то вам придется использовать старый cross_validation модуль вместо model_selection модуля. В принципе from sklearn.cross_validation import train_test_split .

Ответ №1:

Чтобы устранить эту проблему, вам нужно сначала выяснить, импортируете ли вы фактический sklearn пакет, а не просто какой-то скрипт с именем sklearn.py , сохраненным где-то в вашем рабочем каталоге. Способ импорта модулей Python несколько похож на способ поиска переменных в своем пространстве имен ( Local , Enclosed , Global , Built-in ) . В этом случае Python начнет импортировать модуль, сначала просмотрев текущий каталог, а затем site-packages . Если он просматривает текущий рабочий каталог и находит скрипт python с тем же именем, что и модуль, который вы пытаетесь импортировать, тогда он импортирует этот скрипт вместо фактического модуля.

Обычно вы можете узнать, импортирован ли фактический модуль, проверив его __file__ __path__ атрибут or:

 import sklearn

print(sklearn.__file__)
print(sklearn.__path__)
  

Просмотр выходных данных этих операторов печати покажет вам, является ли импортированный пакет тем модулем, который вам нужен, или просто каким-то скриптом, лежащим где-то в вашем рабочем каталоге. Если, в случае, вывод не указывает на site-packages вашу версию Python, значит, вы импортировали какой-то скрипт, который не является самим модулем. Вашим быстрым решением было бы сначала выйти из консоли, переименовать .py скрипт и его скомпилированную версию ( .pyc файл), вернуться к консоли и повторить попытку.

Однако, если выходные данные указывают на пакеты сайта вашей версии python, значит, что-то не так с тем, как пакет был установлен в первую очередь. В этом случае вам, вероятно, потребуется обновить или переустановить его.

В частности, выясняется, что проблема связана с sklearn используемой вами версией; потому model_selection что модуль в sklearn доступен в версиях 0.18 . Если вы используете номер версии ( sklearn.__version__ ) ниже 0.18 , то вам придется использовать старый cross_validation модуль вместо model_selection модуля:

 from sklearn.cross_validation import train_test_split
  

Вы также можете просто обновить пакет до последней версии с помощью предпочитаемой вами системы управления пакетами.

Я надеюсь, что это полезно.