kNN分类算法

    kNN(k-Nearest Neighbor,简称kNN)算法是一种常用的分类于回归方法。它的工作机制非常简单:给定测试样本,基于某种距离度量找出训练集中与其最相近的k个训练样本,然后基于这k个“邻居”的信息来进行预测。通常采用“多数表决”的决策规则对输入的测试样本进行分类,即选择k个最近样本中出现次数最多的类别标记作为预测结果,类似于我们常说的“近朱者赤,近墨者黑”;在回归任务中可以使用“平均法”,即将这k个样本的实值输入标记的平均值作为预测结果;当然,还可以基于距离远近进行加权平均或加权投票,距离越小的样本权重越大。其中,k值的选择、距离度量以及分类决策规则是k近邻算法的三个基本要素。
    根据前文所述,我们可以看出k近邻算法没有显式的训练过程。实际上,它是“惰性学习”(lazy learning,亦称“消极学习”)的代表,这类算法在训练阶段不对数据进行建模,而是直到需要对测试样本进行分类时再进行处理;相应的,那些在训练阶段就对样本进行学习处理的方法被称为“急切学习”(eager learning,亦称“积极学习”),例如决策树和基于规则的分类器。
k值选择

这里写图片描述
    上图是kNN算法的一个例子,其中绿色圆点代表我们的测试样例,而红色和蓝色小点则代表着两种不同的类。当k = 1(图中实线部分)时,离测试用例有2个红点和1个蓝点,根据多数表决原则,我们可以将绿色小点归为红点所在的类;而当k = 2(图中虚线部分)时,可以看到离测试用例最近的有3个蓝点和2个红点,所以我们可以将绿点归为蓝点所在类。由此可见,k值的选择对k近邻算法的结果会产生巨大影响。
    如果选择较小的k值,就相当于用较小的邻域中的训练实例进行预测,“学习”的近似误差(approximation error)会减小,因为只有与输入测试样例较近的训练实例才会对预测结果起作用。但是,“学习”的估计误差(estimation error)会增大,预测结果会对近邻的训练实例非常敏感,如果邻近的实例恰好是噪声,那么预测就会出错。换句话说,较小的k值会使得模型变得复杂,容易发生过拟合。
    如果选择较大的k值,就相当于用较大邻域中的训练实例进行预测。这样可以减少“学习”的估计误差,但是近似误差又会增大。因为这时与输入测试样例较远的训练实例也会对预测起作用,使预测变得不准确。特殊情况是k=N,那么无论输入测试样例是什么,模型都将简单地预测它属于训练实例中最多的类,完全忽略了训练实例中大量有用信息。由此可见,较大的k值意味着整体分类模型过于简单。
    在实际应用中,k值一般取一个比较小的数值,通常采用交叉验证的方法选择最优k值。

距离度量
    特征空间中两个实例之间的距离是两个实例相似程度的反映。k近邻模型中最常使用的距离是欧氏距离,但也可以是其他距离,如更一般的Minkowski距离(Minkowski distance)。
    给定样本 xi=(xi1;xi2;...xin) x i = ( x i 1 ; x i 2 ; . . . x i n ) xj=(xj1;xj2;...xjn) x j = ( x j 1 ; x j 2 ; . . . x j n ) ,其中,闵可夫斯基距离定义如下:

distmk(xi,xj)=(
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值