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)
Il y a plusieurs erreurs dans le code que vous avez publié:
param_grid
le dictionnaire doit être des chaînes. Vous devriez obtenir un NameError
.AdaBoostClassifier
.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.