首页 > 编程语言 >K-近邻算法

K-近邻算法

时间:2022-10-27 00:33:16浏览次数:50  
标签:group classCount 近邻 labels 算法 print 3d

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

相关文章