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

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

UCI Machine Learning Repository の Obesity データの分析6 - Naive Bayes による分類。正解率は 48.2%

www.crosshyou.info

前回は k-NN で予測しました。今回は Naive Bayes で予測してみます。

はじめに discrim パッケージを読み込んでおきます。

モデルを作成します。

ワークフローを作成します。レシピは前回の k-NN で作成したレシピをそのまま使います。

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

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

最良パラメータを取り出します。

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

トレーニング用のデータでモデルを学習します。

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

2, 3, 10行目が正解していますね。

混合行列を作成します。

青枠で囲ったところが正解です。前回の k-NN に比べると正解率は落ちるようです。

正解率を計算します。

正解率は 48.2% でした。

今回は以上です。

次回は

www.crosshyou.info

です。

 

はじめから読むには、

www.crosshyou.info

です。

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

#
# discrimパッケージを読み込む
library(discrim)
#
# モデルの作成
nb_mod <- naive_Bayes(
  smoothness = tune(),
  Laplace = tune()
) |> 
  set_engine("naivebayes", usekernel = FALSE)
#
# ワークフローの作成
nb_wf <- workflow() |> 
  add_recipe(rec) |> 
  add_model(nb_mod)
#
# チューニンググリッドの作成
nb_grid <- grid_regular(
  smoothness(range = c(0, 3)),
  Laplace(range = c(0, 3))
)
#
# チューニングの実行
nb_tuned <- tune_grid(
  nb_wf,
  resamples = folds,
  grid = nb_grid,
  metrics = metric_set(accuracy)
)
#
# 最良パラメータ
nb_params <- select_best(nb_tuned, metric = "accuracy")
nb_params
#
# 最良パラメータで最終ワークフロー
nb_final_wf <- finalize_workflow(nb_wf, nb_params)
#
# トレーニング用のデータで学習
nb_fit <- fit(nb_final_wf, df_train)
#
# テスト用のデータで予測
nb_pred <- predict(nb_fit, new_data = df_test) |>
  bind_cols(df_test |> select(obesity))
nb_pred
#
# 予測結果の混合行列
conf_mat(nb_pred, truth = obesity, estimate = .pred_class)
#
# 予測結果の正解率
accuracy(nb_pred, truth = obesity, estimate = .pred_class)
#

(冒頭の画像は、Bing Image Creator で生成しました。プロンプトは Landscape of natural green grass fields with small river running through the field and close up of a white rose flower, under the light start night, photo です。)