KNN算法demo(R)

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))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章