KNN
計算樣本之間的距離惜浅,若最近的三個樣本的類別為A,則為A類
常用的距離函數(shù)有歐式距離,曼哈頓距離,閔可夫斯基距離脖卖,堪培拉距離
library(mlbench)#用數(shù)據(jù)而已
library(class)#knn的包
library(ggplot2)
library(pROC)#畫roc
data('PimaIndiansDiabetes2',package = 'mlbench')
ncol(PimaIndiansDiabetes2)
nrow(PimaIndiansDiabetes2)
str(PimaIndiansDiabetes2)##檢查數(shù)據(jù)框格式
sapply(PimaIndiansDiabetes2,function(x) sum(is.na(x)))#計算NA數(shù)據(jù)的數(shù)量
#大量缺失值,考慮移除損失嚴(yán)重的特征
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)#中心化后標(biāo)準(zhǔn)化巧颈,可自選參數(shù)
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)#第一個參數(shù)為真實分類畦木,第二個參數(shù)為預(yù)測概率
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)