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, (^^ゞ