Python学习之k-近邻算法,,1. K-近邻算法


1. K-近邻算法

 1 # coding=utf-8 2 from numpy import *  3 import operator 4  5 def createDataSet(): 6     group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]]) 7     labels = [‘A‘,‘A‘,‘B‘,‘B‘] 8     return group,labels 9 10 def classify(inX,dataSet,labels,k):11     dataSetSize = dataSet.shape[0]12     diffMat = tile(inX,(dataSetSize,1))-dataSet13     sqDiffMat = diffMat**214     sqDistances = sqDiffMat.sum(axis=1)15     distances = sqDistances**0.516     # 返回值所在的索引17     sortedDistIndices = distances.argsort()18     classCount={}19     for i in range(k):20         # 根据索引获取其对应的类别标签21         voteIlabel = labels[sortedDistIndices[i]]22         classCount[voteIlabel] = classCount.get(voteIlabel,0)+123     print classCount24     sortedClassCount = sorted(classCount.iteritems(),key=operator.itemgetter(1),reverse=True)25     return sortedClassCount[0][0]26 27 def main():28     (group,labels)=createDataSet()29     print classify([0.8,1.5],group,labels,3)30 31 if __name__=="__main__":32     main()

k-近邻算法的整体流程为:

  (1) 计算已知类别数据集中的点与当前点之间的距离;
  (2) 按照距离递增次序排序;
  (3) 选取与当前点距离最小的k个点;
  (4) 确定前k个点所在类别的出现频率;
  (5) 返回前k个点出现频率最高的类别作为当前点的预测分类

  classify() 函数有 4 个输人参数 : 用于分类的输入向量inX,输入的训练样本集dataSet,标签向量labels,最后的参数k表示用于选择最近邻近的数目,其中输入向量的元素数目和矩阵dataSet的行数相同,首先计算向量和矩阵向量元素之间的距离,然后按照从小到大的顺序对结果进行排序,确定前 k 个距离最小元素所在的主要分类(输入参数k总正整数);最后,将classCount字典分解为元组列表,然后使用程序第二行导入运算符模块的itemgetter方法 ,按照classCount字典的第二个元素的次序对元组进行排序。此处的排序为逆序,即按照从最大到最小次序排序,最后返回发生频率最高的元素标签,即就是输入向量所属分类。

  最近正在看《机器学习实战》,顺便汇总一下其中的小例子,书籍很好,推荐大家阅读!

Python学习之k-近邻算法

评论关闭