您的位置:首页 > 其它

关于机器学习的学习笔记(三):k近邻算法

2015-01-03 00:00 761 查看
摘要: 一、什么是k近邻算法
二、k近邻算法的特点
三、k近邻算法的应用

一、什么是k近邻算法:
还是先百度:“k最近邻(k-Nearest Neighbour,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。”
举一个例子,如何让电脑判断一部电影是爱情片还是动作片?假如我们有一个训练数据集,有1000部电影的数据,知道每一部电影中吻戏的次数,打戏的次数,以及电影的分类(爱情片还是动作片)。我们以吻戏的次数为X轴,打戏的次数为Y轴,用圆形表示动作片,用三角形表示爱情片,可以将训练数据集投射到一个二维的空间中:



如果有一部新片子用?表示,我们知道其中的吻戏次数和打戏次数,并将其也放到二维空间中,通过计算其距离最近的k部片子,看着k部片子中是爱情片多还是动作片多,则可以知道这部片子的分类(动作片)。

那么问题来了:如何计算两部片子的距离?在上面的图中,两部片子A和B之间的距离可以通过以下公式计算:



为了知道一部新子的类型,通过以上公式,计算与1000部训练数据片子的距离,并且根据距离最近的k部片子的类型,我们就能知道新片子的类型。
更一般的,如果我们的训练数据集有n个特征,那么,每一个训练样例可以表示为一个n维空间中的点,当我们有了一个新的样例需要进行分类,我们只需要根据公式计算新的样例与所有训练数据的距离,并且根据距离最近的k个训练样例的类型来对新样例进行分类。在n维空间中两个点的距离可以用以下公式进行计算:



二、k近邻算法的特点:

k近邻算法有以下特点:
1、k近邻算法是一个“消极”的算法,也就是说k近邻算法不会生成一个模型或者一个规则,你只需要有一个训练样例集,然后如果有新的实例需要分类,把新的实例扔到训练样例中去算就可以了,着也意外着k近邻算法是一种可以增量学习的算法。
2、k近邻算法对于特征的值要求是连续的数值类型,这与决策树对特征值的要求恰恰相反。
3、因为对于不同的特征值,可能特征值的单位是不同的,故取值的范围也会有很大的差异,所以在应用k近邻算法之前,一般需要对特征值进行缩放(考虑手机屏幕尺寸及摄像头像素对手机价格的影响,对于我手上的一部手机,这两个特征值分别是5和8,000,000)。一般通过为每一个特征变量设置缩放因子的方法来进行处理,如果特征变量的值较少并且有领域知识可以利用,可以使用领域知识人为的设置缩放因子,如果特征变量的值比较多并且不知道特征值对结果的影响,则可以采用交叉验证的优化方法来自动计算缩放因子的值(交叉验证是将训练集分为两份,一份90%作为新的训练集,一份10%用作验证,对于每一个特征变量,使用不同的缩放因子,使用新的训练集进行训练,并用10%的数据验证其准确率,最终取准确率最高的缩放因子)。
4、k近邻算法最大的缺点在于,在训练集很大的时候,每次进行预测时的实时计算量太大,因为需要对训练集中的每一个样例进行计算距离,并取得距离最近的一组样例进行预测。同时,在特征值很多的时候,为每一个特征值计算出合适的缩放因子也存在很大的计算量。
三、k近邻算法的应用

假设我期望将一些老的套餐用户迁移到新推的套餐上来,一般传统的做法是资费演算或者理财助手之类的方法计算出用户适合使用什么样的套餐。但是如果已经有了一部分新套餐的用户了(比如10万),我们就可以使用机器学习的算法,利用已选择新套餐的用户特征,对未选择新套餐的用户进行预测。
假设我们可以选取5个特征变量用于进行机器学习:1、ARPU;2、MOU;3、DOU;4、是否4G终端(不是数值类型,但用0和1来转换即可);5、短信条数。对于一个老的套餐用户,我通过这5个特征变量,只需要计算与10万个已经办理了新套餐用户的欧氏距离。并取得欧氏距离最短的10个用户之后,再看这10个用户订购的新套餐是什么,理论上,这10个用户中订购量最大的那个套餐就是我们要推荐的套餐。
上期回顾:决策树算法

下期预告:贝叶斯算法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息