Utiliser GridSearchCV avec AdaBoost et DecisionTreeClassifier

je tente d'accorder un classificateur AdaBoost ("ABT") en utilisant un classificateur DecisionTreeClassifier ("DTC") comme estimateur de base. Je voudrais tune paramètres ABT et DTC simultanément, mais je ne suis pas sûr de la façon d'accomplir ceci - pipeline ne devrait pas fonctionner, car je ne suis pas "piping" la sortie de DTC à ABT. L'idée serait d'itérer les paramètres hyper pour ABT et DTC dans l'estimateur GridSearchCV.

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

j'ai essayé ce qui suit, 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)
17
demandé sur GPB 2015-08-25 20:37:49

1 réponses

Il y a plusieurs choses qui cloche dans le code que vous avez posté:

  1. les touches du param_grid dictionnaire doivent être des chaînes de caractères. Vous devriez avoir 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 de 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 vrai code que vous utilisez.

J'espère que cela vous aidera.

16
répondu ldirer 2015-08-25 21:03:49