机器学习算法之K近邻算法(KNN)

KNN是一种基本分类与回归算法,它没有显式的学习过程。它不像其他模型有损失函数、有优化算法、有训练过程。对于给定的实例数据和其对应的所属类别,当要对新的实例进行分类时,根据这个实例最近的K个实例所属的类别来决定其属于哪一个类。KNN算法示意图:

图1.KNN算法

KNN算法过程如下:

KNN做回归和分类的主要区别在于最后做预测时候的决策方式不同。KNN做分类预测时,一般是选择多数表决法,即训练集里和预测的样本特征最近的K个样本,预测为里面有最多类别数的类别。而KNN做回归时,一般是选择平均法,即最近的K个样本的样本输出的平均值作为回归预测值。由于两者区别不大,虽然本文主要是讲解KNN的分类方法,但思想对KNN的回归方法也适用。

KNN的优缺点:

1、优点:简单、易于理解,易于实现,无需估计参数,无需训练。适合对稀有事件进行分类(例如当流失率很低时,比如低于0.5%,构造流失预测模型等)。

特别适合于多分类问题(对象具有多个类别标签),例如根据基因特征来判断其功能分类,KNN比SVM的表现更好。

2、缺点:懒惰算法,对测试样本分类时的计算量大,内存开销大,评分慢。可解释性较差,无法给出决策树那样的规则。

 

模型:

在特征空间中,对每个训练实例点 Xi ,距离该点比其他点更进的所有点组成一个区域,叫作单元。每个训练实例点拥有一个单元,所有训练实例点的单元构成了对特征空间的一个划分。最近邻法将实例 Xi 的类 Yi 作为其单元中所有点的类标记。这样,每个单元的实例点的类别是确定的,如图所示为二维和三维特征空间划分的例子。

图2.二维特征空间

图3.三维特征空间

KNN算法三要素:距离度量的方式、K值的选取和分类决策规则。

距离度量:

特征空间中两个实例点的距离是两个实例点相似度的反应。常使用的距离是欧氏距离、  Lp 距离、Minkowski距离。

 

K值的选择:

若选择较小的k值,相当于用较小的领域中的训练实例进行预测学习的近似误差会减小,而学习的估计误差会增大。预测结果会对近邻的实例点非常敏感,如果邻近的这个实例点是噪声,则会预测出错误结果。k值越小,模型变得越复杂,也就更容易出现过拟合现象。

若选择较大的k值,则意味着模型变得简单,可以减少学习的估计误差,但是也会增大学习的近似误差。那些不相似的训练实例也会对预测起作用,导致预测结果错误。

若k=N,则会将训练实例中最多的类作为输入实例的类。由于模型过于简单,会忽略掉训练实例中大量的有用信息。

在实际应用中,我们常常采用交叉法来选取最优的k值。

 

分类决策规则:

K近邻算法中分类决策规则往往采用多数表决法。分类决策规则如下:

接下来是通过Python代码实现KNN算法并将其函数化封装:

以上就是KNN算法的原理及代码实现。


搜索公众号:ai_works,获取更多机器学习资讯:

长按二维码,关注:机器学习AI工场

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值