Bing Image Creator で生成: Close up of blue Hyacinthus orientalis flowers, background is long wide view of wild green grass fields, photo
の続きです。前回まででデータフレームの前処理は終わりました。今回からは具体的にマシーンラーニングをしていきます。
まず、データフレームをトレーニング用とテスト用に分けます。
トレーニング用を 500 の観測数、残りをテスト用にしました。
両者の approved の比率に大きな違いが無いかを確認します。
p-value が 0.9248 なので違いがあるとは言えません。トレーニング用のほうは、approved が 1 の比率は 0.45 で、テスト用のほうは、0.4457831 です。
今回は tidymodels パッケージを利用してみます。
まずは、library() 関数でパッケージを読み込みます。
はじめはロジスティクス回帰でやってみます。
Fitting and predicting with parsnip • parsnip
にある、logistic_reg() models の "glm" engine を参考にしてやってみます。
まず、モデルを生成します。
次にモデルをフィットさせます。
あ、approved はファクター型になっていないとダメなようです。
ファクター型に変換します。
もう一度、モデルをフィットします。
predict() 関数で df_test の approved を予測します。
予測結果をみてみましょう。
Tidy Characterizations of Model Performance • yardstick
を参考にしています。まずは、metrics() 関数を使ってみます。
正解率は 83.7% です。 kap というのは何かわからないです。
table() 関数で表を作成してみます。
(75 + 64) / (75 + 64 + 10 + 17) = 83.7349% です。
roc_auc() 関数も使ってみます。
ROC は 0.902 でした。
今回は以上です。
次回は、
です。
初めから読むには、
です。
今回のコードは以下になります。
#
# df をトレーニング用とテスト用に分ける
set.seed(179)
index <- sample(1:nrow(df), 500, replace = FALSE)
df_train <- df[index, ]
df_test <- df[-index, ]
#
# df_train と df_test の approved の比較
t.test(
df_train$approved,
df_test$approved
)
#
# tidymodels パッケージを読み込む
library(tidymodels)
#
# ロジスティクスモデル
logreg_cls_spec <-
logistic_reg() |>
set_engine("glm")
logreg_cls_spec
#
# モデルをフィット
set.seed(200)
logreg_cls_fit <- logreg_cls_spec |>
fit(approved ~ ., data = df_train)
#
# approved をファクター型の変数にする
df_train <- df_train |>
mutate(approved = factor(approved))
df_test <- df_test |>
mutate(approved = factor(approved))
#
# 再度、モデルをフィット
set.seed(200)
logreg_cls_fit <- logreg_cls_spec |>
fit(approved ~ ., data = df_train)
logreg_cls_fit
#
# df_test を予想する
logreg_cls_pred <- predict(logreg_cls_fit,
new_data = df_test)
logreg_cls_pred
#
# 予測結果を評価
logreg_cls_pred |>
mutate(truth = df_test$approved) |>
metrics(truth, .pred_class)
#
# 表
table(logreg_cls_pred$.pred_class, df_test$approved)
#
#
# ROC
bind_cols(
predict(logreg_cls_fit, df_test),
predict(logreg_cls_fit, df_test, type = "prob")
) |>
mutate(truth = df_test$approved) |>
roc_auc(truth, .pred_0)
#