# 学習データ 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 程度が最適