KNN算法实现

 1 import numpy as np
 2 
 3 def diy_KNN(x_train,dataset,labels,k):
 4     datasetsize=dataset.shape[0]
 5     #****计算距离****
 6     diff=np.tile(x_train,(datasetsize,1))-dataset
 7     var=diff**2
 8     var_distance=var.sum(axis=1)
 9     distance=var_distance**0.5
10     #****计算距离****
11     sorted_data=distance.argsort()
12     #提取排序标签
13     classcount={}
14     for i in range(k):
15         last_label=labels[sorted_data[i]]
16         classcount[last_label]=classcount.get(last_label,0)+1
17         #最小的k个分量依次按标签归类,存入classcount中
18 
19     sorted_classcount=sorted(classcount.items(),key=lambda x:x[1])
20     return sorted_classcount[0][0]

极为简单的机器学习算法,参考《机器学习实战》的算法源代码。算法还可以进一步矢量化,从第14行开始改动:

k_sorted_data=sorted_data[:k]
#提取前k个点
last_label=labels[tuple(y),]
#前k个点对应的标签
classcount_1=np.sum(last_label)
classcount_0=len(last_label)-classcount_1
#由于标签为0-1二分类,因此可以直接加和求1标签个数,对于多分类,则:
#classcount_2=(np.sum(last_label)-np.sum(np.clip(last_label,0,1.9))*10
#这句话对应0-1-2三类标签,本句意思是首先将标签全部累加求得一值,然后将2标签全部改为1.9并累加又求得一值,最后将上述两个值相减,求得的值乘以10,这样就得出了2标签的全部个数

矢量化完毕

posted @ 2017-10-12 15:02  尤格索托斯  阅读(172)  评论(0)    收藏  举报