crosshyou

主にクロス表(分割表)分析をしようかなと思いはじめましたが、あまりクロス表の分析はできず。R言語の練習ブログになっています。

都道府県別の図書館数・博物館数・社会体育施設数のデータ分析5 - R言語のknn関数でk-NN algorithm

 

www.crosshyou.info

 の続きです。

今回は、「Machine Learning with R: Expert techniques for predictive modeling 3rd Edition」という本を参考にして、k-NN algorithmで人口がLargeがどうかを判定してみたいと思います。

コロナウイルスの影響で本屋さんに行けないので、Packtで購入した本です。まだ半分くらいしか読んでいません。

k-NN algorithmはk-Nearest Neighbor algorithmの略だそうです。classパッケージの中のknn関数 を使いますので、classパッケージを読み込みます。

f:id:cross_hyou:20200429202754j:plain

k-NN algorithmを実行するために、トレーニング用のデータフレームとテスト用のデータフレームを用意します。トレーニング用のデータは、2015年度のデータで、テスト用のデータは2011年度のデータにしました。

f:id:cross_hyou:20200429202947j:plain

k-NN algorithmは各変数を標準化したほうが良い結果が出るらしいので、scale関数で標準化します。

f:id:cross_hyou:20200429203107j:plain

最小値が0.000、最大値が1に標準化しました。

同じように、2011年度のデータから必要な変数を抜き出します。

f:id:cross_hyou:20200429203313j:plain

こちらも同じように、scale関数で標準化します。

f:id:cross_hyou:20200429203426j:plain

これでknn関数を使う準備完了です。

早速、knn関数を実行してみます。

f:id:cross_hyou:20200429203551j:plain

confusionMatrix関数でどれだけ予測が正確かを見てみます。

f:id:cross_hyou:20200429203716j:plain

予測でLargeでないと判断し、実際もLargeでなかったのが33個、予測でLargeと判断し、実際もLargeだったのが8個です。正解率は、(33+8)/47=87.23%です。

どこがLaregeと予測したのか見てみましょう。

f:id:cross_hyou:20200429204138j:plain

埼玉県、千葉県、東京都、神奈川県、愛知県、大阪府、兵庫県、福岡県の8つは正しくLargeと判断できました。京都府と沖縄県を間違ってLargeと判断して、北海道、茨城県、静岡県、広島県を間違ってLargeでないと判断していますね。

今回は以上です。