🎛️ ハイパーパラメータチューニング - tune

第17章: モデル性能を最大化する最適化戦略
🎯 Hyperparameter Tuning ⚡ Grid Search & Bayesian Optimization 🏎️ Racing Algorithms

モデル性能を最大化する秘訣。tuneパッケージでグリッドサーチ、ベイズ最適化、Racingアルゴリズムなど、効率的なハイパーパラメータ探索技術をマスターしよう。

🎯 ハイパーパラメータチューニングの重要性

ハイパーパラメータチューニングは、機械学習モデルの性能を最大化するための重要な技術です。tuneパッケージを使用して、効率的な最適化戦略を実装します。

🔄 ハイパーパラメータチューニングワークフロー
1️⃣
データ分割
2️⃣
モデル定義
3️⃣
グリッド設定
4️⃣
チューニング実行
5️⃣
最適化評価
6️⃣
モデル最終化

📦 環境のセットアップ

チューニング環境の準備
# ハイパーパラメータチューニングエコシステムの読み込み library(tidyverse) library(tidymodels) # チューニング専用パッケージ library(tune) library(dials) # サンプルデータの作成 set.seed(123) # 分類用データセット classification_data <- tibble( x1 = rnorm(1000), x2 = rnorm(1000), x3 = rnorm(1000), y = factor(ifelse(x1 + x2 + rnorm(1000) > 0, "A", "B")) ) glimpse(classification_data)

⚙️ 主要なチューニング関数

tuneパッケージの主要な関数を理解し、効果的なハイパーパラメータ最適化を実現しましょう。

tune()
モデルパラメータをチューニング対象としてマークする基本関数。どのパラメータを最適化するかを指定。
mtry = tune(), trees = tune()
tune_grid()
グリッドサーチでハイパーパラメータを探索。事前に定義したグリッドで網羅的な探索を実行。
tune_grid(resamples, grid)
tune_bayes()
ベイズ最適化で効率的なハイパーパラメータ探索。過去の結果を学習して次の探索点を効率化。
tune_bayes(resamples, initial, iter)
tune_race_anova()
Racingアルゴリズムで高速チューニング。性能が低いパラメータを早期に除外して効率化。
tune_race_anova(resamples, grid)
select_best()
チューニング結果から最適なパラメータを選択。指定したメトリックで最高の結果を取得。
select_best(metric = "accuracy")
finalize_workflow()
選択したパラメータでワークフローを最終化。チューニング済みのモデルで本格的な予測を実行。
finalize_workflow(best_params)

🔧 基本的なチューニング

tune()関数を使用してハイパーパラメータをマークし、グリッドサーチで最適値を探索します。

基本的なグリッドサーチ
# データ分割 data_split <- classification_data %>% initial_split(prop = 0.8, strata = y) train_data <- training(data_split) test_data <- testing(data_split) # クロスバリデーション cv_folds <- train_data %>% vfold_cv(v = 5, strata = y) # チューニング対象モデル rf_model <- rand_forest( mtry = tune(), trees = tune(), min_n = tune() ) %>% set_engine("ranger") %>% set_mode("classification") print("チューニングモデル設定完了")

🔍 グリッドサーチ

パラメータ空間を体系的に探索するグリッドサーチを実装します。regular gridとrandom gridの両方を学習します。

グリッドサーチの実装
# レシピ作成 rf_recipe <- recipe(y ~ ., data = train_data) %>% step_normalize(all_numeric_predictors()) # ワークフロー作成 rf_workflow <- workflow() %>% add_model(rf_model) %>% add_recipe(rf_recipe) # レギュラーグリッド rf_grid <- rf_workflow %>% extract_parameter_set_dials() %>% grid_regular(levels = 3) print(rf_grid) # ランダムグリッド rf_random_grid <- rf_workflow %>% extract_parameter_set_dials() %>% grid_random(size = 20) print("グリッド作成完了")

⚡ チューニング実行

tune_grid()を使用して、実際にハイパーパラメータチューニングを実行し、最適なパラメータを見つけます。

チューニングの実行
# グリッドサーチ実行 rf_results <- rf_workflow %>% tune_grid( resamples = cv_folds, grid = rf_random_grid ) # 結果確認 best_metrics <- rf_results %>% collect_metrics() %>% arrange(desc(mean)) print(head(best_metrics)) # 最適パラメータ選択 best_params <- rf_results %>% select_best("accuracy") print(best_params)

🧠 ベイズ最適化

tune_bayes()を使用して、より効率的なベイズ最適化によるハイパーパラメータ探索を実装します。

ベイズ最適化の実装
# 初期グリッド initial_grid <- rf_workflow %>% extract_parameter_set_dials() %>% grid_random(size = 5) # ベイズ最適化実行 bayes_results <- rf_workflow %>% tune_bayes( resamples = cv_folds, initial = initial_grid, iter = 10 ) # ベイズ結果確認 bayes_best <- bayes_results %>% select_best("accuracy") print(bayes_best)

📏 パラメータ範囲の設定

dialsパッケージを使用して、ハイパーパラメータの探索範囲をカスタマイズします。

カスタムパラメータ範囲
# パラメータ範囲設定 custom_params <- rf_workflow %>% extract_parameter_set_dials() %>% update( mtry = mtry(range = c(1, 3)), trees = trees(range = c(50, 500)) ) # カスタムグリッド作成 custom_grid <- custom_params %>% grid_regular(levels = 4) print(custom_grid)

🏁 モデルの最終化

最適なハイパーパラメータでモデルを最終化し、テストデータで性能を評価します。

最終モデルの構築
# 最終ワークフロー作成 final_workflow <- rf_workflow %>% finalize_workflow(best_params) # 最終モデル訓練 final_fit <- final_workflow %>% last_fit(data_split) # テスト性能評価 test_metrics <- final_fit %>% collect_metrics() print(test_metrics) # 予測結果 test_predictions <- final_fit %>% collect_predictions() print(head(test_predictions))

🏎️ Racing アルゴリズム

tune_race_anova()を使用して、効率的なRacingアルゴリズムによる高速チューニングを実装します。

Racing アルゴリズムの実装
# Racing用大きなグリッド racing_grid <- rf_workflow %>% extract_parameter_set_dials() %>% grid_random(size = 50) # Racing実行 racing_results <- rf_workflow %>% tune_race_anova( resamples = cv_folds, grid = racing_grid ) # Racing結果 racing_best <- racing_results %>% select_best("accuracy") print(racing_best)

🔄 複数モデルの同時チューニング

workflow_set()を使用して、複数のモデルを同時にチューニングし、最適なモデルを選択します。

複数モデルチューニング
# 複数モデル定義 svm_model <- svm_rbf(cost = tune(), rbf_sigma = tune()) %>% set_engine("kernlab") %>% set_mode("classification") lr_model <- logistic_reg(penalty = tune(), mixture = tune()) %>% set_engine("glmnet") # ワークフローセット作成 model_set <- workflow_set( preproc = list(norm = rf_recipe), models = list(rf = rf_model, svm = svm_model, lr = lr_model) ) # 全モデルチューニング set_results <- model_set %>% workflow_map("tune_grid", resamples = cv_folds, grid = 10) print(rank_results(set_results))

🎯 高度な最適化戦略

異なるチューニング手法の特徴と使い分けを理解し、状況に応じた最適な戦略を選択しましょう。

📋 グリッドサーチ
適用ケース: パラメータが少ない、網羅的探索が必要
メリット: 理解しやすい、再現可能性高
デメリット: 計算コストが高い
🧠 ベイズ最適化
適用ケース: 高次元パラメータ、計算コストが高い
メリット: 効率的、適応的探索
デメリット: 結果が不安定
🏎️ Racing
適用ケース: 大きな探索空間、高速チューニング
メリット: 高速、リソース効率的
デメリット: 最適解を逃す可能性

🎆 章のまとめ

本章では、tuneパッケージを使用した包括的なハイパーパラメータチューニング技術をマスターしました。実用的な機械学習システム構築のための重要なスキルを習得しました。

📚 学習した主要ポイント

基本手法
• tune()でパラメータマーキング
• グリッドサーチの実装
• クロスバリデーションと組み合わせ
高度な最適化
• ベイズ最適化の活用
• Racingアルゴリズム
• パラメータ範囲のカスタマイズ
実用的テクニック
• 複数モデルの同時最適化
• 最終モデルの構築と評価
• 成果物の管理と共有

🚀 これであなたもハイパーパラメータチューニングのエキスパートです!

前の章
第16章: リサンプリング - rsample
次の章
第18章: モデル評価 - yardstick