什么是K-近邻算法?
定义:K-近邻算法采用测量不同特征值之间的距离方法进行分类,属于监督学习
(这里的特征值怎么理解,现在我的理解是可以是数值,可以之特征向量;对于数值很好理解,就是单位相同维数相同的一组数据,特征向量同样单位相同(可能不够严谨但是这么有利于理解),距离有很多种,可以是欧式距离,马氏距离等)
然后就是创建kNN.py的程序了,
from numpy import * import operator # 运算符模块 def createDataSet(): group = array([[1.0, 1.1], [1.0, 1.0], [0.0, 0.0], [0, 0.1]]) #定义array时一定注意()和[] labels = ['A', 'A', 'B', 'B'] return group, labels def classfy0(inX, dataSet, labels, k): #这里定义了函数有4个输入 一定注意k值不能大于总类别数-1 dataSetSize = dataSet.shape[0] #这里计算出dataSet的行数 diffMat = tile(inX, (dataSetSize, 1)) - dataSet # 输入数据inX与有标签数据的差,tile是复制dataSet这么多行 sqDiffMat = diffMat**2 # 对做差的结果进行平方 sqDistances = sqDiffMat.sum(axis=1) #同一行的元素相加 distances = sqDistances**0.5 # 这个就很好理解了开方 sortedDistIndicies = distances.argsort() # 这是对distances进行排序 classCount = {} # 定义一个字典,字典包含key和value for i in range(k): voteIlabel = labels[sortedDistIndicies[i]] # 这里选出k个类别数值 取值为0,1,...,k-1 classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1 # 这里很有必要的记录同一类别的个数 sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True) # 这是https://blog.csdn.net/qq_38669138/article/details/79094478上述程序语句的解释很清楚 return sortedClassCount[0][0] |
然后就可以运行了
import kNN group, labels = kNN.createDataSet() kNN.classify([0., 0.], group, labels, 3) |
运行就有结果了