KNN算法
###### knn 算法 ########## ######## KNN 在R中使用到的包有“class包”,“gmodels包”“FNN”“rKnn”##### ##### 以iris为例 ############## library(class) #####划分数据及,训练集,70%随机抽样###### index=sample(1:nrow(iris),0.7*nrow(iris)) index table(iris[index,5]) #####分布 train=iris[index,-5] test=iris[-index,-5] cltr=iris[index,5]####单独定义类别 clte=iris[-index,5] ##### knn 计算 ####### knn k=3 #####设定k 值 ###### fit1=knn(train=train,test=test,cl=cltr,k=k) fit1 summary(fit1) table(clte,fit1) accuracy = (18+10+15)/45;accuracy ####准确率 ### 模型评估 ########### ####### ROC curve 只能对两分类操作############## library(pROC) # 例 数据集aSAH data(aSAH); aSAH model=roc(aSAH$outcome, aSAH$s100b, levels=c("Good", "Poor")) plot.roc(aSAH$outcome, aSAH$s100b) plot(model, 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) #########练习######### d = aSAH[,c(2,4:7)];d index = sample(1:nrow(d),0.7*nrow(d));index table(d[index,5]) ########## leave-one out cross validation ####### data(iris3) train <- rbind(iris3[,,1], iris3[,,2], iris3[,,3]) cl <- factor(c(rep("s",50), rep("c",50), rep("v",50))) knn.cv(train, cl, k = 3, prob = TRUE) attributes(.Last.value) ##########k值取值 k=seq(1,9,by=2) acc=NULL for(i in 1:length(k)) { fit=knn(train=train,test,cltr,k=k[i]) A=as.matrix(table(fit,clte)) s=0 for(j in 1:nrow(A)) {s=s+A[j,j]} acc[i]=s/sum(A) } plot(k,acc,type="l",ylim=c(0,1))