🎛️ ハイパーパラメータチューニング - tune
第17章: モデル性能を最大化する最適化戦略
🎯 Hyperparameter Tuning
⚡ Grid Search & Bayesian Optimization
🏎️ Racing Algorithms
モデル性能を最大化する秘訣。tuneパッケージでグリッドサーチ、ベイズ最適化、Racingアルゴリズムなど、効率的なハイパーパラメータ探索技術をマスターしよう。
🎯 ハイパーパラメータチューニングの重要性
ハイパーパラメータチューニングは、機械学習モデルの性能を最大化するための重要な技術です。tuneパッケージを使用して、効率的な最適化戦略を実装します。
📦 環境のセットアップ
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_grid <- rf_workflow %>%
extract_parameter_set_dials() %>%
grid_random(size = 50)
racing_results <- rf_workflow %>%
tune_race_anova(
resamples = cv_folds,
grid = racing_grid
)
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アルゴリズム
• パラメータ範囲のカスタマイズ
実用的テクニック
• 複数モデルの同時最適化
• 最終モデルの構築と評価
• 成果物の管理と共有
🚀 これであなたもハイパーパラメータチューニングのエキスパートです!