1.载入相关包
library("class")
#install.packages("kknn")
library(kknn)
library(rpart)
library(rpart.plot)
library(skimr)
library(pROC)
library(caret)
2.生成数据
set.seed(2022)
x1<-runif(60,min=-1,max=1)
x1
x2<-runif(60,min=-1,max=1)
x2
y<-sample(c(0,1),size=60,replace=TRUE,prob=c(0.3,0.7))
y
plot(density(y,from=-1,to=2))
knndata<-data.frame(x1,x2,y)
sampleid<-sample(x=1:60,size=18)
sampleid
-sampleid
datatest<-knndata[sampleid,]#十分之三的样本进入测试集
datatrain<-knndata[-sampleid,]#十分之七的样本进入训练集,训练集用来生成模型
summary(datatrain)
skim(datatrain)
3、绘制散点图
plot(x1,y,col="blue")
par(new=TRUE)
plot(x2,y,col="green")
par(mfrow=c(1,2))#mfrow表示几行几列作图
plot(knndata[,1:2],pch=knndata[,3]+1,cex=0.8,xlab="x1",ylab="x2",main="全部样本")
plot(datatrain[,1:2],pch=datatrain[,3]+1,cex=0.8,xlab="x1",ylab="x2",main="训练样本和测试样本")
points(datatest[,1:2],pch=datatest[,3]+16,cex=0.8,col="red")
4、全样本错判率
errratio<-vector()
for(i in 1:30){
knnfit<-knn(train=knndata[,1:2],test=knndata[,1:2],
cl=knndata[,3],k=i)
CT<-table(knndata[,3],knnfit)
errratio<-c(errratio,(1-sum(diag(CT))/sum(CT))*100)}#样本错判率
errratio
par(mfrow=c(1,1))
plot(1:30,errratio,lty=2,col="red",type="l",xlab="全样本近邻个数K",
ylab