1.简介
K-近邻算法(K-Nearest Neighbor, KNN),属于监督学习,是一中基本分类与回归方法。k 近邻法的输入为实例的特征向量,对应于特征空间的点;输出为实例的类别,可以取多类, k 近邻法假设给定一个训练数据集,其中的实例类别已定,分类时,对新的实例,根据其 k 个最近邻的训练实例的类别,通过多数表决等方式进行预测。
2.基本要素
①K值的选择
②距离量度
(1)欧氏距离
(2)曼哈顿距离
③分类决策规则
3.实现knn算法的代码实现
from numpy import * import operator #训练样本集以及对应的类别 def createDateSet(): group = array([[3,53],[2,48],[1,49],[101,10],[99,5],[98,2]]) labels = ['西苑','西苑','西苑','万人','万人','万人'] return group,labels def classify(inX, dataSet, labels, k): #dataSetSize是训练样本集数量 dataSetSize = dataSet.shape[0] #距离计算——欧式距离公式 #tile函数,把inX变成能与dataSet相减的二维数组 diffMat = tile(inX, (dataSetSize, 1)) - dataSet sqDiffMat = diffMat ** 2 #axis=1是列相加求和,即得到(x1-x2)^2+(y1-y2)^2的值 sqDistances = sqDiffMat.sum(axis = 1) distances = sqDistances ** 0.5 #按照距离递增次序排序,返回下标 sortedDistIndicies = distances.argsort() #选择距离最小的k个点 classCount = {} for i in range(k): voteILabel = labels[sortedDistIndicies[i]] classCount[voteILabel] = classCount.get(voteILabel,0) + 1 #按照字典里的关键字的值排序,reverse=True降序排序 sortedClassCount = sorted(classCount.items(), key = operator.itemgetter(1), reverse = True) #返回类别最多的标签 return sortedClassCount[0][0] 测试算法: i = 0 print("训练样本集") group, labels = createDateSet() for item in group: print('食堂%c:一楼%3d次 二楼%3d次 食堂选择: %s'%(chr(ord('A')+i),item[0],item[1],labels[i])) i += 1 print("\n测试数据集") myTests = array([[18,90],[20,66],[50,23]]) myLabels = [] for i in range(3): myLabels.append(classify(myTests[i], group, labels, 3)) print('食堂%c:一楼%3d次 二楼%3d次 食堂选择: %s'%(chr(ord('A')+i),myTests[i][0],myTests[i][1],myLabels[i])) 测试结果:
标签:group,classCount,近邻,labels,算法,print,3d From: https://www.cnblogs.com/Moonee/p/16830658.html