18

我正在使用 SMOTE 重新采样我的数据(多类)。

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

但是,我收到此属性错误。任何人都可以帮忙吗?

4

7 回答 7

18

简短的回答

您需要升级scikit-learn到版本 0.23.1。

长答案

最新版本 0.7.0imbalanced-learn似乎对scikit-learnv0.23.1 有未记录的依赖。AttributeError: 'SMOTE' object has no attribute '_validate_data'如果你scikit-learn是 0.22 或以下,它会给你。

如果您正在使用Anaconda,安装scikit-learn0.23.1 版本可能会很棘手。conda update scikit-learn可能不会更新scikit-learn0.23 或更高版本,因为scikit-learnConda 目前的最新版本是 0.22.1。如果您尝试使用conda install scikit-learn=0.23.1or安装它pip install scikit-learn==0.23.1,您将获得大量的兼容性检查,并且安装可能不会很快。因此,scikit-learn在 Anaconda 中安装 0.23.1 版本的最简单方法是使用最少的软件包创建一个新的虚拟环境,从而减少或没有冲突问题。然后,在新的虚拟环境中安装scikit-learn0.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-learn0.23.1 版本在 Conda 中可用并且没有兼容性问题,您可以直接在基础环境中安装它。

于 2020-07-30T04:38:06.267 回答
5

第 1 步- 打开你的 jupyter 笔记本

第 2 步- 键入 pip install --upgrade scikit-learn

第 3 步- 重新启动内核

照原样按照所有步骤完成!(升级)

于 2020-08-28T13:18:11.610 回答
3

欢迎来到 SO!对于像这样的下一个问题,您可能需要包含您正在使用的 python、sklearn 和 imblearn 的版本。

我自己也遇到了同样的问题,开发人员已经注意到了: https ://github.com/scikit-learn-contrib/imbalanced-learn/issues/727

可能想关注此页面以查看在接下来的几天内是否发布了解决方案。这似乎是关于安装 imblearn 后没有正确清理 sklearn 库。

更新
这可以通过将您的 sklearn 更新到 0.23 或更高版本来解决。这应该可以通过以下任一方式为您实现:
pip update scikit-learn

conda update scikit-learn

于 2020-06-18T16:13:54.427 回答
1

尽管更新 sklearn 对我也不起作用,但是设置一个新环境确实如此,正如链接https://github.com/scikit-learn-contrib/imbalanced-learn/issues/中提供的解决方案之一中所建议的那样727在答案中提到。

于 2020-06-25T23:55:33.447 回答
1

升/降级 scikit-learn 不起作用?

我的操作系统:Ubuntu MATE 18.04 x64

遇到同样的问题并尝试了其他解决方案无济于事。

我最初使用python 3.7.7并通过使用python 3.6.8来使其工作。

蟒蛇

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

VirtualEnv -你需要已经在你的系统上安装了 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)
于 2020-06-30T19:29:46.183 回答
1

收到的错误是:AttributeError:“SMOTE”对象没有属性“_validate_data”

根本原因:需要 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 activate myenv

  3. 在虚拟环境中安装 scikit-learn 和 imblearn

    PS C:\Users\harish\Documents> pip install scikit-learn PS C:\Users\harish\Documents> pip install imblearn --user 注意:这更新 scikit-learn .... 收集 scikit-learn>=0.23 PS C:\Users\harish\Documents> conda list 注意:它应该是 0.23 ... scikit-learn 0.23.2 pypi_0 pypi

  4. 激活内核

    PS C:\Users\harish\Documents> python -m ipykernel install --user --name=myenv 在 C:\Users\harish\AppData\Roaming\jupyter\kernels\myenv 中安装 kernelspec myenv PS C:\Users\harish \Documents> cd C:\Users\harish\AppData\Roaming\jupyter\kernels\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 kernel.json

{
 "argv": [
  "C:\\Users\\harish\\Anaconda3\\python.exe",
  "-m",
  "ipykernel_launcher",
  "-f",
  "{connection_file}"
 ],
 "display_name": "myenv",
 "language": "python"
}
  1. 在您正在工作的笔记本中,内核>>Cange Kernel >> New Env
于 2020-08-23T11:02:51.973 回答
1

升级 sklearn 和 imblearn 对我有用

!pip install --upgrade scikit-learn
!pip install --upgrade imblearn
于 2021-07-10T16:49:58.057 回答