https://blog.csdn.net/weixin_46847902/article/details/124522824
层次分析聚类树形图
层次
k近邻算法
k近邻算法的基本概念,原理以及应用
k近邻算法是一种基本分类和回归方法。本篇文章只讨论分类问题的k近邻法。
K近邻算法,即是给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例,这K个实例的多数属于某个类,就把该输入实例分类到这个类中。(这就类似于现实生活中少数服从多数的思想)根据这个说法,咱们来看下引自维基百科上的一幅图:
一张几乎所有讲解都有的图
如上图所示,有两类不同的样本数据,分别用蓝色的小正方形和红色的小三角形表示,而图正中间的那个绿色的圆所标示的数据则是待分类的数据。这也就是我们的目的,来了一个新的数据点,我要得到它的类别是什么?好的,下面我们根据k近邻的思想来给绿色圆点进行分类。
如果K=3,绿色圆点的最邻近的3个点是2个红色小三角形和1个蓝色小正方形,少数从属于多数,基于统计的方法,判定绿色的这个待分类点属于红色的三角形一类。
如果K=5,绿色圆点的最邻近的5个邻居是2个红色三角形和3个蓝色的正方形,还是少数从属于多数,基于统计的方法,判定绿色的这个待分类点属于蓝色的正方形一类。
从上面例子我们可以看出,k近邻的算法思想非常的简单,也非常的容易理解,那么我们是不是就到此结束了,该算法的原理我们也已经懂了,也知道怎么给新来的点如何进行归类,只要找到离它最近的k个实例,哪个类别最多即可。
哈哈,没有这么简单啦,算法的核心思想确实是这样,但是要想一个算法在实际应用中work,需要注意的不少额~比如k怎么确定的,k为多少效果最好呢?所谓的最近邻又是如何来判断给定呢?哈哈,不要急,下面会一一讲解!
如果我们选取较小的k值,那么就会意味着我们的整体模型会变得复杂,容易发生过拟合!恩结论说完了,太抽象了吧你,不上图讲解号称通俗讲解的都是流氓好吧,那我就上图来讲解
假设我们选取k=1这个极端情况,怎么就使得模型变得复杂,又容易过拟合了呢?
假设我们有训练数据和待分类点如下图:
上图中有俩类,一个是黑色的圆点,一个是蓝色的长方形,现在我们的待分类点是红色的五边形。
好,根据我们的k近邻算法步骤来决定待分类点应该归为哪一类。我们由图中可以得到,很容易我们能够看出来五边形离黑色的圆点最近,k又等于1,那太好了,我们最终判定待分类点是黑色的圆点。
由这个处理过程我们很容易能够感觉出问题了,如果k太小了,比如等于1,那么模型就太复杂了,我们很容易学习到噪声,也就非常容易判定为噪声类别,而在上图,如果,k大一点,k等于8,把长方形都包括进来,我们很容易得到我们正确的分类应该是蓝色的长方形!如下图:
所以k值既不能过大,也不能过小,在我举的这个例子中,我们k值的选择,在下图红色圆边界之间这个范围是最好的,如下图:
距离的度量
一般常采用欧氏距离
最常见以欧氏距离作为衡量标准。
参考链接
1.课件讲解频繁序列
https://webdocs.cs.ualberta.ca/~zaiane/courses/cmput695-04/slides/PrefixSpan-Wojciech.pdf
2.一文搞懂k近邻(k-NN)算法(一)
https://zhuanlan.zhihu.com/p/25994179
3.一只兔子帮你理解 kNN
https://www.joinquant.com/view/community/detail/a98b7021e7391c62f6369207242700b2