zoukankan      html  css  js  c++  java
  • 【机器学*】k*邻算法-01

    k临*算法(解决分类问题):

      已知数据集,以及该数据对应类型

      给出一个数据x,在已知数据集中选择最接*x的k条数据,根据这k条数据的类型判断x的类型

    具体实现:

    from numpy import *
    import operator
    def createDataSet():
        group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])  #已知数据集
        labels = ['A','A','B','B']  #已知数据集对应的类型
        return group,labels
    
    def classify0(inX,dataSet,lables,k):
        dataSetSize=dataSet.shape[0]    #dataset是4*2的二维数组,shape[0]=4,shape[1]=2
        diffMat=tile(inX,(dataSetSize,1))-dataSet   #tile(inX,(dataSetSize,1))=[inX,inX,inX,inX],1代表每行inX重复一次
        sqDiffMat=diffMat**2    #数组中每个值都**2
        sqDistances=sqDiffMat.sum(axis=1)   #sum(axis=?)第?个维度的相加,可理解为第?层[]里的元素相加
        distances=sqDistances**0.5  #数组中每个值都**0.5
        sortedDistIndicies=distances.argsort()  #argsort()从小到大返回索引
        classCount={}   #花括号{}:代表dict字典数据类型
        for i in range(k):
            voteIlabel=labels[sortedDistIndicies[i]]    #前i小的类型
            classCount[voteIlabel]=classCount.get(voteIlabel,0)+1   #dict.get(key, default=None) key找不到返回default
        sortedClassCount=sorted(classCount.items(),key=operator.itemgetter(1),reverse=True) #按字典第2个值排序,True表示从大到小排序
        return sortedClassCount[0][0]   #{(B,2),(A,1)} [0][0]代表B
    
    group,labels=createDataSet()
    print(classify0([0,0],group,labels,3))
  • 相关阅读:
    spring boot启动原理
    Minor GC ,Full GC 触发条件是什么?
    Redis分布式锁的正确实现方式Jedis客户端实现方式总结
    JVM命令总结
    InnoDB中B+树总结
    ThreadPoolExecutor 优先级的线程池
    锁的概述
    Deadlock Troubleshooting, Part 1
    Deadlock Troubleshooting, Part 3
    大型网站数据库优化和故障跟踪与排查(下篇)
  • 原文地址:https://www.cnblogs.com/LPworld/p/13222313.html
Copyright © 2011-2022 走看看