第2章 K近邻算法 代码code2-1 解析

本文详细解析了K近邻算法的实现代码,介绍了输入参数包括未知类别的样本特征向量、训练样本集、标签向量及选择最近邻的数量。通过具体步骤说明如何计算样本之间的距离并确定未知样本的类别。

第2章 K近邻算法 代码code2-1 解析

def classify0( inX, dataSet, labels, k ):
      ''' 1、inX    :类别未知的样本的特征向量(行向量),即自变量向量
          2、dataSet:训练样本集
          3、labels : 标签向量
          4、k      :用于选择最近邻的数 '''
      dataSetSize = dataSet.shape[0]
      ''' dataSetSize为dataSet中的样本量 '''
      diffMat = tile(inX, (dataSetSize,1)) - dataSet
      ''' numpy中的tile函数将行向量inX重复dataSize次,排成一列(每行完全
          相同),这样得到与dataSet行数和列数相同的数组,可以与dataSet
          做差运算,diffMat的第i行为inX与dataSet的第i行的对应元素的差值 
      '''
      sqDiffMat = diffMat**2
      ''' 将diffMat中的每一个元素求平方 '''
      sqDistances = sqDiffMat.sum(axis=1)
      ''' 将数组sqDiffMat按行求和 '''
      distances = sqDistances**0.5
      sortedDistIndicies = distances.argsort() 
      ''' 返回distances排序(升序)后的序号。sortedDistIndices的第i个
          元素为distances中的元素排序(升序)后的第i个元素在distances中的序位号 '''    
      classCount={}          
      for i in range(k):
          voteIlabel = labels[sortedDistIndicies[i]]
          ''' voteIlabel为距离inX第i近的训练样本的类别标签 '''
          classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1
          ''' 若classCount中没有voteIlabel这个键,则字典方法“get”返回0,
              否则返回键voteIlabel的值 '''
      sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)
      ''' Dict.iteritems() 用于返回一个键值对“迭代项”,如:
          D = {'y': 7, 'x': 3, 's': 6, 'z': 5}
          Item = D.iteritems()
          Item.next()
          Item.next()的运行
          结果为('y', 7),('x', 3). 
          key=operator.itemgetter(1) 表示安照返回的“迭代项”的第1个元素排序,如
          L = [('a',2,'F'),('d',1,'E'),('c',3,'O'),('e',8,'W'),('b',6,'P')]
          sorted(L,key = operator.itemgetter(2))
          结果:[('d', 1, 'E'), ('a', 2, 'F'), ('c', 3, 'O'), ('b', 6, 'P'), ('e', 8, 'W')]
          '''
      return sortedClassCount[0][0]

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值