KNN:寻找与要分类样本距离最近的K个训练样本,之后以投票法选出K个训练样本中最多的类别即该分类样本类别。
关键代码
1 def classify0(inX, dataSet, labels, k): 2 dataSetSize = dataSet.shape[0] 3 diffMat = tile(inX, (dataSetSize, 1)) - dataSet # 求距离 4 sqDiffMat = diffMat ** 2 5 sqDistances = sqDiffMat.sum(axis=1) 6 distances = sqDistances ** 0.5, 7 sortedDistIndicies = distances.argsort()# 按照距离由近到远排序,返回index序列 8 classCount = {} 9 for i in range(k): #投票法选出K个点中最多的类别并返回该类别 10 voteIlabel = labels[sortedDistIndicies[i]] 11 classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1 12 sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True) 13 return sortedClassCount[0][0]
sklearn包中有相关的API接口:
KNeighborsClassifier,
RadiusNeighborsClassifier
为最近邻分类,一个参数为K个点,一个为半径。
KNeighborsRegressor,
RadiusNeighborsRegressor 为最近邻回归。选择K个点或者半径R内点平均值作为待分类点的标签。