zoukankan      html  css  js  c++  java
  • KNN算法

    代码如下:

    #-*- coding :utf-8-*-
    from sklearn.neighbors import KNeighborsClassifier
    from numpy import *
    
    def createDataSet():
        group = array([[1.0,0.9],[1.0,1.0],[0.1,0.2],[0.0,0.1]])
        labels = ['A','A','B','B']
        return group,labels
    #用欧氏距离算的距离的大小
    def kNNClassify(newInput,dataset,labels,K):
        numSample = dataset.shape[0] #dataset的行数
        diff = tile(newInput,(numSample,1)) - dataset  
        '''
        格式:tile(A,reps) 
        * A:array_like 
        * 输入的array 
        * reps:array_like 
        * A沿各个维度重复的次数
        '''
        squarediff = diff ** 2
        squaredis = sum(squarediff,axis = 1) #行之和
        distance = squaredis ** 0.5
        sortdistance = argsort(distance)
        classcount = {}
        for i in xrange(K):
            voteLable = labels[sortdistance[i]]
            classcount[voteLable] = classcount.get(voteLable,0) + 1
    
        maxCount = 0
        for key,values in classcount.items():
            if values > maxCount:
                maxCount = values
                index = key
        return index
    #取前k个出现频率最高的作为预测结果返回

    实现一个小的KNN算法.

    在kNNClassify()函数中

    1 newInput表示的是输入的分类向量(1xN)  
    2 dataset表示输入的训练样本集(NxM) 
    3 labels表示标签向量
    4 k表示选择最近邻居的数目

    KNN算法的步骤:

          1.计算测试数据与各个训练样本数据之间的距离,距离有两种计算方法,分别是欧式距离和曼哈顿距离

          2.按照距离的递增关系进行排序

          3.选取距离最近的前K个点

          4.确定前K个点的所在类别的出现频率

          5.返回前K个点中,出现频率最高的类别作为测试数据的预测类型

  • 相关阅读:
    java-多个数的和
    大道至简第二章
    大道至简第一章感悟上
    Tools
    LruCache
    Fragment
    科普指纹识别
    Python使用MySQL数据库
    Eclipse中添加PyDev插件
    UniversalAndroidImageLoader出现异常:ImageLoader: Unable to resolve host "https": No address associated with host
  • 原文地址:https://www.cnblogs.com/chenyang920/p/7359468.html
Copyright © 2011-2022 走看看