K-近邻算法(KNN)

前言

  这篇博文其实可以算是一个对上一篇博客的补充,前面我们说到的是皮尔逊算法和欧氏算法,这里的K近邻算法和这两种算法其实也非常接近。


  K-近邻算法属于监督学习的一个分支,主要是用来对相关问题进行分类。简单的说,K-近邻算法采用测量不同特征值之间的距离来进行分类。
  工作原理:存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签(label),即我们知道样本集中的每一数据与所属分类相对应的关系。这时,我们输入一个没有标签的新数据,将新数据的每个特征与样本集中数据对应的特征进行比较。然后算法提取样本集中特征最相似数据(最近邻)的分类标签。一般我们提取的样本集中的最相似数据个数为K个。(这就是我们称该算法为K近邻算法的原因)。
  如果对于上面的官方叙述有些许不理解的同学 可以这样来想,我们首先拿到一个样本的数据集合也就是训练样本集,也就是我们所拥有的数据为前提(要不怎么分类啊 摔!)。我们用书上的一个简单例子来说明一下。如何判断一个电影的类型(用烂了。。),首先我们会拿出几个能够比较的维度,比如说 爱情片里面有接吻啊之类的。动作片有动作啊(正产的)。当然这里我们并不是说一个动作片里没有接吻镜头,也不能说一个爱情片里没有动作(笑)。我们可以统计一下他们在每部电影里出现的次数,比如说爱情片里接吻的镜头出现的次数远大于动作片出现接吻的镜头,我们就可以以此来判断一个新的片子所属的类型。因为是书上的例子所以我们不需要再这里面深究,毕竟港片啥都有。我们首先有一个这样简单的数据。根据这个表,我们需要判断E属于哪一种类型的影片,当然,大家一眼就可以推断出E属于哪种类型的影片。但是这篇博客的目的不是考验你的判断能力(摊手),而是你的电脑的判断能力。
  这里写图片描述
  那么机器是如何来判断这部电影的类型的呢?简单来讲就是看这部电影和其他几部电影的“距离”。距离如何判断呢,很简单,我们把它放到坐标系中就可以了。
  这里写图片描述
  这里横坐标是接吻出现的次数而纵坐标则是动作出现的次数。这里我们就可以使用我们上次说的欧式距离来计算该电影与每个坐标的点的距离,然后选取合适的K值,选取他们的标签,这样我们就将这部未分类的新电影的类型划分了出来。这里我们只是一个最简单的例子,所以我们只有四组坐标,所以我们可以选取K=2,然后我们就可以将该电影划分到动作片中。具体的算法就不在此实现了因为在上一篇中有提及,这篇只是简单的记录一下该算法。因为该算法是监督学习中一个非常有名且易于理解和实现的算法。

优缺点 ##  

  该算法的优点是好理解且精度会很高,同时对异常值不是非常敏感,哪怕出现一个偏差非常大的值,我们在划分时完全可以将其忽略,而且数据输入时无需假定。
  但是该算法也存在一些缺点,最明显的就是我们发现每一个值都需要计算,每一个新的值都需要分类,当需要分类的数据量较庞大时(注意:只是稍微大一点)计算复杂度就会很高,保存时花费的空间复杂度相应的也更高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值