JasonWung's Blog

KNN近邻算法

KNN算法采用测量不同特征值质检的距离方法进行分类。

工作原理:存在样本数据集合,也称之为训练样本集合,并且每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系,输入没有标签的新数据后,将新数据的每个特征与样本数据中对应的特征进行对比,然后算法提取出来样本集中最相似(最近邻)的分类标签,一般来说只选取前k个最相似的数据,即KNN中的K,通常K不大于20,最后选择K个数据中标签出现最多次的分类作为新数据的分类。

简单demo:

from numpy import *
from operator import *

def createDataSet():

    group = array([[1.0, 1.1],[1.0,1.0],[0.0, 0.0],[0, 0.1]])
    labels = ['A','A','B','B']
    return group,labels

def classify(intX, dataSet, labels, k):
    dataSetSize = dataSet.shape[0]
    diffMat = tile(intX, (dataSetSize, 1)) - dataSet
    sqDiffMat = diffMat**2
    sqDistances = sqDiffMat.sum(axis=1)
    distances = sqDistances**0.5
    sortedDistIndicies = distances.argsort()
   
    classCount = {}
    
    for i in range(k):
        voteIlable = labels[sortedDistIndicies[i]]
        classCount[voteIlable] = classCount.get(voteIlable, 0) + 1
        sortedClassCount = sorted(classCount.items(), key=itemgetter(1), reverse=True)

    return sortedClassCount[0][0]



group,labels = createDataSet()
classify([1.2,1], group, labels, 3)