[PYTHON] Hyperparameter-Tuning mit LightGBM-Tuner

Einführung

Ich würde gerne versuchen, die Hyperparameter von optuna anhand der Daten des letzten Kaggles zu optimieren. Die Daten sind in Vorheriger Artikel beschrieben.

optuna wurde von Preferred Networks entwickelt und optimiert Hyperparameter automatisch. Insbesondere beim Optimieren von LightGBM wird eine additive Suche durchgeführt, im Gegensatz zu einer Multiplikationssuche mit Rastersuche. Zum Beispiel n_estimators = [50, 100, 150], mad_depth = [10, 15, 20] Angenommen, Sie möchten die besten Parameter finden. Wiederholen Sie für die Rastersuche 9 Versuche mit 3x3. Auf der anderen Seite wiederholt der LightGBM-Tuner von optuna 6 Versuche mit 3 + 3. Anstatt weniger Versuche durchzuführen, priorisiert optuna die Parameter, die als kritisch für die Genauigkeit angesehen werden. Auf diese Weise wird seltener nach dem optimalen Parameter gesucht. Weitere Informationen finden Sie unter [[Automatische HyperParameter-Optimierung mit Optuna Extension LightGBM Tuner]](https://tech.preferred.jp/en/blog/hyperparameter-tuning-with-optuna-integration-lightgbm- Siehe Tuner /). Die Ergebnisse verschiedener Experimente zur Überlegenheit von LightGBM Tiner werden geschrieben.

Dann würde ich es gerne sofort machen.

Optimieren von Hyperparametern mit dem LightGBM-Tuner

Wenn Sie LightGBM Tuner verwenden, importieren Sie über optuna, anstatt normal lightbbm zu importieren.

# import lightbgm as lab (Importieren Sie stattdessen mit der folgenden Methode)
from optuna.integration import lightgbm as lgb


# optuna.__version__  1.3.0

Wenn Sie auf diese Weise normal trainieren, wird automatisch abgestimmt.

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

"""
###Parameter, die tatsächlich abgestimmt sind###

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),
    }
"""

Der Standardwert für den Test ist übrigens 1000. Warum ist Early_stopping_rounds auf 100 gesetzt?

Die Ausführungszeit betrug ca. 50 Minuten. Es hat eine ganze Weile gedauert, aber ich stimme es normalerweise nicht sehr Ich persönlich denke, dass es in Ordnung ist, ungefähr eine Stunde zu verbringen, wenn Sie die Parameter im Detail durchsuchen können.

Die Parameter nach dem Einstellen sind wie folgt.

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
"""

Mit einem Modell unter Verwendung dieses Parameters vorhergesagt, betrug der Kaggle-Score 0,94293. Es ist etwas mehr gewachsen als beim letzten Mal.

Ich denke nicht, dass sich das Tuning mehr ändern wird, also muss ich anderswo Feature-Engineering betreiben.

schwer,,,

Am Ende

Dieses Mal habe ich die Hyperparameter mit LightGBM Tuner eingestellt.

Ich habe die Genauigkeit nicht mit anderen Abstimmungsmethoden verglichen, aber der oben angegebene Link hat Wir verwenden auch einen gemeinsamen Benchmark, um ihn mit anderen Tuning-Techniken zu vergleichen. Die Ergebnisse zeigen, dass der LightGBM-Tuner der beste ist. Es ist immer noch eine Methode, die erst abgeschlossen wurde, daher scheint es Raum für Verbesserungen zu geben, aber ich denke, dass es viel einfacher ist, als verschiedene Versuche und Fehler durchzugehen. Anstatt mit groben Werten wie der Rastersuche zu stimmen, wird auch eine feine Abstimmung vorgenommen. Daher wird empfohlen, die Punktzahl etwas später mit kaggle zu verbessern.

Recommended Posts

Hyperparameter-Tuning mit LightGBM-Tuner
Optimieren von Keras-Parametern mit Keras Tuner
Optimieren von Hyperparametern mit Grid Search mithilfe einer Pipeline mit Keras
Parametereinstellung mit luigi (2)
Parametereinstellung mit luigi
Überwachtes Lernen 3 Hyperparameter und Abstimmung (2)
Anpassen der LightGBM-Parameter mit Optuna
Passen Sie die Hyperparameter mit der Bayes'schen Optimierung an
Überwachtes Lernen 2 Hyperparameter und Abstimmung (1)
Verschiedene Feinabstimmungen mit Mobilenet v2
Ich habe versucht, LightGBM mit Yellowbrick zu lernen
Optimieren Sie RF oder lightGBM mit Optuna