几种距离计算公式在数据挖掘中的应用场景分析

简介: 标签: 数据挖掘/曼哈顿距离/欧几里得距离/皮尔逊相关系数/余弦相似度 打开微信扫一扫,关注微信公众号【数据与算法联盟】 转载请注明出处:http://blog.csdn.

标签: 数据挖掘/曼哈顿距离/欧几里得距离/皮尔逊相关系数/余弦相似度



这里写图片描述
打开微信扫一扫,关注微信公众号【数据与算法联盟】

转载请注明出处:http://blog.csdn.net/gamer_gyt
博主微博:http://weibo.com/234654758
Github:https://github.com/thinkgamer


本文涉及以下几种距离计算公式的分析,参考资料为《面向程序员的数据挖掘指南》

  • 曼哈顿距离
  • 欧几里得距离
  • 闵可夫斯基距离
  • 皮尔逊相关系数
  • 余弦相似度

之前整理过一篇关于距离相关的文章:机器学习算法中的距离和相似性计算公式,分析以及python实现

闵可夫斯基距离

两个n维变量a(x11,x12,…,x1n)与 b(x21,x22,…,x2n)间的闵可夫斯基距离定义为:

k=1nx1kx2kpp

其中p是一个变参数。

当p=1时,就是曼哈顿距离

当p=2时,就是欧氏距离

当p→∞时,就是切比雪夫距离

根据变参数的不同,闵氏距离可以表示一类的距离。

p值越大,单个维度的差值大小会对整体距离有更大的影响

曼哈顿距离/欧几里得距离的瑕疵

在《面向程序员的数据挖掘指南》中给出了这样一组样例数据, 下图为一个在线音乐网站的的用户评分情况,用户可以用1-5星来评价一个乐队,下边是8位用户对8个乐队的评价:


这里写图片描述

表中的横线表示用户没有对乐队进行评价,我们在计算两个用户的距离时,只采用他们都评价过的乐队。

现在来求Angelica和Bill的距离,因为他们共同评分过的乐队有5个,所以使用其对该5个乐队的评分进行曼哈顿距离的计算为:

Dis_1 = |3.5-2| + |2-3.5| + |5-2| + |1.5-3.5| + |2-3| = 9

同样使用欧式距离计算为:

Dis_2 = sqrt( (3.5-2)^2 + (2-3.5)^2 + (5-2)^2 + (1.5-3.5)^2 + (2-3)^2 ) = 4.3

当对Angelica和Bill,Bill和Chan进行距离对比时,由于两者的共同评分过的乐队均为5,数据都在一个5维空间里,是公平的,如果现在要计算Angelica和Hailey与Bill的距离时,会发现,Angelica与Bill共同评分的有5个乐队,Hailey与Bill共同评分的有3个乐队,也就是说两者数据一个在5维空间里,一个在三维空间里,这样明显是不公平的。这将会对我们进行计算时产生不好的影响,所以曼哈顿距离和欧几里得距离在数据完整的情况下效果最好。


用户问题/皮尔逊相关系数/分数膨胀

现象——用户问题

仔细观察用户对乐队的评分数据,可以发现每个用户的评分标准不同:

  • Bill没有打出极端的分数,都在2-4分之间
  • Jordyn似乎喜欢所有的乐队,打分都在4-5之间
  • Hailey是一个有趣的人,他的评分不是1就是4

那么如何比较这些用户呢?比如说Hailey的4分是相当于Jordyn的4分还是5分呢?我觉得更接近5分,这样一来,就影响推荐系统的准确性了!

解决该现象

解决该现象的办法之一就是 使用皮尔逊相关系数,例如下边这样的数据样例(Clara和Robert对五个乐队的评分):


这里写图片描述

这种现象在数据挖掘领域被称为“分数膨胀“。我们将其评分画成图,如下:


这里写图片描述

一条直线-完全吻合,代表着Clara和Robert的喜好完全一致。

皮尔逊相关系数用于衡量两个变量之间的相关性,他的值在-1~1,1代表完全一致,-1代表完全相悖。所以我们可以利用皮尔逊相关系数来找到相似的用户。

皮尔逊相关系数的计算公式为:


这里写图片描述

该公式除了看起来比较复杂,另外需要对数据进行两次遍历,第一次遍历求出 x平均值和y平均值,第二次遍历才能出现结果,这里提供另外一个计算公式,能够计算皮尔逊相关系数的近似值:

这里写图片描述


余弦相似度/稀疏数据

假设这样一个数据集,一个在线音乐网站,有10000w首音乐(这里不考虑音乐类型,年代等因素),每个用户常听的也就其中的几十首,这种情况下使用曼哈顿或者欧几里得或者皮尔逊相关系数进行计算用户之间相似性,计算相似值会非常小,因为用户之间的交集本来就很少,这样对于计算结果来讲是很不准确的,这个时候就需要余弦相似度了,余弦相似度进行计算时会自动略过这些非零值。

总结

这里只是简答的介绍了这几种相似性距离度量的方法和场景,但是在实际环境中远比这个复杂许多。这里总结下:

  • 如果数据存在“分数膨胀“问题,就使用皮尔逊相关系数
  • 如果数据比较密集,变量之间基本都存在共有值,且这些距离数据都是非常重要的,那就使用欧几里得或者曼哈顿距离
  • 如果数据是稀疏的,就使用余弦相似度
相关文章
|
5月前
|
自然语言处理 算法 数据挖掘
【数据挖掘】十大算法之PageRank连接分析算法
文章介绍了PageRank算法的基本概念和数学模型,包括如何通过一阶马尔科夫链定义随机游走模型以及如何计算网页的重要性评分,并提供了PageRank迭代算法的具体步骤。
121 0
|
5月前
|
数据采集 自然语言处理 数据可视化
基于Python的社交媒体评论数据挖掘,使用LDA主题分析、文本聚类算法、情感分析实现
本文介绍了基于Python的社交媒体评论数据挖掘方法,使用LDA主题分析、文本聚类算法和情感分析技术,对数据进行深入分析和可视化,以揭示文本数据中的潜在主题、模式和情感倾向。
425 0
|
5月前
|
机器学习/深度学习 安全 算法
【2023年第十一届泰迪杯数据挖掘挑战赛】A题:新冠疫情防控数据的分析 32页和40页论文及实现代码
本文总结了2023年第十一届泰迪杯数据挖掘挑战赛A题的新冠疫情防控数据分析,提供了32页和40页的论文以及实现代码,涉及密接者追踪、疫苗接种影响分析、重点场所管控以及疫情趋势研判等多个方面,运用了机器学习算法和SEIR传染病模型等方法。
90 0
【2023年第十一届泰迪杯数据挖掘挑战赛】A题:新冠疫情防控数据的分析 32页和40页论文及实现代码
|
5月前
|
机器学习/深度学习 安全 算法
【2023年第十一届泰迪杯数据挖掘挑战赛】A题:新冠疫情防控数据的分析 建模方案及python代码详解
本文介绍了2023年第十一届泰迪杯数据挖掘挑战赛A题的解题思路和Python代码实现,涵盖了新冠疫情防控数据的分析、建模方案以及数据治理的具体工作。
89 0
【2023年第十一届泰迪杯数据挖掘挑战赛】A题:新冠疫情防控数据的分析 建模方案及python代码详解
|
5月前
|
数据采集 自然语言处理 数据可视化
基于python数据挖掘在淘宝评价方面的应用与分析,技术包括kmeans聚类及情感分析、LDA主题分析
本文探讨了基于Python数据挖掘技术在淘宝评价分析中的应用,涵盖了数据采集、清洗、预处理、评论词频分析、情感分析、聚类分析以及LDA主题建模和可视化,旨在揭示淘宝客户评价中的潜在模式和情感倾向,为商家和消费者提供决策支持。
117 0
|
5月前
|
SQL 开发框架 大数据
【数据挖掘】顺丰科技2022年秋招大数据挖掘与分析工程师笔试题
顺丰科技2022年秋招大数据挖掘与分析工程师笔试题解析,涵盖了多领域选择题和编程题,包括动态规划、数据库封锁协议、概率论、SQL、排序算法等知识点。
103 0
|
5月前
|
机器学习/深度学习 算法 数据挖掘
【数据挖掘】PCA 主成分分析算法过程及原理讲解
主成分分析(PCA)的原理和算法过程。
169 0

热门文章

最新文章