python - gradientboostingclassifier - Usando GridSearchCV con AdaBoost y DecisionTreeClassifier
adaboost sklearn example (1)
Estoy intentando sintonizar un clasificador de AdaBoost ("ABT") utilizando un DecisionTreeClassifier ("DTC") como base_estimator. Me gustaría ajustar los parámetros ABT y DTC de forma simultánea, pero no estoy seguro de cómo hacerlo. La tubería no debería funcionar, ya que no estoy "canalizando" la salida de DTC a ABT. La idea sería iterar los parámetros hiper para ABT y DTC en el estimador GridSearchCV.
¿Cómo puedo especificar los parámetros de ajuste correctamente?
Intenté lo siguiente, lo que generó un error a continuación.
[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)
Hay varias cosas incorrectas en el código que publicaste:
- Las claves del diccionario
param_grid
deben ser cadenas. Deberías obtener unNameError
. - La clave "abc__n_estimators" debería ser simplemente "n_estimators": probablemente esté mezclando esto con la sintaxis de la tubería. Aquí nada le dice a Python que la cadena "abc" representa su
AdaBoostClassifier
. -
None
(y nonone
) no es un valor válido paran_estimators
. El valor predeterminado (probablemente lo que quiso decir) es 50.
Aquí está el código con estas correcciones. Para configurar los parámetros de su estimador de árbol, puede utilizar la sintaxis "__" que le permite acceder a los parámetros anidados.
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'')
Además, 1 o 2 estimadores realmente no tienen sentido para AdaBoost. Pero supongo que este no es el código real que está ejecutando.
Espero que esto ayude.