zoukankan      html  css  js  c++  java
  • 《机器学习实战》---第二章 k近邻算法 kNN

    下面的代码是在python3中运行,

     1 # -*- coding: utf-8 -*-
     2 """
     3 Created on Tue Jul  3 17:29:27 2018
     4 
     5 @author: Administrator
     6 """
     7 
     8 from numpy import *    #NumPy
     9 import operator        #运算符模块
    10 
    11 def createDataSet():   #这个只是导入数据的函数
    12     group=array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])  #这个是4行2列的数组
    13     labels=['A','A ','B','B']
    14     return group ,labels
    15 
    16 def classify0 (inX,dataSet,labels,k) : #这个是k近邻算法的实现,要注意传入的参数有哪些.
    17 #1,用于分类的输入向量inX;2,输入的训练样本集dataSet;3,标签向量labels;4,最后的参数k用于选择最近邻居的数目;
    18     dataSetSize=dataSet.shape[0]               #其中标签向量的元素数目和矩阵dataSet的行数相同.
    19     diffMat=tile(inX,(dataSetSize,1))-dataSet  #这里是调用了numpy的函数,tile   diffMat已经是数组了   下面就是一些算法了(欧式距离的算法). 这里就是数组运算了,为了避免使用过多的for,这样可能会提升运行速度?
    20     sqDiffMat=diffMat**2                       #对数组diffMat的每个元素进行平方. python的写法就是这样简单.
    21     sqDistances=sqDiffMat.sum(axis=1)          #axis=1,表示的是按行相加. axis=0表示按列相加.      
    22     distances=sqDistances**0.5                 #这个是开平方
    23     sortedDistIndicies=distances.argsort()     #返回的是从小到大的索引.关于变量的建立,还是把我不准,这个直接给了个变量名,并没有标注类型[],比如最小的数据是在第3个位置,就是2,那么第一个元素值就是2
    24     classCount={}
    25     for i in range(k):                         #这里可以认为是投票算法,要弄清它的输入和输出是什么.                
    26         voteIlabel=labels[sortedDistIndicies[i]]  #确定前k个距离最小的主要分类,sortedDistIndicies[i]其实返回的是样本的位置,
    27         classCount[voteIlabel]=classCount.get(voteIlabel,0)+1
    28     sortedClassCount=sorted(classCount.items(),key=operator.itemgetter(1),reverse=True) #把'iteritems'改成了tiems,就可以在python3上运行了.
    29     return sortedClassCount[0][0]              #返回发生频率最高的,标签,,,,注意,这里返回的是标签,其实我们一直想要得到的也是某个东西的标签.返回的是我们想要的东西.
    30     
    31 
    32 
    33 
    34 
    35 group,labels=createDataSet()
    36 print(group)
    37 print(labels)
    38 
    39 a=classify0([0,0],group,labels,3)
    40 print(a)
    View Code



    运行结果

  • 相关阅读:
    github pages 正确访问方式
    jetty 热部署
    mysql 距离函数
    通过微信公众号ID生成公众号的二维码
    SQL Server 数据库备份失败解决方法
    js 替换部分内容为星号
    mysql 允许远程登录
    nginx 跨域配置
    两台阿里云服务器之间数据迁移
    新装修入住常识有什么
  • 原文地址:https://www.cnblogs.com/chulin/p/9259956.html
Copyright © 2011-2022 走看看