0

J'ai un jeu de données cible que je divise en 5 plis qui ne se chevauchent pas. A chaque itération (itérations totales == 5) j'utilise 1 fois (appelons-le fold_for_tuning) pour faire le réglage des paramètres, et j'utilise 4 fois pour tester.Les paramètres de GridSearchCV n'améliorent pas la classification

La raison de ceci est que je veux faire l'adaptation de domaine, et avant l'accord, j'ajuste les données de source au classificateur, et j'accorde en utilisant le petit sous-ensemble de données de cible).

J'appelle GridSearchCV et en forme fold_for_tuning, et aussi je passe un tas de paramètres que je veux régler:

param_test1 = { 
      'max_depth': [5, 7], 
      'min_child_weight': [0.5, 1, 2], 
      'gamma': [0.1, 1], 
      'subsample': [0.6, 0.7], 
      'colsample_bytree': [0.6, 0.7], 
      'reg_alpha': [0.01, 0.1] 
     } 

gsearch = GridSearchCV(estimator=classifierXGB, 
           param_grid=param_test1, 
           scoring='accuracy', 
           n_jobs=4, iid=False, cv=2) 

gsearch.fit(fold_for_tuning_data, fold_for_tuning_labels) 

Après chaque itération, je reçois gsearch.best_params_, et je les ai mis en classifierXGB (parce qu'ils devraient donner une meilleure prédiction, à ma connaissance). Puis, quand je l'appelle test_y_predicted = classifierXGB.predict(4_unseen_folds) je reçois pas d'amélioration:

prediction before tuning: 
acc: 0.690658872245 
auc: 0.700764301397 
f1: 0.679211922203 
prediction after tuning: 
acc: 0.691382460414 
auc: 0.701595887248 
f1: 0.680132554837 

Mais si je l'appellegsearch.predict(4_unseen_folds) Je reçois bien meilleure performance:

prediction grid search : 
acc: 0.933313032887 
auc: 0.930058979926 
f1: 0.920623414281 

Je suis confus: que se passe-t-il dans la recherche de grille? Ne devrait-il pas optimiser seulement les paramètres que je passe en param_grid? Si oui, alors pourquoi définir les mêmes paramètres dans classifierXGB ne se traduit pas par de meilleures performances?

+0

Comment appelez-vous 'itération'? Ce n'est pas clair – MMF

+0

Pouvez-vous montrer un [MWE] (http://stackoverflow.com/help/mcve) incluant ce que vous faites après 'gsearch.fit' s'il vous plait? – ncfirth

Répondre

0

Votre gsearch.predict(...) appel est la prédiction du meilleur classificateur.

Je ne suis pas sûr de ce qui se passe en arrière-plan de ClassifierXGB, mais si vous créez une nouvelle classifierXGB:

classifierXGB = ClassifierXGB(**gsearch.best_params_)` 

et puis appel classifierXGB.predict(4_unseen_folds) vous devriez voir quelque chose de similaire à gsearch.predict(4_unseen_folds).

Il se peut que l'application de modifications à classifierXGB après le fait ne fait pas ce que vous attendez. Créer une nouvelle instance de ClassifierXGB devrait aider.

0

Une fois que vous avez défini vos paramètres à votre classifierXGB, vous avez besoin pour l'adapter sur l'ensemble des données de train, puis, l'utiliser pour prédire les choses

La recherche de la grille a trouvé les paramètres « droit » , vous les avez donnés à votre classificateur pour qu'il apprenne efficacement, mais vous ne lui avez pas donné les arbres/poids réels du modèle. C'est encore une coquille vide.