1、首先需要一些训练样本集,例如一道问题(数据)及答案(标签),可以看做一条样本,那么多条,就是样本集
当然这里应该是一条数据及该数据所属的分类,该类别称为标签
2、现在我们已经知道数据与所属类别的对应关系
3、那么当我们想要输入一条数据时,就可以通过KNN算法,根据已知的对应关系,判断该数据的类别。
具体步骤如下:
1、收集训练样本集(数据<->类别)
2、输入所要判断的数据
3、计算该数据与训练样本的距离
4、将这些距离升序排列,取前K条训练样本,这就是kNN,k的出处
5、统计这k条训练样本数据所属类别及其对应的个数,然后降序排列
6、第一个类别便是输入数据的计算结果
python3例子如下:
from numpy import * import operator 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 def classify0(inX, dataSet, labels,k): # 欧式距离计算 dataSetSize = dataSet.shape[0] diffMat = tile(inX, (dataSetSize,1)) - dataSet sqDiffMat = diffMat ** 2 sqDistances = sqDiffMat.sum(axis=1) distances = sqDistances**0.5 sortedDisIndicies = distances.argsort() # 选择距离最小的k个点 classCount={} for i in range(k): voteIlabel = labels[sortedDisIndicies[i]] classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1 # 排序 sortedClassCount = sorted(classCount.items(),key=operator.itemgetter(1),reverse=True) return sortedClassCount[0][0] group, labels = createDataSet() print(classify0([0,0],group,labels,3))