Использование GridSearchCV с помощью AdaBoost и DecisionTreeClassifier
Я пытаюсь настроить классификатор AdaBoost ( "ABT" ) с помощью DecisionTreeClassifier ( "DTC" ) в качестве базового_источника. Я хотел бы настроить оба параметры 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
В коде, который вы опубликовали, есть несколько ошибок:
- Ключом словаря
param_grid
должны быть строки. Вы должны получить NameError
.
- Ключом "abc__n_estimators" должен быть только "n_estimators": вы, вероятно, смешиваете это с синтаксисом конвейера. Здесь ничто не говорит Python, что строка "abc" представляет ваш
AdaBoostClassifier
.
-
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. Но я предполагаю, что это не тот код, который вы используете.
Надеюсь, что это поможет.