• Python学习之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))-dataSet
    13     sqDiffMat = diffMat**2
    14     sqDistances = sqDiffMat.sum(axis=1)
    15     distances = sqDistances**0.5
    16     # 返回值所在的索引
    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)+1
    23     print classCount
    24     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字典的第二个元素的次序对元组进行排序。此处的排序为逆序,即按照从最大到最小次序排序,最后返回发生频率最高的元素标签,即就是输入向量所属分类。

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

  • 相关阅读:
    Eclipse CDT Linux下内存分析 实战历险
    .Net元编程【Metaprogramming in NET】 序-翻译
    go语言和资料
    代码提交 【转】
    两本有意思的书【代码的未来、淘宝技术这十年】
    C/C++构建系统 GNU autotool
    C/C++构建系统 -工具汇总
    使用Java语言开发微信公众平台(四)——图文消息的发送与响应
    Onsen UI 前端框架(二)
    Maven项目搭建(一):Maven初体验
  • 原文地址:https://www.cnblogs.com/sunfie/p/6724583.html
Copyright © 2020-2023  润新知