K近邻算法实现-Python

from sklearn import datasets
import random
from collections import Counter
import numpy as np

irs=datasets.load_iris()
#使用的数据集是sklearn中自带的数据集
#梳理k近邻算法
dataset=irs.data[:,1:3]
datalabel=irs.target
idx_data=np.arange(0,len(datalabel))

#测试集
idx_test=random.sample(idx_data.tolist(),20)
idx_test=np.sort(idx_test)
testset=dataset[idx_test,:]
#训练集
idx_train=[]
for i in idx_data:
    try:
        idx_test.tolist().index(i)
    except:
        idx_train.append(i)
        
trainset=dataset[idx_train]

def fun_kss(sample,trainset,topnum):
    #求sample与训练数据的距离
    dst= np.square(trainset-sample)
    dst=dst.sum(axis=1)
    #计算排序后索引
    idxsort= np.argsort(dst)
    return idxsort[:topnum]
def fun_label(labelset,labelidx):
    labelrs=labelset[labelidx]
    rs={}
    for i in set(labelrs):
        rs[i]=labelrs.tolist().count(i)
    return max(rs,key=rs.get) 
    

prers=0
#k近邻算法
for i in range(len(testset)):
    idxsort= fun_kss(testset[i],trainset,topnum=5)
    labelrs= fun_label(datalabel, np.array(idx_train)[idxsort])
    #print('%s,%s'%(labelrs,datalabel[idx_test[i]]))
    if labelrs==datalabel[idx_test[i]]:
        prers+=1
print(prers)
print((prers/len(idx_test)*100))
 #break
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值