k近邻算法

k近邻算法
算法简介:
K最近邻(k-Nearest Neighbor,KNN)分类算法,是一种基本分类和回归方法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。
K近邻算法简单,直观。给定一个训练数据集,对于新的输入实例,在训练数据集中找到与该实例最邻近的K个实例,这K个实例的多数属于某个类,就把该输入实例分入这个类。

算法实现过程
step.1—初始化距离为最大值;
step.2—计算未知样本和每个训练样本的距离dist;
step.3—得到目前K个最临近样本中的最大距离maxdist;
step.4—如果dist小于maxdist,则将该训练样本作为K-最近邻样本;
step.5—重复步骤2、3、4,直到未知样本和所有训练样本的距离都算完;
step.6—统计K个最近邻样本中每个类别出现的次数;
step.7—选择出现频率最大的类别作为未知样本的类别。

k近邻算法三要素:
K近邻模型的三要素为距离度量、K值的选择和分类决策规则

距离度量:
特征空间中两个实例点的距离是两个实例点相似程度的反映,K近邻模型的特征空间一般是n维实数向量空间Rn ,使用的距离一般是欧氏距离,但也可以是其他距离,如更一般的LP距离(LP distance)或曼哈顿距离(Manhanttan distance)。、

k值的选择:
对于k值的选择,没有一个固定的经验,一般根据样本的分布,选择一个较小的值,可以通过交叉验证选择一个合适的k值。
  选择较小的k值,就相当于用较小的领域中的训练实例进行预测,训练误差会减小,只有与输入实例较近或相似的训练实例才会对预测结果起作用,与此同时带来的问题是泛化误差会增大,换句话说,K值的减小就意味着整体模型变得复杂,容易发生过拟合;  选择较大的k值,就相当于用较大领域中的训练实例进行预测,其优点是可以减少泛化误差,但缺点是训练误差会增大。这时候,与输入实例较远(不相似的)训练实例也会对预测器作用,使预测发生错误,且K值的增大就意味着整体的模型变得简单。  一个极端是k等于样本数m,则完全没有分类,此时无论输入实例是什么,都只是简单的预测它属于在训练实例中最多的类,模型过于简单。
通常情况下,我们需要对 k 经过多种尝试,来决定到底使用多大的 k 来作为最终参数。k通常会在3~10直接取值,或者是k等于训练数据的平方根。比如15个数据,可能会取k=4

分类决策规则
在这里插入图片描述
对于分类决策规则,一般都是使用前面提到的多数表决法

引入例子
下面我们就用一个简单的例子来更好的理解k近邻算法:
已知表格的前四部电影,根据打斗镜头和接吻镜头判断一个新的电影所属类别?
在这里插入图片描述

已知的训练集包含两个特征(打斗镜头和接吻镜头)和类别(爱情片还是动作片)。根据经验,动作片往往打斗镜头比较多,而爱情片往往就是接吻的镜头比较多了。但是knn算法可没有我们这么感性的认识。

对训练集数据进行可视化:
在这里插入图片描述

对于本例子k=2, 电影1与未知电影距离:20.5;
电影2与未知电影距离:18.7;
电影3与未知电影距离:117.4;
电影4与未知电影距离:118.9;
通过计算可知,红色圆点标记的电影到动作片 (2,100)的距离最近,为18.7。如果算法直接根据这个结果,判断该红色圆点标记的电影为动作片,这个算法就是最近邻算法,而非k-近邻算法。那么k-近邻算法是什么呢?k-近邻算法步骤如下:

1 计算已知类别数据集中的点与当前点之间的距离;
2 按照距离递增次序排序;
3 选取与当前点距离最小的k个点;
4 确定前k个点所在类别的出现频率;
5 返回前k个点所出现频率最高的类别作为当前点的预测分类。

比如,现在我这个k值取3,那么在电影例子中,按距离依次排序的三个点分别是动作片(3,104)、动作片(2,100)、爱情片(99,5)。在这三个点中,动作片出现的频率为三分之二,爱情片出现的频率为三分之一,所以该红色圆点标记的电影为动作片。这个判别过程就是k-近邻算法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值