k邻近算法

今天学习了一点机器学习的知识,主要是机器学习最基本的算法-k邻近算法。正好今天写这篇Blog可以复习巩固,其中涉及到的code和一些内容来自《机器学习实战》。
在此基础上加了一点自己的注释和理解。这本教程还是挺适合入门的,理论+代码相结合。

k-近邻算法简述

k-近邻算法(kNN)采用测量不同特征值之间的距离方法进行分类。工作原理:首先存在一个样本数据集合(训练样本集),并且样本集中每个数据都存在标签(监督学习)。所谓的标签就是样本集每一数据与所属分类的对应关系。输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征相比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。一般来说,我们只选择样本数据集中的前k个最相似的数据,这就是k近邻算法中k的出处,k通常不大于20的整数。最后选择k个最相似数据中出现次数最多的分类,作为新数据的分类。这里的距离是指d=sqrt{(X1-X2)^2+(Y1-Y2)^2}。其中(X1,Y1)表示某个样本的两个特征值。下面以一个具体的例子来说明:电影分类的例子,使用k-近邻算法分类爱情片和动作片。有人曾经统计过很多电影的打斗镜头和接吻镜头,在这里我们就选取打斗镜头和接吻镜头的次数作为特征来分类,下面显示了六部电影的打斗和接吻镜头次数。假设有一部未看过的电影,如何确定它是爱情片还是动作片?我们使用kNN来确定。

电影名称                     打斗镜头                     接吻镜头                     电影类型 
California Man              3                           104                         爱情片
He's Not Really into Dudes  2                           100                         爱情片
Beautiful Woman             1                           81                          爱情片
Kevin Longblade             101                         10                          动作片
Robo Slayer 3000            99                          5                           动作片
Amped 2                     98                          2                           动作片
?                           18                          90                          未知

首先我们需要知道这个位置电影存在多少个打斗镜头和接吻镜头,数据如上表?数据,只知道打斗镜头和接吻镜头的次数。即使不知道未知电影属于哪种类型,我们也可以通过某种方法求出来。首先计算未知电影与样本集中其他电影的距离。如下表:

电影名称                        与未知电影的距离
California Man                    20.5
He's Not Really into Dudes        18.7
Beautiful Woman                   19.2
Kevin Longblade                   115.3
Robo Slayer 3000                  117.4
Amped 2                           118.9

在这里我们可以将打斗镜头次数和接吻镜头次数作为两个特征,即(打斗镜头次数,接吻镜头次数),然后计算距离。现在我们知道了样本集中所有电影与未知电影的距离,按照距离递增排序,找到k个距离最近的电影。假定这里k=3,则三个最靠近的电影依次是He’s Not Really into Dudes 、 Beautiful Woman 以及California Man 。k-近邻算法按照距离最近的三部电影的类型,决定未知电影的类型。而这三部全是爱情片,因此我们判定未知电影是爱情片。

k-近邻算法的一般流程

1、收集数据:可以使用任何方法。

2、准备数据:距离计算所需的数值,最好是结构化的数据格式。

3、分析数据:可以使用任何方法。

4、训练算法:此步骤不适用于k-近邻算法。

5、测试算法:计算错误率。

6、使用算法:首先需要输入样本数据和结构化的输出结果,然后运行k-近邻算法判定输入数据分别属于哪个分类,最后应用对计算出的分类执行后续的处理。

关于k-近邻算法如何使用python实现的例子不在此赘述,具体的例子会上传到github,感兴趣的可以去看看,这里只要阐述思想。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值