ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

numpy实现k近邻法

2021-08-15 20:31:46  阅读:169  来源: 互联网

标签:lable index 实现 近邻 50 range train numpy best


import numpy as np  import matplotlib.pyplot as plt   w=250 train=np.random.randint(-300,300,(w,4)) train=train.astype(float) train_lable=np.zeros(w) def kzhe():     w1=np.zeros((50,4))     w1_lable=np.zeros(50)     for i in range(50):         w1[i]=train[i+200]         w1_lable[i]=train_lable[i+200]     i=3     for j in range(4):         train[50*(i+1):50*(i+2),:]=train[50*i:50*(i+1),:]         train_lable[50*(i+1):50*(i+2)] =train_lable[50*i:50*(i+1)]         i=i-1     train[0:50,:]=w1     train_lable[0:50]=w1_lable   for i in range(4):     train[:,i]=(train[:,i]-train[:,i].mean())/train[:,i].std() for i in range(w):     if 1*train[i,0]+2*train[i,1]+3*train[i,2]+4*train[i,3]-1>0:         train_lable[i]=1     else:         train_lable[i]=-1 def knn(index,k,sig):     dis=np.zeros(200)     disl=[]     for i in range(200):         dis[i]=(train[index,0]-train[i,0])*(train[index,0]-train[i,0])+(train[index,1]-train[i,1])*(train[index,1]-train[i,1])+(train[index,2]-train[i,2])*(train[index,2]-train[i,2])+(train[index,3]-train[i,3])*(train[index,3]-train[i,3])         disl.append(dis[i])     target=[]     weight=[]     for i in range(k):         target.append(disl.index(min(disl)))         weight.append(np.exp(-min(disl)**2/(2*sig**2)))         disl[disl.index(min(disl))]=float('inf')     l1=0     l2=0     for i in range(k):         if train_lable[target[i]]==1:             l1=l1+1*weight[i]         else:             l2=l2+1*weight[i]     if l1>l2 :         return 1     else:         return -1
best_score=-1 best_k=0 best_wid=0
for k in range(10):     for wid in range(20):         if k!=0 and wid !=0:             sum2=0             for j in range(5):                 kzhe()                 for i in range(50):                     lable=knn(i+200,k,wid)                     if lable==train_lable[i+200]:                         sum2=sum2+1                              if best_score<sum2*1.0/250:                 best_score=sum2*1.0/250                 best_k=k                 best_wid=wid             print("准确率",sum2*1.0/250,"k值:",k,"宽度:",wid) print(best_score,best_k,best_wid)

标签:lable,index,实现,近邻,50,range,train,numpy,best
来源: https://www.cnblogs.com/hahaah/p/15144611.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有