
の続きです。前回は普通の線形モデルで予測しました。今回はElastic-Net、正則化付きの線形モデルで予測してみましょう。
まず、recipe()関数でレシピを作成します。

Elastic-Netでは数値型の変数は標準化しておきます。
次にモデルを作成します。

penaltyとmixtureはあとからチューニングで最適なパラメータを決めるので、この段階では、tune()としておきます。
レシピとモデルを合わせてワークフローを作成します。

クロスバリデーションでチューニングをするので、そのためのバリデーションのデータ(folds)を作ります。

チューニング・グリッドの作成をします。

tune_grid()関数でチューニングします。

最適なパラメータを確認します。

最適なパラメータを使って、最終ワークフローを作成します。

この最終ワークフローを用いて、トレーニング用データで学習します。

テスト用のデータで予測します。

実際の電子レンジ所有数量と予測値を合わせて一つのデータフレームにします。

metrics()関数で、RMSEなどを算出します。

前回の単純な線形モデルとほとんど同じ評価指標ですね。
今回は以上です。
次回は、
です。
はじめから読むには、
です。
今回のコードは以下になります。
#
# Elastic-Net(正則化付きの線形回帰)
#
# レシピを作成(_rep)
glmnet_rec <- recipe(microwave ~ year + l_mitsudo + conve + single + income,
data = train_data) |>
step_dummy(all_nominal_predictors()) |>
step_normalize(all_predictors())
glmnet_rec
#
# モデルを作成(_mod)
glmnet_mod <- linear_reg(
penalty = tune(), # lambda
mixture = tune() # alpha
) |>
set_engine("glmnet")
glmnet_mod
#
# ワークフローを作成(_wf)
glmnet_wf <- workflow() |>
add_recipe(glmnet_rec) |>
add_model(glmnet_mod)
glmnet_wf
#
# クロスバリデーションのfoldsを作成(全モデル共通)
set.seed(987)
folds <- vfold_cv(train_data, v = 5)
folds
#
# チューニンググリッドの作成(_grid)
glmnet_grid <- grid_regular(
penalty(range = c(-4, 0)),
mixture(range = c(0.001, 0.999)),
levels = 10
)
glmnet_grid
#
# チューニングの実行(_tuned)
glmnet_tuned <- tune_grid(
glmnet_wf,
resamples = folds,
grid = glmnet_grid
)
glmnet_tuned
#
# 最適パラメータ(_params)
glmnet_params <- select_best(glmnet_tuned, metric = "rmse")
glmnet_params
#
# 最終ワークフローを作成(_final_wf)
glmnet_final_wf <- finalize_workflow(
glmnet_wf,
glmnet_params
)
glmnet_final_wf
#
# トレーニング用データで学習(_fit)
glmnet_fit <- fit(glmnet_final_wf, train_data)
#
# テスト用のデータで予測(_pred)
glmnet_pred <- predict(glmnet_fit, new_data = test_data)
#
# 実際の値と予測値(_result)
glmnet_result <- test_data |>
select(microwave) |>
bind_cols(glmnet_pred)
glmnet_result
#
# 評価(_metric)
glmnet_metric <- glmnet_result |>
metrics(truth = microwave, .pred) |>
mutate(model = "Elastic_Net")
glmnet_metric
lm_metric
#
(冒頭の画像は、Bing Image Creatorで生成しました。プロンプトは、Lovley landscape of nature green grass field, close up of yellow Chrysanthemum flowers, there are high mountains in far away, photo です。)