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个点中,出现频率最高的类别作为测试数据的预测类型

原文地址:https://www.cnblogs.com/chenyang920/p/7359468.html