[PYTHON] Hyper réglage des paramètres avec LightGBM Tuner

introduction

Je voudrais essayer de régler les hyper paramètres d'Optuna en utilisant les données de la dernière fois que j'ai fait kaggle. Les données sont décrites dans Article précédent.

optuna a été développé par Preferred Networks et règle automatiquement les hyper paramètres. En particulier, lorsqu'il s'agit de régler LightGBM, il effectue une recherche additive, par opposition à une recherche de grille multipliant la recherche. Par exemple, n_estimators = [50, 100, 150], mad_depth = [10, 15, 20] Supposons que vous souhaitiez trouver les meilleurs paramètres. Pour la recherche de grille, répétez 9 essais avec 3x3. D'autre part, le tuner LightGBM d'optuna répète 6 essais de 3 + 3. Au lieu d'avoir moins d'essais, optuna donne la priorité aux paramètres considérés comme critiques pour la précision. Ce faisant, il recherchera moins souvent le paramètre optimal. Pour plus de détails, voir [[Optimisation automatique d'HyperParamètre avec Optuna Extension LightGBM Tuner]](https://tech.preferred.jp/en/blog/hyperparameter-tuning-with-optuna-integration-lightgbm- Voir tuner /). Les résultats de diverses expériences sur la supériorité de LightGBM Tiner sont écrits.

Ensuite, j'aimerais le faire immédiatement.

Réglage des hyper paramètres avec le tuner LightGBM

Lorsque vous utilisez LightGBM Tuner, importez via optuna au lieu d'importer lightgbm normalement.

# import lightbgm as lab (Au lieu de cela, importez en utilisant la méthode ci-dessous)
from optuna.integration import lightgbm as lgb


# optuna.__version__  1.3.0

Si vous vous entraînez normalement de cette manière, il s'accordera automatiquement.

ts = time.time()

dtrain = lgb.Dataset(x_train, label=y_train)
eval_data = lgb.Dataset(x_val, label=y_val)

param = {
        'objective': 'regression',
        'metric': 'rmse',
        'verbosity': -1,
        'boosting_type': 'gbdt',
    }

best = lgb.train(param, 
                 dtrain,
                 valid_sets=eval_data,
                 early_stopping_rounds=100)

time.time() - ts

# time: 2945.9576

"""
###Paramètres réellement réglés###

param = {
        'lambda_l1': trial.suggest_loguniform('lambda_l1', 1e-8, 10.0),
        'lambda_l2': trial.suggest_loguniform('lambda_l2', 1e-8, 10.0),
        'num_leaves': trial.suggest_int('num_leaves', 2, 256),
        'feature_fraction': trial.suggest_uniform('feature_fraction', 0.4, 1.0),
        'bagging_fraction': trial.suggest_uniform('bagging_fraction', 0.4, 1.0),
        'bagging_freq': trial.suggest_int('bagging_freq', 1, 7),
        'min_child_samples': trial.suggest_int('min_child_samples', 5, 100),
    }
"""

À propos, la valeur par défaut de l'essai est de 1000. Pourquoi early_stopping_rounds est-il défini sur 100?

Le temps d'exécution a pris environ 50 minutes. Cela a pris un certain temps, mais je ne l'accorde généralement pas beaucoup Personnellement, je pense qu'il est normal de passer environ une heure si vous pouvez rechercher les paramètres en détail.

Les paramètres après le réglage sont les suivants.

best.params
best.best_iteration
best.best_score

"""
     {'objective': 'regression',
      'metric': 'rmse',
      'verbosity': -1,
      'boosting_type': 'gbdt',
      'lambda_l1': 0.0005523588106120283,
      'lambda_l2': 6.72929973145413e-07,
      'num_leaves': 6,
      'feature_fraction': 0.8,
      'bagging_fraction': 1.0,
      'bagging_freq': 0,
      'min_child_samples': 20}

      best.best_iteration: 555

      best.best_score(rmse): 0.93714
"""

Prédit avec un modèle utilisant ce paramètre, le score de Kaggle était de 0,94293. Il a augmenté un peu plus que la dernière fois.

Je ne pense pas qu'il y aura plus de changement dans le réglage, donc je dois faire de l'ingénierie des fonctionnalités ailleurs.

difficile,,,

À la fin

Cette fois, j'ai réglé les hyper paramètres en utilisant LightGBM Tuner.

Je n'ai pas comparé la précision avec d'autres méthodes de réglage, mais le lien ci-dessus Nous utilisons également une référence commune pour comparer avec d'autres techniques de réglage, et les résultats montrent que le tuner LightGBM est le meilleur. Il semble qu'il y ait place à amélioration parce que c'est une méthode qui n'a été que achevée, mais je pense que c'est beaucoup plus facile que de régler plusieurs essais et erreurs. De plus, au lieu de régler avec des valeurs approximatives comme la recherche de grille, il s'accorde finement, il est donc recommandé lorsque vous souhaitez améliorer le score un peu plus tard avec kaggle.

Recommended Posts

Hyper réglage des paramètres avec LightGBM Tuner
Réglage des paramètres Keras avec Keras Tuner
Réglage des hyper paramètres avec Grid Search à l'aide de pipeline avec keras
Réglage des paramètres avec luigi (2)
Réglage des paramètres avec luigi
Apprentissage supervisé 3 hyper paramètres et réglage (2)
Ajustement des paramètres LightGBM avec Optuna
Ajuster les hyper paramètres avec l'optimisation bayésienne
Apprentissage supervisé 2 Hyper paramètres et réglage (1)
Divers réglages fins avec Mobilenet v2
J'ai essayé d'apprendre LightGBM avec Yellowbrick
Optimisez RF ou LightGBM avec Optuna