Shikata Ga Nai

Private? There is no such things.

35. ハイパーパラメータチューニングのコツ

Hello there, ('ω')ノ

📌 1. ハイパーパラメータとは?

ハイパーパラメータ とは、モデルの学習前に設定するパラメータ です。
例えば、決定木の「木の深さ」や、XGBoostの「学習率」 などが該当します。

📌 ハイパーパラメータ vs 学習パラメータ

種類 設定方法
ハイパーパラメータ 決定木の「max_depth」、XGBoostの「learning_rate」 学習前に手動で設定
学習パラメータ 重み(weights)、バイアス(bias) モデルが自動で学習する

ハイパーパラメータは事前に調整が必要! これを 最適化することで、モデルの性能が向上!


📌 2. 主要なハイパーパラメータとチューニング方法

✅ 決定木(Decision Tree)

ハイパーパラメータ 説明 推奨値
max_depth 木の深さ(大きすぎると過学習) 3〜10
min_samples_split ノードを分割する最小サンプル数 2〜20
min_samples_leaf 葉ノードに必要な最小サンプル数 1〜10

深すぎると過学習、浅すぎると汎化性能が低下!


✅ ランダムフォレスト(Random Forest)

ハイパーパラメータ 説明 推奨値
n_estimators 決定木の数(多いほど安定) 100〜500
max_features 各木で使う特徴量の数 √(特徴量数)
bootstrap サンプルをランダムに抽出するか? True

木の数を増やしすぎると計算コストが上がる!


✅ XGBoost / LightGBM

ハイパーパラメータ 説明 推奨値
learning_rate 学習率(小さいほど精度は高いが時間がかかる) 0.01〜0.3
n_estimators 決定木の数(多いほど強力だが過学習しやすい) 100〜1000
max_depth 決定木の深さ 3〜10
subsample 学習に使うデータの割合(小さいほど汎化性能が上がる) 0.7〜1.0

学習率(learning_rate)を適切に調整することが鍵!


✅ SVM(サポートベクターマシン)

ハイパーパラメータ 説明 推奨値
C 誤分類をどれだけ許容するか(大きいと過学習) 0.1〜10
kernel カーネル関数(線形 or 非線形) linear / rbf
gamma RBFカーネルの影響範囲 0.001〜1

Cを大きくすると過学習、gammaが大きいと局所的すぎる!


📌 3. GridSearchCV(グリッドサーチ)を使ったチューニング

GridSearchCVを使うと、すべてのパラメータの組み合わせを試し、最適なものを見つけられる!

from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

# データの準備
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=42)

# ハイパーパラメータの候補
param_grid = {
    'n_estimators': [50, 100, 200],
    'max_depth': [3, 5, 10],
    'min_samples_split': [2, 5, 10]
}

# グリッドサーチ
grid_search = GridSearchCV(RandomForestClassifier(), param_grid, cv=5, scoring='accuracy')
grid_search.fit(X_train, y_train)

# 最適なパラメータを表示
print("Best Parameters:", grid_search.best_params_)
print("Best Accuracy:", grid_search.best_score_)

すべての組み合わせを試して、最適なパラメータを見つける!
全探索のため、パラメータが多いと計算時間が長い!


📌 4. Optunaを使ったベイズ最適化

Optunaは、より効率的に最適なハイパーパラメータを探索できるライブラリ です!

import optuna
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

# 最適化の関数
def objective(trial):
    n_estimators = trial.suggest_int("n_estimators", 50, 200)
    max_depth = trial.suggest_int("max_depth", 3, 10)
    min_samples_split = trial.suggest_int("min_samples_split", 2, 10)

    model = RandomForestClassifier(n_estimators=n_estimators, max_depth=max_depth, min_samples_split=min_samples_split)
    model.fit(X_train, y_train)
    y_pred = model.predict(X_test)
    return accuracy_score(y_test, y_pred)

# Optunaで最適化
study = optuna.create_study(direction="maximize")
study.optimize(objective, n_trials=20)

# 最適なパラメータを表示
print("Best Parameters:", study.best_params)
print("Best Accuracy:", study.best_value)

Optunaなら、無駄な探索を減らして最適化できる!
計算時間が短く、パラメータが多い場合に便利!


📌 5. ハイパーパラメータ調整のベストプラクティス

まずはデフォルト設定で試す(ベースラインを作る)
重要なパラメータから調整する(例: XGBoostならlearning_rate)
GridSearchCVは小規模、Optunaは大規模に適用
過学習を防ぐために「交差検証(Cross Validation)」も併用


🎯 まとめ

ハイパーパラメータは、学習前に調整する重要な要素!
GridSearchCVは全探索、Optunaは効率的に探索!
適切なパラメータ調整で、モデルの精度と汎化性能を向上!

Best regards, (^^ゞ