Slide 25
Slide 25 text
テストデータについても、kの値で予測誤差がどのように変化するか確認する。
モデルのチューニング
trainErr=c() # テストデータの予測誤差を格納するためのベクトルを定義
for( i in k){
knnFit=knn3(x=training[,-1], # 学習データ
y=training[,1], # 学習データの正解ラベル
k=i)
# テストデータに対して予測を実行
class.res=predict(knnFit,testing[,-1],type="class")
# 学習データの予測誤差
testErr[i]=1-confusionMatrix(testing[,1],class.res)$overall[1]
}
# k ごとの学習データの予測誤差をプロット
plot(k,trainErr,type="p",col="#CC0000",pch=20)
# 平滑線を描画
lines(loess.smooth(x=k, trainErr,degree=2),col="#CC0000")
# k ごとの学習データの予測誤差をプロット
points(k,testErr,col="#00CC66",pch=19)
lines(loess.smooth(x=k,testErr,degree=2), col="#00CC66")
# legendを追加
legend("bottomright",fill=c("#CC0000","#00CC66"),
legend=c("training","test"),bty="n")
k の値が小さい場合は過学習を起こしている
ことが分かる。
⇒ k = 6 程度が最適