Rで何かをしたり、読書をするブログ

政府統計の総合窓口のデータや、OECDやUCIやのデータを使って、Rの練習をしています。ときどき、読書記録も載せています。

UCI Machine Learning Repository の Obesity データの分析7 - multinomial logistic regression での予測。正解率は 90.1%

www.crosshyou.info

今回は、glmnet エンジンで multinomial logistic regression でやってみます。

モデルを作成します。multinom_reg() 関数です。

ワークフローを作成します。

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

チューニングを実行します。

最良のパラメータを確認します。

最良のパラメータで最終ワークフローを作成します。

df_train のデータで学習します。

df_test のデータで予測します。

3, 4, 5, 6, 9, 10 行目が正解しています。

混合行列を作成します。conf_mat() 関数を使います。

前回の Naive Bayes よりもよさそうです。

正解率を計算します。accuracy() 関数を使います。

90.1% の正解率でした。k-NN よりも正解率が高いです。

今回は以上です。

次回は

www.crosshyou.info

です。

 

はじめから読むには、

www.crosshyou.info

です。

 

今回のコードは以下になります。

#
# モデルの作成
glmnet_mod <- multinom_reg(
  penalty = tune(),   # λ
  mixture = tune()    # α
) |> 
  set_engine("glmnet", maxit = 500000)
#
# ワークフローの作成
glmnet_wf <- workflow() |> 
  add_recipe(rec) |> 
  add_model(glmnet_mod)
#
# チューニンググリッドの作成
lambda_values <- 10^seq(-3, 0, length.out = 20)
glmnet_grid <- crossing(
  penalty = lambda_values,
  mixture = c(0.2, 0.5, 0.8)
)
#
# チューニング実行
set.seed(123)
glmnet_tuned <- tune_grid(
  glmnet_wf,
  resamples = folds,
  grid = glmnet_grid,
  metrics = metric_set(accuracy)
  )
#
# 最良パラメータ
glmnet_params <- select_best(glmnet_tuned, metric = "accuracy")
glmnet_params
#
# 最良パラメータで最終ワークフロー
glmnet_wf_final <- finalize_workflow(glmnet_wf, glmnet_params)
#
# 最終ワークフローで学習
glmnet_fit <- fit(glmnet_wf_final, data = df_train)
#
# テスト用のデータで予測
glmnet_pred <- predict(glmnet_fit, new_data = df_test) |>
  bind_cols(df_test |> select(obesity))
glmnet_pred
#
# 予測結果の混合行列
conf_mat(glmnet_pred, truth = obesity, estimate = .pred_class)
#
# 予測結果の正解率
accuracy(glmnet_pred, truth = obesity, estimate = .pred_class)
#

 

 

 

 

(冒頭の画像は Bing Image Creator で生成しました。プロンプトは Natural landscape of old time blue forest, under the red sky, close up of colorful pansy flowers, Photo です。)