AttributeError: объект 'SMOTE' не имеет атрибута '_validate_data' - PullRequest
5 голосов
/ 17 июня 2020

Я передискретизирую свои данные (мультикласс) с помощью SMOTE.

sm = SMOTE(random_state=1)
X_res, Y_res = sm.fit_resample(X_train, Y_train)

Однако я получаю ошибку этого атрибута. Кто-нибудь может помочь?

Ответы [ 6 ]

2 голосов
/ 30 июля 2020

Короткий ответ

Вам необходимо обновить scikit-learn до версии 0.23.1.

Длинный ответ

Последняя версия 0.7.0 imbalanced-learn, похоже, имеет недокументированную зависимость от scikit-learn v0.23.1. Это даст вам AttributeError: 'SMOTE' object has no attribute '_validate_data', если ваш scikit-learn равен 0,22 или ниже.

Если вы используете Anaconda, установка scikit-learn версии 0.23.1 может оказаться сложной задачей. conda update scikit-learn может не обновлять scikit-learn версию 0.23 или выше, потому что самая новая scikit-learn версия, которую имеет Conda на данный момент, - это 0.22.1. Если вы попытаетесь установить его, используя conda install scikit-learn=0.23.1 или pip install scikit-learn==0.23.1, вы получите множество проверок совместимости, и установка может быть не быстрой. Поэтому самый простой способ установить scikit-learn версии 0.23.1 в Anaconda - это создать новую виртуальную среду с минимальным количеством пакетов, чтобы было меньше или не было проблем с конфликтами. Затем в новой виртуальной среде установите scikit-learn версию 0.23.1, а затем версию 0.7.0 из imbalanced-learn.

conda create -n test python=3.7.6
conda activate test
pip install scikit-learn==0.23.1
pip install imbalanced-learn==0.7.0

Наконец, вам необходимо переустановить IDE в новой виртуальной среде, чтобы для использования этих пакетов.

Однако, как только scikit-learn версия 0.23.1 станет доступной в Conda и не возникнет проблем с совместимостью, вы сможете установить ее напрямую в базовую среду.

1 голос
/ 30 июня 2020

Повышение / понижение версии scikit-learn не работает?

Моя ОС: Ubuntu MATE 18.04 x64

Была такая же проблема, и другие решения безрезультатно пробовали.

Я был изначально использовал python 3.7.7, а вместо этого он работал, используя python 3.6.8.

Anaconda

conda create -n myenv python=3.6.8
conda activate myenv
pip install scikit-learn
pip install imblearn

VirtualEnv - you вам потребуется python 3.6.8, уже установленная на вашей системе

virtualenv --python=python3.6 myenv
source myenv/bin/activate
pip install scikit-learn
pip install imblearn

проверить версии

import sklearn
sklearn.__version__
>>> '0.23.1'
import imblearn
imblearn.__version__
>>> '0.7.0'

...
# Now works
X_res, Y_res = sm.fit_resample(X_train, Y_train)
1 голос
/ 26 июня 2020

хотя обновление sklearn также не сработало для меня, однако настройка новой среды сработала, как было предложено в одном из решений, представленных в ссылке https://github.com/scikit-learn-contrib/imbalanced-learn/issues/727, упомянутой в ответе.

1 голос
/ 18 июня 2020

Добро пожаловать в SO! Для следующего подобного вопроса вы, вероятно, захотите включить версии python, sklearn и imblearn, которые вы используете.

Я сам столкнулся с той же проблемой, и разработчики ее заметили: https://github.com/scikit-learn-contrib/imbalanced-learn/issues/727

Возможно, вы захотите подписаться на эту страницу, чтобы узнать, опубликовано ли решение в следующие несколько дней. Похоже, что библиотека sklearn не очищается должным образом после установки imblearn.

ОБНОВЛЕНИЕ
Это можно исправить, обновив ваш sklearn до версии 0.23 или выше. Это должно быть возможно через:
pip update scikit-learn
ИЛИ
conda update scikit-learn

0 голосов
/ 28 августа 2020

Шаг 1 - Откройте свой блокнот jupyter

Шаг 2 - введите pip install --upgrade scikit -learn

Шаг 3 - Перезагрузите ядро ​​

Выполните все шаги, как есть, и готово !! (обновлено)

0 голосов
/ 23 августа 2020

Получена ошибка : AttributeError: объект 'SMOTE' не имеет атрибута '_validate_data'

Root Причина : Требуется scikit-learn 0.23, но в conda - python 3.7 у нас есть только scikit-learn 0.22

Решение : создайте виртуальную среду с python3 .6.8 и установите scikit-learn 0.23, как показано ниже

  1. Создание виртуального окружения для python 3.6.8

    PS C: \ Users \ harish \ Documents> conda create -n myenv python = 3.6.8

  2. Активировать среду

    PS C: \ Users \ harish \ Documents> conda активировать myenv

  3. Установите scikit-learn и imblearn в виртуальная среда

    PS C: \ Users \ harish \ Documents> pip install scikit-learn PS C: \ Users \ harish \ Documents> pip install imblearn - ПРИМЕЧАНИЕ пользователя: это обновляет scikit-learn .... Сбор scikit-learn> = 0.23 PS C: \ Users \ harish \ Documents> conda list ПРИМЕЧАНИЕ: должно быть 0,23 ... scikit-learn 0.23.2 pypi_0 pypi * 102 9 *

  4. Активировать ядро ​​

    PS C: \ Users \ harish \ Documents> python -m ipykernel install --user --name = myenv Установленное ядро ​​c myenv в C: \ Users \ harish \ AppData \ Roaming \ jupyter \ kernels \ myenv PS C: \ Users \ harish \ Documents> cd C: \ Users \ harish \ AppData \ Roaming \ jupyter \ ядра \ myenv

PS C: \ Users \ harish \ AppData \ Roaming \ jupyter \ kernels \ myenv> ls

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        8/23/2020   6:41 PM            185 kernel.json
-a----        1/28/2020   2:18 AM           1084 logo-32x32.png
-a----        1/28/2020   2:18 AM           2180 logo-64x64.png

PS C: \ Users \ harish \ AppData \ Roaming \ jupyter \ kernels \ myenv> ядро ​​cat. json

{
 "argv": [
  "C:\\Users\\harish\\Anaconda3\\python.exe",
  "-m",
  "ipykernel_launcher",
  "-f",
  "{connection_file}"
 ],
 "display_name": "myenv",
 "language": "python"
}
В Notebook вы работаете: Kernel >> Cange Kernel >> New Env
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...