K-近邻算法(KNN)

一. k-邻近算法的基本概念

k-邻近算法是一种基本的分类和回归方法。本章只讨论k-邻近算法在分类问题中的应用。

k-邻近算法,即给定一个训练集,对新输入的实例,在训练数据集中找到与该实例最邻近的k个实例,然在这k个实例中,看看那个类别包含的实例比较多,则这个测试集就属于哪一个类别。
k-邻近算法
如上图所示,有两类不同的样本数据,分别用蓝色的小正方形和红色的三角形来表示。当确定一个k后,也就是确定一个距离,在这个距离范围内,包含一个蓝色的正形和一两个红色的三角形,因此将绿色的测试数据归类为红色三角形的那一类。如果K增大后,范围变大(虚线部分),那绿色的测试数据所属的类别也会发生变化。

从上面的例子中我们可以看到k-邻近算法的思想是很简单的,总结一下原理就是找到距离为k的所有实例,然后看看在这些实例中哪些类别包含的实例比较多

虽然算法的思想很简单,但是想要用算法来解决实际问题还有许多需要我们注意的地方。

二. k-邻近算法中k的选取以及特征归一化的重要性

1.选取k值以及它的影响

如果k值选的比较小,可能会出现过拟合现象,这就会导致噪点对于模型的训练产生影响。比如下面这个图:
在这里插入图片描述
当我们选取的k值比较小的时候,算法很容易将红色的测试数据归为黑色一类,但是实际上x轴以上部分的黑点是一个噪点。

但是如果k值太大的话,又会出现恰拟合的现象。这是因为当k值变大的时候,无论测试数据在二维坐标系的那个位置(在二维坐标里面相当于有两个特征,一个轴对应一个特征,构成一个二维的特征向量),最终预测的类别都是一样的,因为在k取值的范围内包含了所有的实例。这样训练出来的模型就非常简单,相当于压根就没有训练模型。

所以,k值过大过小都会对算法的性能产生影响,那么如何确定k值呢,这就是在深度学习以及机器学习中一个比较常见的问题,就是如何调整参数。 这是一个比较复杂的问题,一个算法可能会包含许多的参数,参数的种类也有很多,在调节的过程中需要用到很多的数学知识。

本文单单就这个算法来说,可以采用李航博士书上讲到,一般选取一个较小的数值,然后采取交叉验证法来选取最优的k值。

2.距离的度量
在上文中说到,k近邻算法是在训练数据集中找到与该实例最邻近的K个实例,这K个实例的多数属于某个类,我们就说预测点属于哪个类。

定义中所说的最邻近是如何度量呢?我们怎么知道谁跟测试点最邻近。这里就会引出我们几种度量俩个点之间距离的标准。

我们可以有以下几种度量方式:

在这里插入图片描述
其中当p=2的时候,就是我们最常见的欧式距离,我们也一般都用欧式距离来衡量我们高维空间中俩点的距离。在实际应用中,距离函数的选择应该根据数据的特性和分析的需要而定,一般选取p=2欧式距离表示,这不是本文的重点。

3.特征的归一化处理

因为一个类别有多个的特征,(在二维坐标系里面相当于)但是不同特征对于类别的影响的权重是不一样的。但是k-邻近算法在计算距离的时候是综合考虑了所有的特征,可能有的特征对距离的影响比较大,我们可以举一个例子,如下:

我用一个人身高(cm)与脚码(尺码)大小来作为特征值,类别为男性或者女性。我们现在如果有5个训练样本,分布如下:

A [(179,42),男] B [(178,43),男] C [(165,36)女] D [(177,42),男] E [(160,35),女]

通过上述训练样本,我们看出问题了吗?

很容易看到第一维身高特征是第二维脚码特征的4倍左右,那么在进行距离度量的时候,我们就会偏向于第一维特征。这样造成俩个特征并不是等价重要的,最终可能会导致距离计算错误,从而导致预测错误。口说无凭,举例如下:

现在我来了一个测试样本 F(167,43),让我们来预测他是男性还是女性,我们采取k=3来预测。

下面我们用欧式距离分别算出F离训练样本的欧式距离,然后选取最近的3个,多数类别就是我们最终的结果,计算如下:
在这里插入图片描述
由计算可以得到,最近的前三个分别是C,D,E三个样本,那么由C,E为女性,D为男性,女性多于男性得到我们要预测的结果为女性。

这样问题就来了,一个女性的脚43码的可能性,远远小于男性脚43码的可能性,那么为什么算法还是会预测F为女性呢?那是因为由于各个特征量纲的不同,在这里导致了身高的重要性已经远远大于脚码了,这是不客观的。所以我们应该让每个特征都是同等重要的!这也是我们要归一化的原因!归一化公式如下:
在这里插入图片描述
参考文章:
https://zhuanlan.zhihu.com/p/25994179

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值