KNN
计算样本之间的距离,若最近的三个样本的类别为A,则为A类
常用的距离函数有欧式距离,曼哈顿距离,闵可夫斯基距离,堪培拉距离
library(mlbench)#用数据而已
library(class)#knn的包
library(ggplot2)
library(pROC)#画roc
data('PimaIndiansDiabetes2',package = 'mlbench')
ncol(PimaIndiansDiabetes2)
nrow(PimaIndiansDiabetes2)
str(PimaIndiansDiabetes2)##检查数据框格式
sapply(PimaIndiansDiabetes2,function(x) sum(is.na(x)))#计算NA数据的数量
#大量缺失值,考虑移除损失严重的特征
tmp<-(PimaIndiansDiabetes2)
tmp$insulin<-NULL
tmp$triceps<-NULL
tmp<-na.omit(tmp)#去掉有na值的样本
str(tmp)
set.seed(2020)
train<-sample(1:nrow(tmp),600,FALSE)
data<-tmp[,-7]
data<-scale(data)#中心化后标准化,可自选参数
fit<-knn (data[train,],
data[-train,],
tmp$diabetes[train],
k=6,
prob=TRUE)
tab<-table(fit,tmp$diabetes[-train])
attributes(fit)
t<-attr(fit,"prob")
rocobj<-roc(tmp$diabetes[-train],t)#第一个参数为真实分类,第二个参数为预测概率
plot(rocobj,print.auc=TRUE,auc.polygon=TRUE,grid=c(0.1,0.2),grid.col=c('green','red'),max.auc.polygon=TRUE,auc.polygon.col='skyblue',print.thres=TRUE)
image.png
网友评论