最近在学习k-近邻算法,就记录一下,如有错误,欢迎指出。
KNN算法是一个有监督无训练过程的算法,主要用于解决分类问题。
KNN算法虽然是没有训练过程,但也将数据分为训练集和测试集。它的工作机制非常简单,给定测试样本,基于某种距离度量在训练集中找出与其最接近的k个训练样本,然后再根本这k个样本的标签信息来对测试样本进行预测。
下面放一个小例子来帮助大家更深入的了解KNN算法的求解过程,语言为python。
第一步:准备数据
'''
def createDataSet():
group = np.array([[1.0,1.1],[0,0],[1.0,1.0],[0,0.1]])
labels = ['A','B','A','B']
return group, labels
'''
可通过运行```createDataSet() ```得到数据,测试数据为[0.1,0.0].
第二步:编写KNN算法
```
def classify0(newData,dataSet,label,k):
lendata=dataSet.shape[0]
data= np.tile(newData,(lendata,1))
diff=(data-dataSet)**2
diffsum=(diff.sum(axis=1))**0.5 #欧氏距离
print(diffsum)
sortdistance=np.argsort(diffsum).tolist() #输出排序的索引值
print(sortdistance)
Count={}
for iin range(k):
votelabel=label[sortdistance.index(i)]
Count[votelabel]=Count.get(votelabel,0)+1
a=sorted(Count.items(),key=lambda x:x[0],reverse=True)
return a[0][0]
```
打印分类结果```print(classify0([0,0.2],createDataSet()[0],createDataSet()[1],3))```
输出结果为:B
网友评论