数据分析与数据挖掘 - 09邻近算法

一 邻近算法的基本介绍 1 基本说明

邻近算法又叫做K临近算法或者KNN(K-NearestNeighbor),是机器学习中非常重要的一个算法,but它简单得一塌糊涂,其核心思想就是样本的类别由距离其最近的K个邻居投票来决定。现在假设我们已经有一个已经标记好的数据集,也就是说我们已经知道了数据集中每个样本所属于的类别。这个时候我们拥有一个未标记的数据样本,我们的任务是预测出来这个数据样本所属于的类别。显然邻近算法是属于监督学习(Supervised Learning)的一种,它的原理是计算这个待标记的数据样本和数据集中每个样本的距离,取其距离最近的k个样本,那么待标记的数据样本所属于的类别,就由这距离最近的k个样本投票产生。在这个过程中,有一个动作是标记数据集,这一点在企业中一般是有专门人来负责标记数据的。

2 举例说明

为了更加直观的了解邻近算法,请看下面的例子。有两种水果长得非常像,一个是菠萝,另一个是凤梨,很长一段时间我都以为它们是同一种水果。

WechatIMG78.png


菠萝与凤梨的核心区别是菠萝的叶子有刺,而凤梨的叶子没有刺。菠萝的凹槽处的颜色是黄色,而凤梨的凹槽处的颜色是绿色。首先我们把这两种水果抽取出其中的两个特点(凹槽处的颜色、叶子上是否有刺)后,放入一个直角坐标系中吧。如下图:

WechatIMG79.png


我们按照两种水果的特点,已经把它们放在了直角坐标系中,按照我们所说的算法原理,此时有一个未标记的样本,我们来预测这个样本到底是属于哪种水果。如下图,这个时候来了一个未标记的样本,也就是不知道是什么类别的水果。

WechatIMG80.png


在原理中,我们说过,由其最近的K个邻居来投票决定,这个未标记的水果到底是什么水果,那么这个时候,我们把K的值设置为3,如下图:

WechatIMG81.png


从图片中,我们看到,在K的值为3的时候,与未标记样本最近的3个邻居其中2个为菠萝,而1个为凤梨,那么这个时候我们预测这个未知的水果为菠萝。

3 伪代码说明

我们先来看一下如何用伪代码来实现这个算法,这样我们在后边的学习中才能更好的写出来这段代码。

第一步,我们设x_test为待标记的数据样本,x_train为已标记的数据集。

第二步,遍历x_train中的所有样本,计算每个样本与x_test的距离,并把距离保存在distance数组中。

第三步,对distance数组进行排序,取距离最近的k个点,标记为x_knn。

第四步,在x_knn中统计每个类别的个数,即class0(类别0)在x_knn中有几个样本,class1 (类别1)在x_knn中有几个样本。

第五步,待标记样本的类别,就是x_knn中样本个数最多的那个类别。

4 优缺点分析

优点:准确性高,对异常值有较高的容忍度,原因是异常值会单独分布在坐标系的一个角落,取k个邻居的时候大概率失去不到这个异常值的。

缺点:计算量大,对内存的需求也大,因为它每次对一个未标记的样本进行分类的时候,都需要全部计算一下距离。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgjwdp.html