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))
  • 相关阅读:
    DDD 领域驱动设计-谈谈 Repository、IUnitOfWork 和 IDbContext 的实践
    UVA10071 Back to High School Physics
    UVA10071 Back to High School Physics
    UVA10055 Hashmat the Brave Warrior
    UVA10055 Hashmat the Brave Warrior
    UVA458 The Decoder
    UVA458 The Decoder
    HDU2054 A == B ?
    HDU2054 A == B ?
    POJ3414 Pots
  • 原文地址:https://www.cnblogs.com/LPworld/p/13222313.html
Copyright © 2011-2022 走看看