#KNN变量加权

1.  myfun=function(a=x1,b=x2,c=wi)  #构造myfun函数计算加权欧式距离  



2.  {dis2=wi[1]*(a[1]-b[1])^2+wi[2]*(a[2]-b[2])^2+wi[3]*(a[3]-b[3])^2  



3.        +wi[4]*(a[4]-b[4])^2  



4.   dis=sqrt(dis2)  



5.   return(dis)  



6.  }  



7.  errRatio=vector()  



8.  for(m in 1:20){   #m为近邻个数  



9.    jc=vector()  



10.   for(q in -1:-4)  



11.   {fit=knn(train=newtrain[,q],test=newtest[,q],cl=blood_train[,5],k=m)  



12.    CT=table(blood_test[,5],fit)  



13.    errDeltex=c(errDeltex,(1-sum(diag(CT))/sum(CT))*100)  



14.   }  



15.   FI=errDeltex[-1]+1/4  #FI为变量重要性(k=m时)  



16.   wi=FI/sum(FI)          #wi为各变量权重(k=m时)  



17.   for(i in 1:95){        #i为测试集样本编号  



18.    jqdis=apply(newtrain,1,myfun,a=newtest[i,],c=wi)  



19.    jl=which(order(jqdis)<m+1)  #输出近邻位置(k=m时)  



20.    if(length(which(blood_train$donated[jl]==0))>length(which(blood_train$don          ated[jl]==1))){  



21.    jc=c(jc,0)} else {  



22.    jc=c(jc,1)}  



23.   }  



24.  CT=table(blood_test[,5],jc)  



25.  errRatio=c(errRatio,(1-sum(diag(CT))/sum(CT))*100)  



26. }  



27. plot(errRatio,type='b',xlab='近邻个数',ylab='错判率(%)',main='近邻数k与错判率')  

 

转载于:https://www.cnblogs.com/EXODUS1917/p/7638821.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值