【问题标题】:Trying to use imblearn.pipeline with RandomOverSampler and DecisionTreeClassifier尝试将 imblearn.pipeline 与 RandomOverSampler 和 DecisionTreeClassifier 一起使用
【发布时间】:2020-10-10 19:47:16
【问题描述】:

我正在尝试使用 GridSearchCV 设置 DecisionTreeClassifiers 的超参数,并且由于我的数据不平衡,我正在尝试使用 imblearn.over_sampling.RandomOverSampler。

from imblearn.over_sampling import RandomOverSampler

dtpass = tree.DecisionTreeClassifier()
pipe1 = Pipeline([('sampling', RandomOverSampler()), ('class', dtpass)])

parameters = {'class__max_depth': range(3,7), 
          'class__ccp_alpha': np.arange(0, 0.001, 0.00025), 
          'class__min_samples_leaf' : [50]
         }

dt2 = GridSearchCV(estimator = pipe1, 
               param_grid = parameters,
               n_jobs = 4,
              scoring = 'roc_auc'
)

dt2.fit(x, y)

这会返回一个错误:

AttributeError: 'RandomOverSampler' object has no attribute '_validate_data'

我在这里做错了什么?

编辑:下面发布的解决方案

【问题讨论】:

    标签: python scikit-learn imblearn


    【解决方案1】:

    试试这个:

    from imblearn.over_sampling import RandomOverSampler
    from sklearn.tree import DecisionTreeClassifier
    from imblearn.pipeline import make_pipeline
    from sklearn.model_selection import GridSearchCV
    import numpy as np
    
    dtpass = DecisionTreeClassifier()
    sampling=RandomOverSampler()
    
    
    pipe1=make_pipeline(sampling,dtpass)
    # pipe1 = Pipeline([('sampling', RandomOverSampler()), ('class', dtpass)])
    
    parameters = {'class__max_depth': range(3,7), 
              'class__ccp_alpha': np.arange(0, 0.001, 0.00025), 
              'class__min_samples_leaf' : [50]
             }
    
    dt2 = GridSearchCV(estimator = pipe1, 
                   param_grid = parameters,
                   n_jobs = 4,
                  scoring = 'roc_auc'
    )
    
    dt2.fit(x, y)
    

    【讨论】:

    • 谢谢!您的回答激发了我采取不同的方法,这使我深入研究了主要问题。解决方案是重新安装不平衡的包。
    • 是的,我怀疑您有问题,因为我没有遇到您的错误。相反,我发现RandomOverSampler 与来自sklearnPipeline 对象不兼容,因为它没有fittransform 方法。所以我使用了 imblearn 的make_pipeline,效果很好。
    【解决方案2】:

    链接到需要大量谷歌搜索的解决方案页面:

    https://makerspace.aisingapore.org/community/ai4i-5-supervised-learning/encountered-attributeerror-when-run-train_test_splitpreprocessed_data-output_var-after-randomoversampler/

    解决办法是

     pip install -U imbalanced-learn
    

    而不是

     conda install -c conda-forge imbalanced-learn
    

    【讨论】:

      猜你喜欢
      • 2015-11-19
      • 2013-02-17
      • 2011-12-25
      • 2012-11-22
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-21
      相关资源
      最近更新 更多