sklearn gradientboostingclassifier example python scikit-learn decision-tree adaboost grid-search

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:

  1. Las claves del diccionario param_grid deben ser cadenas. Deberías obtener un NameError .
  2. 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 .
  3. None (y no none ) no es un valor válido para n_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.