K紧邻算法

来源:互联网 发布:帕拉卡斯人知乎 编辑:程序博客网 时间:2024/06/06 07:26

1、概述:其基本思想是--对于新实例,计算其与训练集的距离,取最相近的K个,根据分类规则决定该实例的类别

2、三大要素:距离的度量、K值的选择、分类决策规则

3、距离的度量:;当p=1是叫做曼哈顿距离,当p=2时,叫欧式距离。不同的距离度量产生的邻近点是不同的

4、K值的选择:K值的选择对算法的影响很大;很明显,K值越大,模型越简单,其估计误差会减少,但同时近似误差会变大;很多无关的值会被考虑进来,影响预测的效果。相反,如果K值取的越小,模型就月复杂,此时估计误差会变大,模型对实例点非常敏感,如果该实例点是噪声,则会导致预测错误。

5、分类决策规则:一般采用多数表决的方式。

6、一般K近邻算法的实现采用的是线性扫描的方式,但是如果数据量特别大的时候需要考虑使用不同的数据结构来储存数据,以减少计算的次数;如kd树

7、<<机器学习实战>>种关于K近邻算法的实现:

from numpy import *

import operator

from os import listdir


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

上述的是实现的核心代码,主要计算实例点和数据集的欧式距离,并取前K个值做多数表决来决定该实例点的类别。当然,还有数据的归一化部分没有呈现出来,具体可参考书本源码。

原创粉丝点击