KNN算法

Posted Elaine

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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个点中,出现频率最高的类别作为测试数据的预测类型

 

以上是关于KNN算法的主要内容,如果未能解决你的问题,请参考以下文章

监督学习算法_k-近邻(kNN)分类算法_源代码

(理论和代码相结合)KNN(最近邻)算法⭐

分类-KNN算法(代码复现和可视化)

⭐ (理论和代码相结合)KNN(最近邻)算法——分类问题和回归问题都能做的算法

模式识别实验二:K近邻算法(KNN)

万字详解·附代码机器学习分类算法之K近邻(KNN)