K近邻算法

一、什么是k近邻算法

给定一个训练数据集、对新的输出实例,在训练集中找到与该实例最邻近的k个实例,这k个实例的少数属于某个类,就把该输出实例分为这个类。如下图所示:输出新的❓点判断它属于classA还是classB


那么问题来了k近邻算法市最近邻,那么这个最近邻怎么判断?计算间隔!怎么计算间隔

二、间隔度量

1、欧几里得间隔

$$d(x,y)=\sqrt{\displaystyle\sum_{i=1}^{n}(y_i-x_i)^2}$$

3、曼哈顿间隔

$$d(x,y)=(\displaystyle\sum_{i=0}^{n}{|y_i-x_i|})$$

4、闵可夫斯基间隔

$$Minkowski Distance=(\displaystyle\sum_{i=0}^{n}{|y_i-x_i|})^\frac{1}{p}$$

当初咱们晓得了如何确定间隔,然而问题又来了,咱们应该怎么去定义咱们的K值呢?

三、K值抉择

如果抉择较小的 k 值,就相当于用较小的邻域中的训练实例进行预测,“学习”的近似误差(approximation error)会减小,只有与输出实例较近的(类似的)训练实例才会对预测后果起作用。但毛病是“学习”的预计误差(estimation error)会增大,预测后果会对近邻的实例点十分敏感 。如果邻近的实例点恰巧是噪声,预测就会出错。换句话说,k 值的减小就意味着整体模型变得复杂,容易产生过拟合。

如果抉择较大的 k 值,就相当于用较大邻域中的训练实例进行预测。其长处是能够缩小学习的预计误差,但毛病是学习的近似误差会增大。这时与输出实例较远的(不类似的)训练实例也会对预测起作用,使预测产生谬误。k 值的增大就意味着整体的模型变得简略。

如果k =N,那么无论输出实例是什么,都将简略地预测它属于在训练实例中最多的类。这时,模型过于简略,齐全疏忽训练实例中的大量有用信息,是不可取的。在利用中,k 值个别取一个比拟小的数值。通常采纳穿插验证法来选取最优的 k 值

参考

1、https://www.ibm.com/cn-zh/topics/knn#:~:text=k%2D%E6%9C%80%E8...,%E6%9C%80%E5%B8%B8%E8%A1%A8%E7%A4%BA%E7%9A%84%E6%A0%87%E7%AD%BE%E3%80%82
2、李航《统计学学习办法第二版》