k-近邻算法

本文介绍了k-近邻算法的基本原理及应用流程,通过一个约会对象分类的例子详细解释了算法的具体实施步骤。
       k-近邻算法作为机器学习算法的一种,首先我们就必须要知道什么是机器学习。

       简单地说,机器学习就是把无序的数据转换为有用的信息。

       在我们日常生活中,到处都充满了机器学习,比如拍照时的人脸识别,打字时的手写识别,天气的预测,垃圾邮箱的过滤,购物网站的商品推荐等等。机器学习横跨计算机科学、工程技术和统计学等多个学科,需要多学科的专业知识。随着移动计算和传感器产生的数据越来越多,我们将面临的数据也就越来越多,如何从海量的数据中抽取到有价值的信息将是一个十分重要的课题,这也就折射出机器学习的重要性。

       机器学习的主要任务之一就是分类。顾名思义,就是给出一个事物,要通过该事物的一些特征来判断出该事物属于哪一个类型。当别人给你发来一封邮件时,邮箱系统就会帮助你判断该邮件是否是垃圾邮件,这背后其实就是一个机器学习算法在进行分类。

       k-近邻算法作为分类算法的一种,采用测量不同特征值之间的距离来进行分类。它的工作原理是:存在一组样本数据,并且每个数据都已知它所属的类型。输入一个没有分类的新数据,将新数据的每个特征与样本数据对应的特征进行比较,然后算法提取样本数据中与新数据的特征最相似的k个数据的类型,这在k个数据中出现次数最多的类型就作为新数据的类型。

       如何将新数据的每个特征与样本数据对应的特征进行比较?通常就是计算新数据与样本数据之间的距离。那么k-近邻算法是如何计算的呢?这很简单,其实就是使用了欧式距离公式。如果数据有n特征,数据x的特征分别为x1,x2,…,xn;数据y的特征分别为y1,y2,…,yn,那么x和y的距离为:


分别计算新数据与各个样本数据之间的距离,然后按从小到大的顺序给距离排序,取出前k个最小的数据。找出这k个数据中出现频率最高的类型即定义为新数据的类型。

       下面我们来看一下k-近邻算法的一般流程。其实只要是开发机器学习应用程序,那么它们的流程其实都大同小异,大体上分为6个步骤。第1步是收集数据,这是最基础的,也是最重要的。基础是因为机器学习说白了就是要分析数据;重要是因为既然是分析数据,那么如果得到的是错误的数据,那么得到的结论可能就没有意义了。第2步是准备数据,在得到数据之后,我们还必须要对数据进行处理,使其满足数据格式的要求。第3步是分析输入数据,主要是人工分析以前得到的数据,确保数据集中没有垃圾数据。第4步是训练算法,机器学习算法从这一步才真正开始学习。我们将前两步得到的格式化数据输入到算法,从中抽取知识或信息。第5步是测试算法,这一步将实际使用第4步机器学习得到的知识信息,通过测试算法工作的效果来判断算法是否成功。第6步是使用算法,将机器学习算法转换为应用程序,执行实际任务,来检验上述步骤是否可以在实际环境中正常工作。

       对于k-近邻算法来讲,在上述6个步骤中,不需要执行第4步:训练算法。因为算法在执行过程中并不需要从样本数据中抽取出任何信息,在第5步测试数据时只需要计算算法得出的结果的错误率来判断算法是否成功。

       说了这么多,也许大家还是不是很清楚k-近邻算法。下面我会通过一个简单的例子来帮助大家理解k-近邻算法(例子是我从书中copy过来的),我会按照上面的流程逐步讲解。

       小红一直使用约会网站寻找合适的约会对象,但是她并不是喜欢每个约会对象。她大致将她约会的对象分为三类:不喜欢的人,比较喜欢的人,十分喜欢的人。她希望能够有一款软件帮助她把在约会网站上匹配到的对象划分到确切的分类中,从而使她能够在周一到周五约会那些比较喜欢的人,在周末约会那些十分喜欢的人。

       第1步:收集数据。小红每次约会都会把约会数据收集并整理到文本文件dating中,每个约会对象数据占据一行,总共1000行。数据主要包含3个特征:每周去电影院的次数,玩游戏所耗时间百分比,每月花掉的零花钱(为了方便,所以只选取3个特征,实际情况可以更多);以及包含1个类型:不喜欢/比较喜欢/十分喜欢。

       第2部:准备数据。我们必须要把文本文件dating中的数据转换为计算机可以理解的数据格式。可以创建一个1000*3的数组存放1000个人的3个特征,以及一个1*1000的数组存放1000个人的类型。但这还没有完全结束。我们会发现玩游戏所耗时间百分比的取值范围在0-1之间,而每月花掉的零花钱的取值范围却特别的大甚至可以超过几万,这在计算距离时,数字差值大的特征会对计算结果的影响很大。所以我们还必须要将数值归一化:把所有特征的取值范围处理为0-1。方法也很简单,分别找出每个特征的最大值max和最小值min,用每个数据减去min再除以(max-min),就可以把取值范围处理为0-1了。

       第3步:分析输入数据。我们可以使用画图软件创建散点图来观察数据的分布情况,我们会看到数据点所属的三种类型的区域轮廓,即三种类型在图中的大致分布情况会有一定的规律。这里就不着重讲解了。

       第4步:训练算法。刚刚已经提到k-近邻算法不需要训练算法,所以直接跳过。

       第5步:测试算法。我们知道小红有1000个数据,那么我们可以取出其中10%的数据作为测试数据,剩下的数据作为样本数据。把测试数据的特征输入算法中,得出数据的类型,并与实际类型比较是否相同。统计出错误结果的个数,然后除以测试数据总数,得出算法的错误率。只要算法的错误率在可以接受的范围,则认为算法是成功的。

       第6步:使用算法。构建出完整可用的系统,根据小红输入的特征得出该对象的类型,从而帮助小红选择约会对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值