統計ロードマップ
2026-04-29·実装·⏱ 約 5

ベイズ最適化でハイパーパラメータ探索 ─ Optuna 入門

GridSearch より遥かに効率的なハイパラ探索手法『ベイズ最適化』を、Optuna で実装。少ない試行で最良パラメータを見つける考え方を解説します。

機械学習モデルのハイパラ調整は時間との勝負。ベイズ最適化(Bayesian Optimization) は『過去の試行から学んで賢く次を選ぶ』アプローチで、GridSearch より圧倒的に少ない試行で最適解に近づけます。

問題設定 ─ なぜ GridSearch ではダメか

ハイパラが 5 個 ・ 各 10 候補だと GridSearch は 10^5 = 10 万回試行。LightGBM なら 1 試行 30 秒として 35 日…現実的でない。

  • GridSearch: 全組み合わせを試す。次元の呪いに直面
  • Random Search: ランダムにサンプリング。GridSearch より効率的だが、過去の結果を活かさない
  • ベイズ最適化: 過去の結果から賢く次の試行点を決める ← これ

ベイズ最適化の仕組み

  1. サロゲートモデル(代理関数)を構築 ─ 試行結果から目的関数を推定。通常はガウス過程(GP)
  2. 獲得関数(EI: Expected Improvement など)で次の試行点を決める
  3. 新しい試行 → サロゲートを更新 → 繰り返し
💡 直感的に

「今までで最高は 0.85。次にどこを試せば 0.85 を超える可能性が最も高い?」を毎回計算して、賢く探索範囲を絞り込んでいきます。

Optuna で実装(10 行)

LightGBM の最適化
import optuna
import lightgbm as lgb
from sklearn.model_selection import cross_val_score

def objective(trial):
    params = {
        'num_leaves': trial.suggest_int('num_leaves', 16, 256),
        'learning_rate': trial.suggest_float('learning_rate', 0.01, 0.3, log=True),
        'min_child_samples': trial.suggest_int('min_child_samples', 5, 100),
        'reg_alpha': trial.suggest_float('reg_alpha', 1e-8, 10, log=True),
    }
    model = lgb.LGBMClassifier(**params, n_estimators=200)
    score = cross_val_score(model, X_train, y_train, cv=5, scoring='roc_auc').mean()
    return score

study = optuna.create_study(direction='maximize')
study.optimize(objective, n_trials=100)

print('Best:', study.best_value)
print('Params:', study.best_params)

重要な機能

Pruning(早期打ち切り)

勝ち目のない試行を途中で止める
study = optuna.create_study(
    direction='maximize',
    pruner=optuna.pruners.MedianPruner(),
)

中央値より悪い試行を早期打ち切り。実質 2〜3 倍速くなります。

可視化

結果の分析
import optuna.visualization as vis

vis.plot_optimization_history(study)
vis.plot_param_importances(study)
vis.plot_parallel_coordinate(study)

実務での使い方

  • GBDT 系(LightGBM ・ XGBoost ・ CatBoost)のハイパラ調整
  • DNN の学習率・バッチサイズ・正則化
  • scikit-learn の任意のモデル
  • 強化学習の報酬重み
🛠 ベイズ最適化が効く場面

1 試行が高コスト(数分〜数時間)で、ハイパラが 5〜30 次元の場合。1 試行が一瞬で済む場合は GridSearch でも OK。

理論的背景

ベイズ最適化はベイズ統計の応用です。ガウス過程 で関数の事後分布を表現し、獲得関数 で次の試行点を決定します。詳しくは:

  • [ベイズ統計と頻度論](/blog/bayes-vs-frequentist)
  • [統計検定 準 1 級 教科書](/textbook/grade-pre1) ─ ベイズの定理
  • [E 資格 教科書](/certs/e-shikaku/textbook) ─ ガウス過程の応用

まとめ

Optuna 10 行で実務レベルのハイパラ最適化が可能。理論はベイズ統計の集大成、実装は scikit-learn のラッパーレベル ─ AI エンジニアにとって投資対効果が極めて高いツールです。

Related Articles

関連記事