データサイエンス講義 3章「アルゴリズム」 その3
今回はk近傍法のコーディングについて。
- 作者: Rachel Schutt,Cathy O'Neil,瀬戸山雅人,石井弓美子,河内崇,河内真理子,古畠敦,木下哲也,竹田正和,佐藤正士,望月啓充
- 出版社/メーカー: オライリージャパン
- 発売日: 2014/10/25
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
3.2.2 k近傍法
■演習
こちらと全く同じことをする。
レベル1のR、その2 – RでK-NNパッケージを使ってみる - | OKEREKE-RL
【対象】
2次元正規分布を2種類作成し、トレーニングデータとテストデータに分類。
テストデータが正しく分類されるか測定。
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
#2種類のラベルが付与されたトレーニングデータを用意。
#k-nn法により、テストデータ分類
#対象:2次元正規乱数
# # ラベル1:平均(1,0)、分散は0.5(共分散は0)
# # ラベル2:平均(0,1)、分散は0.5(共分散は0)
#knn法を利用するために読み込む
library(class)
#多次元正規乱数作成に利用するために読み込む
library(MASS)
#ラベル1のデータ作成
mu1 <- c(1,0)
Sigma1 <- matrix(c(0.5,0,0,0.5),2,2)
datanum1 <- 200
dat1 <- mvrnorm(datanum1,mu1,Sigma1)
#ラベル2のデータ作成
mu2 <- c(0,1)
Sigma2 <- matrix(c(0.5,0,0,0.5),2,2)
datanum2 <- datanum1
dat2 <- mvrnorm(datanum2,mu2,Sigma2)
#作成したデータのプロット
#xlim,ylimにて、表示スケールを調整
plot(dat1,col="red",xlim=c(-2,3),ylim=c(-2,3))
#作成したグラフに上書きするおまじない
par(new = TRUE)
points(dat2,col="blue")
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
以下のようなデータプロットが出力。
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
#トレーニングデータ(データ数は100)
trainnum <- 100
train <- rbind(dat1[1:trainnum,],dat2[1:trainnum,])
#テストデータ
test <- rbind(dat1[(trainnum+1):datanum1,],dat2[(trainnum+1):datanum2,])
#ラベル付け
label <- factor(c(rep("red",100),rep("blue",100)))
#kの値を設定
k <- 1
#knn法
train_result <- knn(train,test,label,k,prob=TRUE)
#結果集計
(cross<-table(train_result,label))
#評価指標は、再現率を利用
(rate<-(cross[1,1]+cross[2,2])/( (datanum1-100)*2) )
#最適な評価指標となるkを算出
for(i in 2:50){
train_resulttmp <- knn(train,test,label,i,prob=TRUE)
crosstmp<-table(train_resulttmp,label)
ratetmp<-(crosstmp[1,1]+crosstmp[2,2])/((datanum1-100)*2)
#最適のkが更新された場合にkの値と評価指標を算出。
if(rate<ratetmp){
k<-i
cross<-crosstmp
rate<-ratetmp
cat("i:", i, " \trate:",ratetmp,"\n")
}
}
#最適化したkについて、分類結果を出力
cross
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
今回は、k=14の場合が最適。結果更新の過程は以下。
i: 3 rate: 0.82
i: 5 rate: 0.83
i: 6 rate: 0.835
i: 8 rate: 0.84
i: 13 rate: 0.85
i: 14 rate: 0.855
k=14の時の分類結果は以下。
label
train_resulttmp blue red
blue 83 12
red 17 88
■参考にしたページ(コーディング)
knn法を実行するknn関数の引数等について。
http://cran.r-project.org/web/packages/class/class.pdf
plot関数、軸スケールの変更方法。
http://cse.naro.affrc.go.jp/takezawa/r-tips/r/48.html
多次元正規乱数を作成するmvrnorm関数について。
R: Simulate from a Multivariate Normal Distribution
クロス集計表の作成。
F.1.11. クロス集計表 | R Financial & Marketing Library
変数と文字を混合して表示させるcat関数。