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))