工作原理: 存在训练样本集,并且样本集中每个数据都存在标签,输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似(最近邻)的分类标签。 一般来说只选择前k个最相似的数据,k是通常不大于20的整数。
伪代码:
1. 计算已知类别数据集中的点与当前点之间的距离 2. 按照距离递增次序排序 3. 选取与当前点距离最小的k个点 4. 确定前k个点所在类别的出现频率 5. 返回前k个点出现频率最高的类别作为当前点的预测分类label包含每个数据点的标签信息,label包含的元素个数等于Group矩阵行数。
inX用于分类的输入向量 dataSet输入的训练样本集 labels是标签向量 k表示选择最近邻居的数目
tile(A,rep) rep:A沿着各个维度重复的次数(由外至内)
Tile详细用法参考:
https://blog.csdn.net/cszhang570221322/article/details/85107935?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param
将classCount字典分解为元组列表,然后用item方法,按照第二个元素的次序对元组进行排序,此处的排序为逆序。
与书上代码不同处: 1.classCount.iteritems()改为classCount.item() 2.print(classify0([0,0],group,labels,3))输出B 3.diffMat = tile(inX, (dataSetSize,1)) - dataSet改为diffMat = np.tile(inX, (dataSetSize,1)) - dataSet 调用numpy