k近邻算法

介绍

k近邻算法是一种思想简单,应用数学知识比较少的算法,可以解释机器学习算法使用过程中的很多细节问题,能够刻画机器学习应用的流程,效果也不是很差,我们先从这个算法开始。
首先,看一个图,我们很明显的看到,数据被分为两类。
在这里插入图片描述
如果这时候来了一个新的点,我们可以很直观地知道,它属于红色那一类
在这里插入图片描述
因为它“看起来”离红色的点最近。k近邻算法就是用确切的数据,定量地算出它确实很“近”。
k是指,选取k个离它最近的点。算法的具体流程如下:

  • 1 计算测试数据与各个训练数据之间的距离;
  • 2 按照距离的递增关系进行排序;
  • 3 选取距离最小的K个点;
  • 4 确定前K个点所在类别的出现频率;
  • 5 返回前K个点中出现频率最高的类别作为测试数据的预测分类。
    下图中给出了KNN算法中K值选区的规则:
    在这里插入图片描述
    图中的数据集是良好的数据,即都有对应的标签。一类是蓝色的正方形,一类是红色的三角形,那个绿色的圆形是待分类的数据。
  • K= 3 时,范围内红色三角形多,这个待分类点属于红色三角形。
  • K= 5 时,范围内蓝色正方形多,这个待分类点属于蓝色正方形。
    如何选择一个最佳的K值取决于数据。一般情况下,在分类时较大的 K 值能够减小噪声的影响,但会使类别之间的界限变得模糊。因此 K 的取值一般比较小 ( K < 20 )。

距离怎么算

欧拉距离

上面提到了要计算数据之间的距离,在二维平面上,计算距离最常用的方式就是欧拉距离:
( x ( a ) − x ( b ) ) 2 + ( y ( a ) − y ( b ) ) 2 \sqrt{(x^{(a)}-x^{(b)})^2+(y^{(a)}-y^{(b)})^2} (x(a)x(b))2+(y(a)y(b))2
从二维平面推广到多维(维度在k近邻算法里面其实就是特征):
在这里插入图片描述
最终简写成如下形式:
在这里插入图片描述

曼哈顿距离

在表达距离数学上还有另外一种方式,就是曼哈顿距离:
在这里插入图片描述
图中红线代表曼哈顿距离,绿色代表欧氏距离,也就是直线距离,而蓝色和黄色代表等价的曼哈顿距离。
下面推导欧拉距离和曼哈顿距离的一致性:
欧拉距离:
在这里插入图片描述
=>
在这里插入图片描述
=>
在这里插入图片描述
曼哈顿距离:
在这里插入图片描述
=>
在这里插入图片描述
对比:
在这里插入图片描述
由此我们可以得出一个新的超参数p(下面会讲超参数),通过改变p可以改变距离的计算方法
p取1或2时的明氏距离是最为常用的,p=2即为欧氏距离,而p=1时则为曼哈顿距离。
更进一步,我们可以得到一个新的距离计算方法,明可夫斯基距离。

明科夫斯基距离

在这里插入图片描述

更多距离的定义

在这里插入图片描述

kNN算法的特点

机器学习算法过程是一个首先产生训练模型,然后输入测试数据输出预测数据的过程。但是kNN算法是一个不需要训练数据产生训练模型的算法,被认为是没有模型的算法,为了和其他算法统一,可以认为训练数据集就是模型本身。

超参数和模型参数

超参数:在算法运行前需要决定的参数。之前说的要确定是p是2还是1,也就是使用欧拉距离还是曼哈顿距离,在算法运行前就要决定。
模型参数:算法过程中学习的参数。
kNN算法中没有模型参数,kNN算法中的k是典型的超参数。
寻找合适的超参数,需要领域的知识、经验数值和实验去搜索。

数值归一化

由于kNN算法计算距离,对距离很敏感,如果距离相差太大或者太小,都会对预测的结果产生影响,所以需要把数据映射到同一尺度上。
下面介绍两种数据归一化方法:最值归一化 (Normallization)和均值方差归一化(Standardization)
什么是数据归一化方法,来一个百度百科艰苦的解释:归一化方法有两种形式,一种是把数变为(0,1)之间的小数,一种是把有量纲表达式变为无量纲表达式。主要是为了数据处理方便提出来的,把数据映射到0~1范围之内处理,更加便捷快速,应该归到数字信号处理范畴之内。
简单的来说,就是把所有的数据映射到同一个尺度

最值归一化 (Normallization)

把所有的数据映射到0-1之间,公式:
X m a x = X − X m i n X m a x − X m i n X_{max}=\frac{X-X_{min} }{ X_{max}-X_{min}} Xmax=XmaxXminXXmin
对于怎么理解这个公式,把 X m i n X_{min} Xmin变为0,理解起来就很容易,所有的数都不超过1。
首先看一个向量的归一化
在这里插入图片描述
然后看矩阵的:
在这里插入图片描述
最后看他们的一些统计情况:
在这里插入图片描述
适用于分布有明显边界的情况:受边界影响比较大。如果存在极端数据,那这种方式不合适,就要用下面的方式。

均值方差归一化(Standardization)

把所有数据归一到均值为0方差为1的分布中
X s c a l e = X − X m e a n S X_{scale}=\frac{X-X_{mean}}{S} Xscale=SXXmean
在这里插入图片描述
在这里插入图片描述
适用于数据分布没有明显边界;有可能存在极端数据的情况。

其他关于kNN算法

优点

  • 用于解决分类问题
  • 天然可以解决多分类问题
  • 思想简单,效果强大
    其实kNN算法也可以用于解决回归问题,有兴趣查阅资料去了解。

缺点

  • 最大缺点:效率低下:如果训练集有m个样本,n个特征,那么预测每一个新的数据集,需要O(m*n)的时间;可以通过如下方式优化,例如使用树结构:KD-Tree,Ball-Tree
  • 缺点二:高度数据相关
  • 缺点三:预测的结构不具有可解释性
  • 缺点四:维数灾难,随着维度的增加,“看似相近”的两个点之间的距离越来越大。如下图:

维度计算距离
1维0到1的距离1
2维(0,0)到(1,1)的距离1.414
3维(0,0,0)到(1,1,1)的距离1.73
64维(0,0,…0)到(1,1,…1)的距离8
10000维(0,0,…0)到(1,1,…1)的距离100

可以通过降维的方式解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值