k-近邻算法

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
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容