AttributeError: 'SMOTE' object has no attribute '_validate_data'
AttributeError: 'SMOTE' object has no attribute '_validate_data'
我正在使用 SMOTE 对我的数据(多类)进行重采样。
sm = SMOTE(random_state=1)
X_res, Y_res = sm.fit_resample(X_train, Y_train)
但是,我收到此属性错误。有人可以帮忙吗?
欢迎来到 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
虽然更新 sklearn 对我也不起作用,但是设置一个新环境确实有效,正如答案中提到的 link https://github.com/scikit-learn-contrib/imbalanced-learn/issues/727 中提供的解决方案之一所建议的那样。
Up/Downgrading scikit-learn 不工作?
我的OS: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)
简答
您需要将 scikit-learn
升级到版本 0.23.1。
长答案
imbalanced-learn
的最新版本 0.7.0 似乎对 scikit-learn
v0.23.1 有未记录的依赖。如果您的 scikit-learn
为 0.22 或以下,它会给您 AttributeError: 'SMOTE' object has no attribute '_validate_data'
。
如果您使用 Anaconda
,安装 scikit-learn
版本 0.23.1 可能会很棘手。 conda update scikit-learn
可能不会更新 scikit-learn
版本 0.23 或更高版本,因为 Conda 目前拥有的最新 scikit-learn
版本是 0.22.1。如果您尝试使用 conda install scikit-learn=0.23.1
或 pip 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 中可用并且没有兼容性问题,您可以直接在基础环境中安装它。
收到的错误是:AttributeError:'SMOTE'对象没有属性'_validate_data'
根本原因:需要scikit-learn 0.23,但在conda - python 3.7中我们只有scikit-learn 0.22
解决方案:使用python3.6.8 创建虚拟环境并安装scikit-learn 0.23,如下所示
为 python 3.6.8
创建虚拟环境
PS C:\Users\harish\Documents> conda create -n myenv python=3.6.8
激活环境
PS C:\Users\harish\Documents> conda 激活 myenv
安装scikit-learn并在虚拟环境中学习
PS C:\Users\harish\Documents> pip 安装scikit-learn
PS C:\Users\harish\Documents> pip install imblearn --user
注意:这会更新 scikit-learn .... 收集 scikit-learn>=0.23
PS C:\Users\harish\Documents> conda 列表
注意:它应该是 0.23 ... scikit-learn 0.23.2 pypi_0 pypi
激活内核
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>猫kernel.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
步骤 1- 打开你的 jupyter notebook
步骤 2 - 输入 pip install --upgrade scikit-learn
步骤 3 - 重启内核
照原样按照所有步骤完成!!(已升级)
升级 sklearn 和 imblearn 对我有用
!pip install --upgrade scikit-learn
!pip install --upgrade imblearn
我正在使用 SMOTE 对我的数据(多类)进行重采样。
sm = SMOTE(random_state=1)
X_res, Y_res = sm.fit_resample(X_train, Y_train)
但是,我收到此属性错误。有人可以帮忙吗?
欢迎来到 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
虽然更新 sklearn 对我也不起作用,但是设置一个新环境确实有效,正如答案中提到的 link https://github.com/scikit-learn-contrib/imbalanced-learn/issues/727 中提供的解决方案之一所建议的那样。
Up/Downgrading scikit-learn 不工作?
我的OS: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)
简答
您需要将 scikit-learn
升级到版本 0.23.1。
长答案
imbalanced-learn
的最新版本 0.7.0 似乎对 scikit-learn
v0.23.1 有未记录的依赖。如果您的 scikit-learn
为 0.22 或以下,它会给您 AttributeError: 'SMOTE' object has no attribute '_validate_data'
。
如果您使用 Anaconda
,安装 scikit-learn
版本 0.23.1 可能会很棘手。 conda update scikit-learn
可能不会更新 scikit-learn
版本 0.23 或更高版本,因为 Conda 目前拥有的最新 scikit-learn
版本是 0.22.1。如果您尝试使用 conda install scikit-learn=0.23.1
或 pip install scikit-learn==0.23.1
安装它,您将进行大量的兼容性检查并且安装可能不会很快。因此,在 Anaconda 中安装 scikit-learn
版本 0.23.1 的最简单方法是使用最少的包创建一个新的虚拟环境,这样就很少或没有冲突问题。然后,在新的虚拟环境中安装 scikit-learn
版本 0.23.1,然后安装 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 中可用并且没有兼容性问题,您可以直接在基础环境中安装它。
收到的错误是:AttributeError:'SMOTE'对象没有属性'_validate_data'
根本原因:需要scikit-learn 0.23,但在conda - python 3.7中我们只有scikit-learn 0.22
解决方案:使用python3.6.8 创建虚拟环境并安装scikit-learn 0.23,如下所示
为 python 3.6.8
创建虚拟环境PS C:\Users\harish\Documents> conda create -n myenv python=3.6.8
激活环境
PS C:\Users\harish\Documents> conda 激活 myenv
安装scikit-learn并在虚拟环境中学习
PS C:\Users\harish\Documents> pip 安装scikit-learn PS C:\Users\harish\Documents> pip install imblearn --user 注意:这会更新 scikit-learn .... 收集 scikit-learn>=0.23 PS C:\Users\harish\Documents> conda 列表 注意:它应该是 0.23 ... scikit-learn 0.23.2 pypi_0 pypi
激活内核
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>猫kernel.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
步骤 1- 打开你的 jupyter notebook
步骤 2 - 输入 pip install --upgrade scikit-learn
步骤 3 - 重启内核
照原样按照所有步骤完成!!(已升级)
升级 sklearn 和 imblearn 对我有用
!pip install --upgrade scikit-learn
!pip install --upgrade imblearn