Использование GridSearchCV с AdaBoost и DecisionTreeClassifier

Я пытаюсь настроить классификатор AdaBoost ("ABT"), используя DecisionTreeClassifier ("DTC") в качестве base_estimator. Я хотел бы настроить и параметры ABT и DTC одновременно, но я не уверен, как это сделать - трубопровод не должен работать, так как я не "прокладываю" выход DTC на ABT. Идея заключалась бы в итерации гиперпараметров для ABT и DTC в оценке GridSearchCV.

Как правильно задать параметры настройки?

я попробовал следующее, что вызвало ошибку ниже.

[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)

1 ответов


в коде, который вы разместили, есть несколько ошибок:

  1. ключи param_grid словарь должен быть строками. Вы должны получить NameError.
  2. ключ "abc__n_estimators" должен быть просто "n_estimators": вы, вероятно, смешиваете это с синтаксисом конвейера. Здесь ничто не говорит Python, что строка " abc " представляет ваш AdaBoostClassifier.
  3. None (а не none) не является допустимым значением n_estimators. Значение по умолчанию (возможно что вы имели в виду) - это 50.

вот код с этими исправлениями. Для задания параметров древовидной оценки можно использовать синтаксис"__", позволяющий получить доступ к вложенным параметрам.

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')

кроме того, 1 или 2 оценки на самом деле не имеют смысла для AdaBoost. Но я предполагаю, что это не тот код, который вы используете.

надеюсь, что это помогает.