AttributeError:“ SMOTE”对象没有属性“ _validate_data”

时间:2020-06-17 18:48:35

标签: python scikit-learn imbalanced-data imblearn

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

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

但是,我遇到此属性错误。有人可以帮忙吗?

7 个答案:

答案 0 :(得分:8)

简短答案

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

好答案

imbalanced-learn的最新版本0.7.0似乎与scikit-learn v0.23.1无关。如果您的AttributeError: 'SMOTE' object has no attribute '_validate_data'为0.22或更低,它将为您提供scikit-learn

如果您使用的是Anaconda,则安装scikit-learn版本0.23.1可能会比较棘手。 conda update scikit-learn可能不会更新0.23或更高版本的scikit-learn,因为Conda在这个时间点拥有的最新scikit-learn版本是0.22.1。如果尝试使用conda install scikit-learn=0.23.1pip install scikit-learn==0.23.1进行安装,将会获得大量的兼容性检查,并且安装可能不会很快。因此,在Anaconda中安装scikit-learn版本0.23.1的最简单方法是使用最少的软件包创建一个新的虚拟环境,以使冲突问题更少或没有。然后,在新的虚拟环境中安装scikit-learn版本0.23.1,然后安装imbalanced-learn的版本0.7.0。

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 :(得分:2)

步骤1 -打开Jupyter笔记本

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

第3步 -重新启动内核

按照原样执行所有步骤!!(升级)

答案 2 :(得分:1)

欢迎您!对于下一个这样的问题,您可能需要包括正在使用的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

答案 3 :(得分:1)

尽管更新sklearn对我也不起作用,但是按照答案中提到的链接https://github.com/scikit-learn-contrib/imbalanced-learn/issues/727中提供的一种解决方案中的建议,设置一个新环境确实可以实现。

答案 4 :(得分:1)

上/降级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 -您将需要在系统中已安装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)

答案 5 :(得分:0)

收到的错误为: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激活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>康达列表 注意:应该是0.23 ... scikit-learn 0.23.2 pypi_0 pypi

  4. 激活内核

    PS C:\ Users \ harish \ Documents> python -m ipykernel安装--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内核>>新环境

答案 6 :(得分:0)

升级 sklearn 和 imblearn 对我有用

!pip install --upgrade scikit-learn
!pip install --upgrade imblearn