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)
1 réponses
Il y a plusieurs choses qui cloche dans le code que vous avez posté:
- les touches du
param_grid
dictionnaire doivent être des chaînes de caractères. Vous devriez avoir unNameError
. - 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
. None
(et nonnone
) n'est pas une valeur valide pourn_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.