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

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

2009年の東京都の駅の乗車人数のデータの分析7 - RでLogistinc RegressionとDecision Treeで判別分析(Classification)

Bing Image Creator で生成: wide photo shot of higher mountains, emerald green lakes, blue sky, photo

www.crosshyou.info

の続きです。今回はLogistic RegressionとDecision Treeで判別分析をしたいと思います。

まずは、glm()関数でLogistic Regressionをします。

各変数間の交差項や、変数の2乗項、3乗項を説明変数に加えました。

summary()関数でモデルの推定結果をみてみます。

step()関数で不必要な変数を削除します。

summary()関数でモデルを確認します。

ratioの2乗がなくなっています。

predict()関数で予測します。

予測結果は0 ~ 1 の値なので、0.5以上なら1、そうでないなら0にif_else()関数で変換しました。

判別結果をみてみましょう。

large = 0 のときは、29駅中、26駅が的中、

large = 1 のときは、21駅中、16駅が的中しました。

正解率は 84% です。Balanced Accuracy は 82.92% でした。

次は、Decision Treeで判別します。

パッケージは、C50を使いました。

C5.0()関数でモデルを生成します。

plot()関数で決定木のグラフを描きます。

total と ratio を使って判別していることがわかります。

predict()関数で予想します。

判別結果をconfusionMatrix()関数でみてみます。

large = 0 のとき、29駅中、25駅が的中、

large = 1 のとき、21駅中、16駅が的中、

全体の正解率は、82%、

Balanced Accuracy は81.2% でした。

今回は以上です。

初めから読むには、

www.crosshyou.info

です。

 

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

#
# Logistic Regressionによる判別
#
# glm()関数で予測モデルを生成
fit_glm <- glm(large ~ total + pass + ratio +
                 total:pass + total:ratio + pass:ratio +
                 I(total^2) + I(pass^2) + I(ratio^2) +
                 I(total^3) + I(pass^3) + I(ratio^3),
               data = df_train,
               family = binomial)
#
# fit_glmのサマリー
summary(fit_glm)
#
# step()関数で不要な変数を削除する
fit_glm2 <- step(fit_glm, trace = FALSE)
#
# fit_glm2のサマリー
summary(fit_glm2)
#
# 予測
pred_glm2 <- predict(fit_glm2, df_test, type = "response")
pred_glm2
pred_glm2 <- if_else(pred_glm2 > 0.5, 1, 0)
#
# 判別結果
caret::confusionMatrix(factor(pred_glm2),
                       factor(df_test$large))
#
# Decision Tree
#
# C50 パッケージの読み込み
library(C50)
#
# Decision Treeモデルを生成
fit_C5.0 <- C5.0(df_train[ , -1], factor(df_train$large))
#
# モデルのグラフ
plot(fit_C5.0)
#
# 予測
pred_C5.0 <- predict(fit_C5.0, df_test, type = "class")
pred_C5.0
#
# 判別結果
caret::confusionMatrix(pred_C5.0,
                       factor(df_test$large))
#