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标签的全部个数
矢量化完毕

浙公网安备 33010602011771号