Press "Enter" to skip to content

人工智能-其他分类技术-kNN模型

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

kNN-k近邻分类模型

 

还是从一个问题开始

 

 

不讨论这个问题,就先根据模型,不妨这样思考一下:

 

我们判断人种,有黑人、白人、黄人、和外星人四个分类。当我们把需要确定的人,放在广州的一个黑人社区里。

 

如果我们设置范围就是这个社区里,那幺我们就可以认为他是个黑人的概率很大,就会把他分到黑人里

 

加入我们把范围加大到整个中国,那幺我们可能会认为他是个黄人。

 

诶如果我们再把范围扩散到全球,我们就会倾向于他是个白人,因为白人在全球的比例是43%,黄人41%,黑人16%。

 

如果再把他放大到无穷大的全宇宙,根据模型,我们就会更倾向于他是一个外星人。

 

 

诶诶诶诶诶,是不是觉得有点问题。是不是想说,今天就算把我头砍下来,他也不可能是个外星人。

 

所以我们就先带着这个问题,看看这个kNN模型算法步骤

 

kNN模型算法步骤

 

 

我们先看这个步骤

 

训练数据集D:他是一个x为特征向量,就是我们刚才说的坐标(广州黑人社区),y为数据类别(黑白黄外)。

 

然后我们现在有了很多样本,比如黑人社区里的有

 

(1栋302,黄),(2栋302,黑),(3栋302,黑),(4栋302,黑)......

 

然后全广州的数据就更大了

 

这个时候我们收到了一个新的样本数据 (小区公园,y)

 

我们需要对这个y做出判断

 

(1)要收集每个样本与新数据的x:(小区公园)的距离d

 

(2)将计算出的这个距离按照升序排列,并按照排序取前K个样本

 

(3)统计这K个样本的y值,并找出频率最高的标签

 

(4)最后确定这个 (小区公园,y) 的y是哪个类型

 

这个时候,细心的人可能就有第二个问题了

 

这个距离d他有问题

 

他有什幺问题呢,我们都知道地球呢,他是圆的!

 

圆的有什幺问题呢,你想想他可能从广州到美国的距离坐飞机是这个距离,从地底走一个直线距离,诶他就会短很多。

 

所以我们在这里再说说kNN里的距离计算方式

 

kNN里的距离计算方式

 

欧式距离

 

 

这个就是实打实的,挖土走地底的直线距离,注意一下,这个(x,y)吼,是他数据特征对应过来就是这个人所在对于地球的(x,y,z)的坐标 ,不是刚才说的(特征,结果)

 

曼哈顿距离

 

 

有了刚才的欧式距离,是不是这个就很好理解了,这就是你实打实的那种要走的距离

 

距离就先说到这,还有其他的距离我们先不考虑

 

看一个kNN的分类图

 

 

这图上面的k,就是从近到远取得值的数量。我们可以看到如果是k=1,他的决策边界是不是非常的曲折。

 

我们想象一下,还是刚才那个黑人社区,我们一户黑人一户黄人又两户黑人的又三户黄人的。我们是不是这个边界就很难划分,就一栋楼之间都能拐三四个弯,但是我们是不是如果取k=20,诶这栋楼黑人多,那栋楼黑人少,这样根据这个人在哪栋楼就更好去判断他是个黑人还是个黄人。分类边界就在楼之间画。

 

所以我们可以得出这个k值越小,分类边界就越曲折,越容易被噪声干扰,也就是抗干扰能力越差。

 

但是呢,如果取得太大,就会出现这个人是个外星人的结论

 

由于课程里没有说这个问题,我们就自己百度一下来解决

 

网上抄的

 

如果我们选取较小的k值,就相当于用较小的邻域中的训练实例进行预测,“学习”的近似误差会减小,只有与输入实例较近的训练实例才会对预测结果起作用。但缺点是“学习”的估计误差会增大,预测结果对邻近的实例点非常敏感。如果邻近的实例点恰巧时候噪声,预测就会出错。换句话说,k值的减小意味着整体模型变得复杂,容易发生过拟合。

 

如果不太理解k值小模型就复杂,我们不妨假设k=N,N为训练集大小,那幺无论输入实例是什幺,都将简单的预测它属于在训练实例中最多的类,这显然是不合理的。这时的模型是非常简单的,完全忽略训练实例中的大量有用信息。

 

如果选择较大的k值,就相当于用较大的邻域中的训练实例进行预测,其优点是可以可以减小“学习”的估计误差,但缺点是“学习”的近似误差会增大。这时与输入实例较远的训练实例也会对预测结果起作用,使预测发生错误。k值增大就意味着整体的模型变得简单。 在应用中,k值一般取一个较小的数值,通常采用交叉验证法来选取最优的k值。 ———————————————— 版权声明:本文为CSDN博主「BlackEyes_SGC」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接: blog.csdn.net/u011204487/…

 

交叉验证法

 

交叉验证(Cross Validation),有的时候也称作循环估计(Rotation Estimation),是一种统计学上将数据样本切割成较小子集的实用方法,该理论是由Seymour Geisser提出的。 在给定的建模样本中,拿出大部分样本进行建模型,留小部分样本用刚建立的模型进行预报,并求这小部分样本的预报误差,记录它们的平方加和。这个过程一直进行,直到所有的样本都被预报了一次而且仅被预报一次。把每个样本的预报误差平方加和,称为PRESS(predicted Error Sum of Squares)。

 

是不是看不懂,我也看不懂,但是可以强行理解一下

 

我们把范围先确定为全球,计算一个误差,去评价一下这个模型

 

然后缩小范围,比如按所在的大洲,比如这个广州的我们就选亚洲做范围,其他地方的就选所在的大洲,计算出一个误差,去评价模型

 

再缩小范围,选国家,选城市。到最后我们选出误差最小的k去做为这个模型使用的k

 

我找了个应用这个交叉验证的文章,先留着以后看的懂的时候再看看

 

kNN处理iris数据集-使用交叉验证方法确定最优 k 值 blog.csdn.net/woswod/arti…

 

就把这个问题算解决了,先继续往下学习

Be First to Comment

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注