Skip to content
Back to skills

Optuna Lgbm Tuning

ASecurity

Uses Optuna with TPE sampler for Bayesian hyperparameter optimization of LightGBM, searching key params like num_leaves, depth, and learning rate.

  • 61 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 12, 2026
datapythongo

Security analysis

A100/100

Scanned September 12, 2026

npx -y skills add wenmin-wu/ds-skills --skill optuna-lgbm-tuning --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Optuna Lgbm Tuning?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Optuna Lgbm Tuning
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/wenmin-wu-optuna-lgbm-tuning/badge)](https://www.skillsdirectory.com/skills/wenmin-wu-optuna-lgbm-tuning)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: tabular-optuna-lgbm-tuning
description: >
  Uses Optuna with TPE sampler for Bayesian hyperparameter optimization of LightGBM, searching key params like num_leaves, depth, and learning rate.
---
# Optuna LightGBM Tuning

## Overview

Optuna's Tree-structured Parzen Estimator (TPE) efficiently searches LightGBM hyperparameter space by building a probabilistic model of which regions produce good scores. Typically finds better parameters than grid/random search in fewer trials. Define an objective function, let Optuna propose params, evaluate with CV.

## Quick Start

```python
import optuna
import lightgbm as lgb
from sklearn.model_selection import cross_val_score

def objective(trial):
    params = {
        'n_estimators': trial.suggest_int('n_estimators', 100, 2000),
        'num_leaves': trial.suggest_int('num_leaves', 16, 256),
        'max_depth': trial.suggest_int('max_depth', 3, 12),
        'learning_rate': trial.suggest_float('learning_rate', 1e-3, 0.3, log=True),
        'min_child_samples': trial.suggest_int('min_child_samples', 5, 100),
        'subsample': trial.suggest_float('subsample', 0.5, 1.0),
        'colsample_bytree': trial.suggest_float('colsample_bytree', 0.5, 1.0),
        'reg_alpha': trial.suggest_float('reg_alpha', 1e-8, 10.0, log=True),
        'reg_lambda': trial.suggest_float('reg_lambda', 1e-8, 10.0, log=True),
    }
    model = lgb.LGBMClassifier(**params, random_state=42, n_jobs=-1)
    score = cross_val_score(model, X_train, y_train, cv=5, scoring='roc_auc').mean()
    return score

study = optuna.create_study(direction='maximize', sampler=optuna.samplers.TPESampler(seed=42))
study.optimize(objective, n_trials=100, show_progress_bar=True)

best_model = lgb.LGBMClassifier(**study.best_params)
best_model.fit(X_train, y_train)
```

## Workflow

1. Define objective function with `trial.suggest_*` for each hyperparameter
2. Use log scale for learning rate and regularization params
3. Run 50-200 trials (TPE converges fast)
4. Extract best params and retrain on full data
5. Optionally use `optuna.visualization` to inspect param importance

## Key Decisions

- **TPE vs random**: TPE finds good regions 2-3x faster than random search
- **n_trials**: 50 for quick search, 200 for thorough; diminishing returns after ~100
- **Pruning**: Add `optuna.integration.LightGBMPruningCallback` to early-stop bad trials
- **Seed**: Fix sampler seed for reproducibility across runs

## References

- Riiid Answer Correctness Prediction (Kaggle)
- Source: [riiid-answer-correctness-prediction-eda-modeling](https://www.kaggle.com/code/isaienkov/riiid-answer-correctness-prediction-eda-modeling)

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…