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

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

2009年の東京都の駅の乗車人数のデータの分析6 - Rでk-Nearest NeighborsとNaive Bayesによる判別

Bing Image Creator で生成:close up photo of narcissus flowers, background is small lake, forests and blue sky, photo

www.crosshyou.info

前回は判別分析(Classification)のためのトレーニング用のデータフレーム、テスト用のデータフレームを作成したところで終わりました。

今回はその続きで、k-Nearest Neighborsによる判別とNaive Bayesによる判別をしてみます。

まず、classパッケージを読み込みましょう。

そうしたら、knn()関数で予測します。

k = がハイパーパラメータですが、適当に3でやってみました。

caretパッケージのconfusionMatrix()関数で判別結果を確認します。

large = 0 のものは、29駅中、21駅を的中したので、的中率は72%です。

large = 1 のものは、21駅中、21駅を的中したので、的中率は100%です。

全体の的中率は84%で、Balanced Accuracyは、86.21%です。

けっこう良い判別結果ではないでしょうか?

続いて、Naive Bayesによる判別を行います。今回は、e1071パッケージのnaiveBayes()関数を使ってみます。

まず、e1071パッケージの読み込みをします。

naiveBayes()関数で予測モデルを生成します。

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

confusionMatrix()関数で結果を判定します。

large = 0 の的中率は、29駅中、23駅的中ですので、79.31%です。

large = 1 の的中率は、21駅中、18駅的中ですので、85.71%です。

全体の的中率は、82%、Balanced Accuracyは、82.51%でした。

Naive Bayesより、k-Nearest Neighbors のほうが成績がいいですね。

今回は以上です。

次回は、

 

www.crosshyou.info

です。

 

初めから読むには、

www.crosshyou.info

です。

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

#
# k-Nearest Neighborsで予測してみる
#
# classパッケージを読み込む
library(class)
#
# knn()関数で予測
pred_knn <- knn(train = df_train[ , -1], 
                test = df_test[ , -1], 
                cl = df_train$large, 
                k = 3)
#
# 判別結果
caret::confusionMatrix(pred_knn,
                        factor(df_test$large))
#
# Naive Bayesによる判別
#
# e1071パッケージを読み込む
library(e1071)
#
# naiveBayes()関数で判別モデルを生成
fit_nb <- naiveBayes(df_train[ , -1], factor(df_train$large),
                     laplace = 0.1)
fit_nb
#
# predict()関数で予測
pred_nb <- predict(fit_nb, df_test[ , -1], type = "class")
pred_nb
#
# 判別結果
caret::confusionMatrix(pred_nb, factor(df_test$large))
#