zoukankan      html  css  js  c++  java
  • 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字典的第二个元素的次序对元组进行排序。此处的排序为逆序,即按照从最大到最小次序排序,最后返回发生频率最高的元素标签,即就是输入向量所属分类。

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

  • 相关阅读:
    初识ABP vNext(8):ABP特征管理
    初识ABP vNext(7):vue身份认证管理&租户管理
    初识ABP vNext(6):vue+ABP实现国际化
    初识ABP vNext(5):ABP扩展实体
    初识ABP vNext(4):vue用户登录&菜单权限
    【Flutter 混合开发】嵌入原生View-iOS
    【Flutter 混合开发】嵌入原生View-Android
    使用Flutter完成10个商业项目后的经验教训
    谷歌发布Flutter Alpha:支持Windows
    【Flutter 实战】大量复杂数据持久化
  • 原文地址:https://www.cnblogs.com/sunfie/p/6724583.html
Copyright © 2011-2022 走看看