Ошибка импорта: нет модуля с именем sklearn.cross_validation

174

Я использую Python 2.7 в Ubuntu 14.04. Я установил scikit-learn, numpy и matplotlib с помощью следующих команд:

sudo apt-get install build-essential python-dev python-numpy \
python-numpy-dev python-scipy libatlas-dev g++ python-matplotlib \
ipython

Но когда я импортирую эти пакеты:

from sklearn.cross_validation import train_test_split

Это возвращает мне эту ошибку:

ImportError: No module named sklearn.cross_validation

Что мне нужно сделать?

arthurckl
источник
возможно, ваше имя модуля неверно, если вы правильно установили sklearn и anaconda.
CKM
11
Я действительно просто повторяю это, но теперь вы должны использовать sklearn.model_selection. cross_validation не используется, так как sklearn 20+
Михал Микулаши,

Ответы:

584

Он должен относиться к переименованию и устаревания из cross_validationсуб-модуля в model_selection. Попробуйте заменить cross_validationнаmodel_selection

Дима Литуев
источник
8
Это определенно должен быть выбранный ответ
rhys_jsk
Это должен быть принятый ответ. Мало того, что это работает, но голоса более 200 к 4 на момент моего поста.
Джерри Дестремпс
Почему разработчики sklearn не добавили псевдоним для обратной совместимости? Кроме того, документ для этой старой версии должен указывать этот рефакторинг: scikit-learn.org/0.16/modules/generated/… .
flow2k
работал как шарм
omah94
139

train_test_split теперь находится в model_selection. Просто введите:

from sklearn.model_selection import train_test_split

он должен работать

аят ульлах сони
источник
43

Я думаю, что перекрестный выбор больше не активен. Мы должны использовать вместо выбора модели. Вы можете написать это для запуска,from sklearn.model_selection import train_test_split

Это оно.

Мурат Шахин
источник
Это ответ. Ты обалденный.
Biswajit Panday
35

Убедитесь, что у вас установлена Anaconda, а затем создайте virtualenv с помощью conda . Это обеспечит работу всего импорта

Python 2.7.9 |Anaconda 2.2.0 (64-bit)| (default, Mar  9 2015, 16:20:48) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Anaconda is brought to you by Continuum Analytics.
Please check out: http://continuum.io/thanks and https://binstar.org
>>> from sklearn.cross_validation import train_test_split
Ричард Рублев
источник
Нет, у меня его нет, мне нужно установить Anaconda?
Артуркль
Ну, я бы посоветовал вам установить его. Но вы также можете попробовать sudo apt-get install python-sklearn, который должен работать.
Ричард Рублев
7
Ответ @DimaLituiev действительно правильный ответ здесь. Эта проблема в основном связана с переименованием, а не с отсутствующим пакетом.
Амриндер Арора
2
Это не обязательно нужно. Вы предлагаете установить новую среду только для одного пакета, который был переименован, я бы сказал, что это решение является излишним. Решение Димы должно быть помечено как правильный ответ
MuhsinFatih
Я предполагаю, что вопрос должен был быть решен, работал ли он "импортировать sklearn" сначала или нет. Если это работает, возможно, это не проблема с именами.
ю.
24

sklearn.cross_validation теперь изменен на sklearn.model_selection

Просто используйте

from sklearn.model_selection import train_test_split

Я думаю, что это сработает.

Танмой Боумик
источник
15

Может быть, это связано с устареванием sklearn.cross_validation. Пожалуйста, замените sklearn.cross_validation на sklearn.model_selection

Ссылка - https://github.com/amueller/scipy_2015_sklearn_tutorial/issues/60

nantitv
источник
1
Похоже, ваш ответ совпадает с предыдущим в той же теме. Если вы считаете, что этот ответ можно улучшить, попробуйте отредактировать его, а не делать новый ответ на тот же вопрос.
Йохан
@Johan Некоторые, как я не видел другой ответ. Я мог бы удалить свой ответ, если вы предпочитаете.
Нантитв
12

Разделение набора данных на тренировочный набор и тестовый набор

from sklearn.model_selection import train_test_split
ROHAN YEOLE
источник
2
То же решение, что и в ответе аят ульлы сони.
Эрик Айя
9

В прошлом: from sklearn.cross_validation (Этот пакет устарел в версии 0.18, начиная с версии 0.20, он заменен наfrom sklearn import model_selection ).

Настоящее время: from sklearn import model_selection

Пример 2:

Прошлое : from sklearn.cross_validation import cross_val_score (версия 0.18 устарела)

Настоящее время : from sklearn.model_selection import cross_val_score

Бая Пракаш Редди
источник
7

sklearn.cross_validation теперь изменен на sklearn.model_selection

Просто поменяй

sklearn.cross_validation

в

sklearn.model_selection
Сани Камаль
источник
4

изменить код, как это

# from sklearn.cross_validation import train_test_split
from sklearn.model_selection import train_test_split
Мухаммед Шабин
источник
4

Если у вас есть код для запуска различных версий, вы можете сделать что-то вроде этого:

import sklearn
if sklearn.__version__ > '0.18':
    from sklearn.model_selection import train_test_split
else:
    from sklearn.cross_validation import train_test_split

Это не идеально, потому что вы сравниваете версии пакетов как строки, что обычно работает, но не всегда. Если вы хотите установить packaging, это гораздо лучший подход:

from packaging.version import parse
import sklearn
if parse(sklearn.__version__) > parse('0.18'):
    from sklearn.model_selection import train_test_split
else:
    from sklearn.cross_validation import train_test_split
jss367
источник
2

cross_validation устарела некоторое время назад, попробуйте выключить его с помощью model_selection

Аникет Мукерджи
источник
попробуйте добавить больше объяснения к вашему ответу, чтобы придать ему большую ценность.
Зейна
2

train_test_splitявляется частью модуля sklearn.model_selection, следовательно, вам может понадобиться импортировать модуль изmodel_selection

Код:

from sklearn.model_selection import train_test_split
decision_scientist_noah
источник
0

Либо нам нужно понизить Scikit-Learn до последней совместимой версии. И это можно сделать после активации среды conda. Используйте следующие команды, чтобы понизить scikit-learn:

pip uninstall scikit-learn
pip install scikit-learn==0.19.2

ИЛИ

Когда мы не хотим понизить курс науки - учимся. Тогда мы все знали, что имя "cross_validation" устарело в новых версиях scikit-learn и было заменено на "model_selection" в новой версии anaconda. Поэтому мы можем получить предупреждение или даже ошибку.

Чтобы избежать этого, нам просто нужно заменить:

from sklearn.cross_validation import train_test_split

в

from sklearn.model_selection import train_test_split 

Надеюсь, это поможет решить проблему.

С Хабиб Улла
источник