#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__)
и просмотрите результат. Если выходные данные указывают на вашу версию pythonsite-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
Вы также можете просто обновить пакет до последней версии с помощью предпочитаемой вами системы управления пакетами.
Я надеюсь, что это полезно.