《写给程序员的数据挖掘实践指南》——5.6近邻算法的改进

简介:

本节书摘来自异步社区出版社《写给程序员的数据挖掘实践指南》一书中的第5章,第5.6节,作者:【美】Ron Zacharski(扎哈尔斯基),更多章节内容可以访问云栖社区“异步社区”公众号查看。

5.6近邻算法的改进

一个普通的分类器的例子是Rote分类器,它只记忆所有的训练集,仅当实例与训练样本精确匹配时才对实例进行分类。如果只在训练集上进行评估,那么Rote分类器的精确率一直是100%。在实际中,由于有些待分类的实例不在训练集中出现,因此Rote分类器并不是一个好的选择。我们可以将前面介绍的近邻分类器看成是Rote分类器的一个扩展。与Rote分类器寻找精确匹配不同的是,近邻方法寻找近似的匹配。Pang Ning Tan、Michael Steinbach和Vipin Kumar在他们所著的数据挖掘教材1中称这种做法为“如果某个东西走路像鸭子,叫起来像鸭子,看上去也像鸭子,那么它可能就是一只鸭子”。
image

近邻算法在遇到离群点时会发生问题。下面对此进行解释。我们再次回到女子运动员那个例子,这次只考察体操运动员和马拉松运动员。假设有一个个子特别矮、体重特别轻的马拉松运动员。该数据可以用下面的图来表示,其中m表示马拉松运动员,g表示体操运动员。

image

可以看到,那个个子矮、体重轻的马拉松运动员处于很多g中间的那个m上。假设x是待分类的实例,其最近邻是那个离群点m,因此它被会分为马拉松运动员。如果我们仔细观察上图,我们会说x更像是一名体操运动员,这是因为它出现在一堆体操运动员中间。

kNN
当前的最近邻分类器的一种改进方法是考察k个而不只是1个最近的邻居(kNN)。每个邻居会进行投票,分类器会将实例分到具有最高投票数目的类别中去。例如,假设使用的是3个最近邻(k=3)。上图中会有2票投向体操运动员,1票投向马拉松运动员,因此我们预计x是一名体操运动员。

image

因此当预测离散型类别(例如,马拉松运动员、体操运动员或篮球运动员)时,可以利用上述投票方法。具有最高得票的类别将被分配给实例。如果存在多个得票相同的类别,则从中随机选择最后的类别。当进行数值预测时(比如给乐队Funky Meters打几星),可以通过计算距离权重值来将影响分摊给多个近邻。这里稍微更深入地分析一下。假设我们想预测Ben喜欢Funky Meters乐队的程度,而Ben的3个最近邻分别是Sally、Tara和Jade。下面给出了他们到Ben的距离以及他们对Funky Meters的评分结果。

image

因此,Sally离Ben最近,她给Funky Meters的评分为4。由于我希望最近用户的评分在最终评分结果中的权重大于其他近邻的评分,因此第一步就是对距离进行转换以使数值越大用户越近。一种实现的方法就是求距离的倒数(即1除以距离)。于是Sally的距离的倒数为:

image

下面将每个距离的倒数除以所有倒数之和。所有距离倒数的和为0.2+0.1+0.067=0.367。

image

我们应该注意到两件事。第一,所有的影响因子之和为1;第二,从原始距离来看,Sally到Ben的距离是她到Tara的距离的两倍,而在最后的影响因子中,两倍的关系仍然保留,也就是说Sally的影响是Tara的两倍。最后,我们将每个人的影响因子乘上评分然后求和,有:

Ben的预测评分
= (0.545×4) + (0.272×5) + (0.183×5)

= 2.18 + 1.36 + 0.915 = 4.455

image

我想知道Sofia对爵士乐钢琴家Hiromi的喜欢程度,下列数据使用k近邻得到的预测值是多少(k=3)?

image

第一步是计算每个距离的倒数(1除以距离),得到:
image

距离倒数之和为0.475。下面通过将每个距离倒数除以距离倒数之和来计算每个用户的影响因子,有:

image

最后,将影响因子乘上评分并进行累加得到:image

相关文章
|
5月前
|
机器学习/深度学习 自然语言处理 算法
【数据挖掘】金山办公2020校招大数据和机器学习算法笔试题
金山办公2020校招大数据和机器学习算法笔试题的解析,涵盖了编程、数据结构、正则表达式、机器学习等多个领域的题目和答案。
116 10
|
5月前
|
自然语言处理 算法 数据挖掘
【数据挖掘】十大算法之PageRank连接分析算法
文章介绍了PageRank算法的基本概念和数学模型,包括如何通过一阶马尔科夫链定义随机游走模型以及如何计算网页的重要性评分,并提供了PageRank迭代算法的具体步骤。
121 0
|
2月前
|
机器学习/深度学习 算法 Python
机器学习入门:理解并实现K-近邻算法
机器学习入门:理解并实现K-近邻算法
42 0
|
3月前
|
负载均衡 监控 算法
每个程序员都应该知道的 6 种负载均衡算法
每个程序员都应该知道的 6 种负载均衡算法
318 2
|
4月前
|
算法 程序员 Python
程序员必看!Python复杂度分析全攻略,让你的算法设计既快又省内存!
在编程领域,Python以简洁的语法和强大的库支持成为众多程序员的首选语言。然而,性能优化仍是挑战。本文将带你深入了解Python算法的复杂度分析,从时间与空间复杂度入手,分享四大最佳实践:选择合适算法、优化实现、利用Python特性减少空间消耗及定期评估调整,助你写出高效且节省内存的代码,轻松应对各种编程挑战。
82 1
|
4月前
|
机器学习/深度学习 数据采集 算法
数据挖掘和机器学习算法
数据挖掘和机器学习算法
|
5月前
|
机器学习/深度学习 存储 人工智能
【数据挖掘】2022年2023届秋招知能科技公司机器学习算法工程师 笔试题
本文是关于2022-2023年知能科技公司机器学习算法工程师岗位的秋招笔试题,包括简答题和编程题,简答题涉及神经网络防止过拟合的方法、ReLU激活函数的使用原因以及条件概率计算,编程题包括路径行走时间计算和两车相向而行相遇时间问题。
82 2
【数据挖掘】2022年2023届秋招知能科技公司机器学习算法工程师 笔试题
|
5月前
|
机器学习/深度学习 自然语言处理 算法
【数据挖掘】2020奇安信秋招算法方向试卷1 笔试题解析
2020年奇安信秋招算法方向试卷1的题目解析,覆盖了数据结构、机器学习、深度学习、自然语言处理、排序算法、激活函数、主题模型、采样方法、图像处理等多个领域的知识点。
65 1
【数据挖掘】2020奇安信秋招算法方向试卷1 笔试题解析
|
5月前
|
机器学习/深度学习 存储 算法
【数据挖掘】2020奇安信秋招算法方向试卷3 笔试题解析
2020年奇安信秋招算法方向试卷3的题目解析,涵盖了数据结构、机器学习、深度学习、自然语言处理、排序算法、激活函数、PCA、词嵌入库等多个领域的知识点。
74 1
【数据挖掘】2020奇安信秋招算法方向试卷3 笔试题解析
|
5月前
|
算法 搜索推荐 程序员
程序员常用算法详细讲解
每一种算法都有其适用场景,了解并熟悉这些常用算法的策略和实现,对于解决实际编程问题具有重要的意义。需要注意的是,理论知识的重要性虽然不言而喻,但真正的理解和掌握,还需要在实践中不断地尝试和错误,以达到深入理解的目的。
49 1

热门文章

最新文章

下一篇
开通oss服务