2.1 样例代码注解
参考代码:
from numpy import *
import operator
def classify0(inX, dataSet, labels, k):
dataSetSize = dataSet.shape[0] #获取矩阵行数
a = tile(inX, (dataSetSize,1))
diffMat = tile(inX, (dataSetSize,1)) - dataSet #tile创建一个同shape的矩阵(即把inX复制dataSetSize遍), 两矩阵相减,得到差值(计算inX到每个点的距离)
sqDiffMat = diffMat**2 #差值矩阵平方
sqDistances = sqDiffMat.sum(axis=1) #然后求和,得到距离的平方
distances = sqDistances**0.5 #然后开方得到距离
sortedDistIndicies = distances.argsort() #argsort()返回排序后的原值的索引
classCount={}
for i in range(k):
voteIlabel = labels[sortedDistIndicies[i]] #根据sortedDistIndicies[i]得到前k个数的原值索引,从而用该索引取到相应label
classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1 #使用字典统计相应label数量
sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True) #进行排序,最多的那个认为是结果
return sortedClassCount[0][0]
def createDataSet():
group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
labels = ['A','A','B','B']
return group, labels