web-dev-qa-db-fra.com

Utilisation de GridSearchCV avec AdaBoost et DecisionTreeClassifier

J'essaie de régler un classificateur AdaBoost ("ABT") en utilisant un DecisionTreeClassifier ("DTC") comme base_estimator. Je voudrais régler les deux paramètres ABT et DTC simultanément, mais je ne sais pas comment y parvenir - le pipeline ne devrait pas fonctionner, car je ne "redirige" pas la sortie de DTC vers ABT. L'idée serait d'itérer des hyper paramètres pour ABT et DTC dans l'estimateur GridSearchCV.

Comment spécifier correctement les paramètres de réglage?

J'ai essayé ce qui suit, ce qui a généré une erreur ci-dessous.

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

Il y a plusieurs erreurs dans le code que vous avez publié:

  1. Les clés du param_grid le dictionnaire doit être des chaînes. Vous devriez obtenir un NameError.
  2. La clé "abc__n_estimators" devrait simplement être "n_estimators": vous mélangez probablement cela avec la syntaxe du pipeline. Ici, rien ne dit Python que la chaîne "abc" représente votre AdaBoostClassifier.
  3. None (et non none) n'est pas une valeur valide pour n_estimators. La valeur par défaut (probablement ce que vous vouliez dire) est 50.

Voici le code avec ces correctifs. Pour définir les paramètres de votre estimateur d'arbre, vous pouvez utiliser la syntaxe "__" qui permet d'accéder aux paramètres imbriqués.

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

De plus, 1 ou 2 estimateurs n'ont pas vraiment de sens pour AdaBoost. Mais je suppose que ce n'est pas le code réel que vous utilisez.

J'espère que cela t'aides.

25
ldirer