KNN算法[K-近邻]学习笔记


《机器学习实战》例子笔记

简单demo及学习注释

from numpy import *
import  operator  #运算符模块

group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
labels = ['A','A','B','B']
datasetSize = group.shape[0]

在这里插入图片描述

inX = [0,0] #待分类点
diffMat = tile(inX,(datasetSize,1)) - group #为什么要这样做? [[x1-x0,y1-y0],[x2-x0,y2-y0],...]

在这里插入图片描述
在这里插入图片描述

sqDiffMat = diffMat**2  #为什么要这样做? [(x-x0)^2,(y-y0)^2]

在这里插入图片描述

sqDiffMat.sum(axis=1) #每行求和 [(x1-x0)^2+(y1-y0)^2,(x2-x0)^2+(y2-y0)^2,...]
sqldistance = sqDiffMat.sum(axis=1)

在这里插入图片描述

distances = sqldistance**0.5  #开平方 [((x1-x0)^2+(y1-y0)^2)^0.5,((x2-x0)^2+(y2-y0)^2)^0.5,...]
distances  #该列表中储存所有已分类点对当前带分类点的距离

在这里插入图片描述

sortedDistIndicies = distances.argsort()  # 返回排序后(升续)的下标,表示已分类点距离待分类点由近到远的排序(距离越近,相似度越高)

在这里插入图片描述

classCount = {} #找出距离最近的几个点,找相同label累加计数最多的(即判定当前待分类点最相似类别)
for i in range(2):
    votelabel = labels[sortedDistIndicies[i]]
    classCount[votelabel] = classCount.get(votelabel,0) + 1 #分类计数加一,同一类则value+1,否则家里新的分类即新的key(label),value+1
print(sorted(classCount.items(),
                              key=operator.itemgetter(1),reverse=True)[0][0])

[Out] B
即(0,0)点按照KNN算法以及和已知label的点分类的结果为B类别。

其中已分类点如表所示

x y label
0 1.0 1.1 A
1 1.0 1.0 A
2 0.0 0.0 B
3 0.0 0.1 B

求距离公式为:

			 distance = ((X-X0)^2+(Y-Y0)^2)^0.5

另外还需要注意的是在dict的get方法:

	    def get(self, k, d=None): # real signature unknown; restored from __doc__
    """ D.get(k[,d]) -> D[k] if k in D, else d.  d defaults to None. """
    pass

猜你喜欢

转载自blog.csdn.net/zj19941201/article/details/83280710