【问题标题】:AttributeError: 'SMOTE' object has no attribute '_validate_data'AttributeError:“SMOTE”对象没有属性“_validate_data”
【发布时间】:2020-10-07 16:47:27
【问题描述】:

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

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

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

【问题讨论】:

    标签: python scikit-learn imbalanced-data imblearn


    【解决方案1】:

    升级 sklearn 和 imblearn 对我有用

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

    【讨论】:

      【解决方案2】:

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

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

      第 3 步 - 重启内核

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

      【讨论】:

      • 是的,而不是创建一个新的环境更新scikit学习并重新启动内核
      【解决方案3】:

      收到的错误是: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> conda 列表 注意:它应该是 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

      【讨论】:

        【解决方案4】:

        简答

        您需要将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.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 中可用并且没有兼容性问题,您可以直接在基础环境中安装它。

        【讨论】:

          【解决方案5】:

          升级/降级 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)
          

          【讨论】:

            【解决方案6】:

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

            【讨论】:

            • 请在此处写下步骤以供快速参考 .. 也会让您获得更多支持 ..
            【解决方案7】:

            欢迎来到 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

            【讨论】:

            • 这并不能解决问题。
            • conda update scikit-learn 不起作用,因为 sklearn 的最新版本是 conda main 上的 0.22.1
            猜你喜欢
            • 2021-05-27
            • 1970-01-01
            • 2022-07-13
            • 2020-10-04
            • 2020-10-29
            • 2020-10-25
            • 2020-04-14
            • 2012-12-01
            相关资源
            最近更新 更多