R語言的二分法和knn演算法
test<-iris[-sample(1:nrow(iris),nrow(iris)*0.7,replace = FALSE),]
matrix<-NULL
knn<-function(trans,test,k){
test_temp<-NULL
predict_temp<-NULL
#計算測試元祖到這K個訓練元祖的距離,
#即用test[i,]與trans的每一列對應的值相減平方
#訓練元組標號和距離存入優先順序佇列
for(i in 1:nrow(test)){
distance = apply(trans[,1:4],1,function(x)sqrt((sum(test[i,1:4]-x)^2)))
df<-data.frame(trans$Species,distance)
#按距離遞增順序排序
newdf<-df[order(df$distance),]
#選取與當前距離最小的k個點
#確定K 個點所在類別出現的頻率
# print(newdf[1:k,1])
test_temp<-rbind(test_temp,as.character(test[i,5]))
predict_temp<-rbind(predict_temp,names(which.max(table(newdf[1:k,1]))))
}
matrix<-cbind( test_temp,predict_temp)
matrix<-as.data.frame(matrix)
names(matrix)<- c("primite","predict")
# factor(matrix)
matrix
count<-nrow(matrix)
Accurany<- nrow(matrix[which(matrix$primite==matrix$predict),])/count
Accurany
}
knn(trans,test,9)