我正在尝试使用DecisionTreeClassifier(“DTC”)作为base_estimator来调整AdaBoost分类器(“ABT”)。我想同时调整 ABT和DTC参数,但是我不确定如何完成此操作-管道不起作用,因为我没有将DTC的输出“插入” ABT。这个想法是在GridSearchCV估计器中迭代ABT和DTC的超参数。

如何正确指定调整参数?

我尝试了以下操作,这在下面产生了错误。

[IN]
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import AdaBoostClassifier
from sklearn.grid_search import GridSearchCV

param_grid = {dtc__criterion : ["gini", "entropy"],
              dtc__splitter :   ["best", "random"],
              abc__n_estimators: [none, 1, 2]
             }


DTC = DecisionTreeClassifier(random_state = 11, max_features = "auto", class_weight = "auto",max_depth = None)

ABC = AdaBoostClassifier(base_estimator = DTC)

# run grid search
grid_search_ABC = GridSearchCV(ABC, param_grid=param_grid, scoring = 'roc_auc')

[OUT]
ValueError: Invalid parameter dtc for estimator AdaBoostClassifier(algorithm='SAMME.R',
      base_estimator=DecisionTreeClassifier(class_weight='auto', criterion='gini', max_depth=None,
        max_features='auto', max_leaf_nodes=None, min_samples_leaf=1,
        min_samples_split=2, min_weight_fraction_leaf=0.0,
        random_state=11, splitter='best'),
      learning_rate=1.0, n_estimators=50, random_state=11)

最佳答案

您发布的代码中有几处错误:

  • param_grid字典的键必须是字符串。您应该得到一个NameError
  • 键“abc__n_estimators”应该只是“n_estimators”:您可能将其与管道语法混合使用。这里没有任何内容告诉Python字符串“abc”代表您的AdaBoostClassifier
  • None(而不是none)不是n_estimators的有效值。默认值(可能是您的意思)是50。

  • 这是带有这些修复程序的代码。
    要设置Tree估算器的参数,可以使用“__”语法,该语法允许访问嵌套参数。
    from sklearn.tree import DecisionTreeClassifier
    from sklearn.ensemble import AdaBoostClassifier
    from sklearn.grid_search import GridSearchCV
    
    param_grid = {"base_estimator__criterion" : ["gini", "entropy"],
                  "base_estimator__splitter" :   ["best", "random"],
                  "n_estimators": [1, 2]
                 }
    
    
    DTC = DecisionTreeClassifier(random_state = 11, max_features = "auto", class_weight = "auto",max_depth = None)
    
    ABC = AdaBoostClassifier(base_estimator = DTC)
    
    # run grid search
    grid_search_ABC = GridSearchCV(ABC, param_grid=param_grid, scoring = 'roc_auc')
    

    另外,对于AdaBoost而言,1或2个估算器实际上没有任何意义。但是我猜这不是您正在运行的实际代码。

    希望这可以帮助。

    08-25 04:47