(数据挖掘-入门-2)相似度衡量的方法

主要内容:

1、距离度量

2、皮尔逊关系系数

3、cosine相似度

4、方法的选择

1、距离度量

距离度量是最简单的衡量相似度的方法,公式如下:

当r=1时,为曼哈顿距离(manhattan distance);

当r=2时,为欧几里得距离(Euclidean distance);

优点:简单

缺点:当数据某些属性或特征缺失时,该度量结果不准确

代码:

def minskowski(rating1,rating2,r):
    distance=0
    commonRatings=Flase
    for key in rating1:
        for key in rating2:
            distance+=pow(abs(rating1[key]-rating2[key]),r)
            commonRatings=True
    if commonRatings:
        return pow(distance,1/r)
    else:
        return 0 #indicates no ratings in common

2、皮尔逊关系系数(Pearson Correlation Coefficient)

有时候,每个人的判断标准不一样,例如在给物品打分(1-5)时,有的人的打分范围为4-5,而有的人为1-5,而他们其实的评价结果是一样的。

但如果通过上述的距离度量的话,那么这两个人的相似度则会相差甚远,因此需要一种类似归一化的方法来解决。

公式如下:

r范围为-1~1

在实际代码实现中,也可以写成下面的形式,这样子就只需要遍历一遍数据即可。

代码:

def pearson(rating1, rating2):
    sum_xy = 0
    sum_x = 0
    sum_y = 0
    sum_x2 = 0
    sum_y2 = 0
    n = 0
    for key in rating1:
        if key in rating2:
            n += 1
            x = rating1[key]
            y = rating2[key]
            sum_xy += x * y
            sum_x += x
            sum_y += y
            sum_x2 += pow(x, 2)
            sum_y2 += pow(y, 2)
    # now compute denominator
    denominator = sqrt(sum_x2 - pow(sum_x, 2) / n) * sqrt(sum_y2 - pow(sum_y, 2) / n)
    if denominator == 0:
        return 0
    else:
        return (sum_xy - (sum_x * sum_y) / n) / denominator
  

3、cosine 相似度

在距离度量中提到,特征空间往往都是稀疏的,如果通过距离去度量相似性的话,会出现不准确的结果。

因此,cosine相似度计算可以解决这个问题,因为它会忽略0值的计算,公式如下:

代码:

def cosine(rating1, rating2):
    sum_xy = 0
    sum_x2 = 0;
    sum_y2 = 0
    for key in rating1:
        sum_x += rating1[key] * rating1[key]
    for key in rating2:
        sum_y += rating2[key] * rating2[key]
    for key in rating1:
        for key in rating2:
            sum_xy += rating1[key] * rating2[key]

    denominator = sqrt(sum_x2) * sqrt(sum_y2)
    if denominator == 0:
        return 0
    else:
        return sum_xy / denominator

4、方法的选择

如果数据是密集dense,那么可以用距离度量;

如果数据是稀疏的sparse,那么可以用cosine度量;

如果数据尺度不一致,那么可以用pearson度量;

时间: 2024-10-14 19:12:22

(数据挖掘-入门-2)相似度衡量的方法的相关文章

数据挖掘入门算法整理

最近正打算学习一些数据挖掘方面的知识,开始看了一些相关博文,但是太过零碎,一直对此没有一个较为系统的认识.周末在图书馆闲逛,偶然看见<大话数据挖掘>一书,发现讲的比较有条理,还蛮适合入门的,因此就读了两章,作此笔记.本文只是介绍了数据挖掘入门的一些算法分类,不涉及具体算法实现. 一下是整理的算法分类图: 1.关联 关联是指一个事件与另一个事件之间的依赖关系.如经典的尿布与啤酒的关系. apriori算法是最经典的关联规则算法,基本思想是:首先从事件中集中找到所有频繁出现的子集.然后在这些子集中

Python数据挖掘入门与实践pdf

下载地址:网盘下载 内容简介  · · · · · · 本书作为数据挖掘入门读物,介绍了数据挖掘的基础知识.基本工具和实践方法,通过循序渐进地讲解算法,带你轻松踏上数据挖掘之旅.本书采用理论与实践相结合的方式,呈现了如何使用决策树和随机森林算法预测美国职业篮球联赛比赛结果,如何使用亲和性分析方法推荐电影,如何使用朴素贝叶斯算法进行社会媒体挖掘,等等.本书也涉及神经网络.深度学习.大数据处理等内容. 作者简介  · · · · · · 作者简介: Robert Layton 计算机科学博士,网络犯

Python数据挖掘入门与实践 彩图 pdf

下载地址:网盘下载 内容简介  · · · · · · 本书作为数据挖掘入门读物,介绍了数据挖掘的基础知识.基本工具和实践方法,通过循序渐进地讲解算法,带你轻松踏上数据挖掘之旅.本书采用理论与实践相结合的方式,呈现了如何使用决策树和随机森林算法预测美国职业篮球联赛比赛结果,如何使用亲和性分析方法推荐电影,如何使用朴素贝叶斯算法进行社会媒体挖掘,等等.本书也涉及神经网络.深度学习.大数据处理等内容. 作者简介  · · · · · · 作者简介: Robert Layton 计算机科学博士,网络犯

数据挖掘入门系列教程(一)之亲和性分析

数据挖掘入门系列教程(一)之亲和性分析 教程系列简介 系列地址:https://www.cnblogs.com/xiaohuiduan/category/1661541.html 该教程为入门教程,为博主学习数据挖掘的学习路径步骤.教程为入门教程,从最简单的开始.使用的编程语言为Python3.8.1,使用JupyterNotebook作为开发环境(使不使用JupyterNotebook都没有关系). 在学习本教程之前,你需要: 有一点python编程基础 会用百度 or 谷歌 数学知识还是要一

(数据挖掘-入门-5)基于内容的协同过滤与分类

1.动机 2.基于内容的分类器 3.python实现 一.动机 在前面的文章中介绍了基于用户和基于物品的协同过滤推荐方法,其实无论是基于用户还是基于物品,都是通过群体效应来进行推荐,因为衡量相似度的向量都是基于一定群体用户的评分,所以推荐出来的物品都是热门的流行的物品,对于一些冷门物品可能就无法收到亲睐. 而一个好的推荐系统,不仅能为用户发现热门流行的感兴趣物品,也能为用户提供自己也不了解的但也会感兴趣的物品,即冷门的物品,这样既有益于用户,也照顾了内容提供商. 因此,本文将介绍一种基于内容即物

数据挖掘入门系列教程(八)之使用神经网络(基于pybrain)识别数字手写集MNIST

目录 数据挖掘入门系列教程(八)之使用神经网络(基于pybrain)识别数字手写集MNIST 下载数据集 加载数据集 构建神经网络 反向传播(BP)算法 进行预测 F1验证 总结 参考 数据挖掘入门系列教程(八)之使用神经网络(基于pybrain)识别数字手写集MNIST 在本章节中,并不会对神经网络进行介绍,因此如果不了解神经网络的话,强烈推荐先去看<西瓜书>,或者看一下我的上一篇博客:数据挖掘入门系列教程(七点五)之神经网络介绍 本来是打算按照<Python数据挖掘入门与实践>

AJAX入门--- XMLHttpRequest对象的属性和方法

由于刚刚接触到Ajax对其比较陌生,而其中的XMLHttpRequest对象更是未曾听闻.开始学之前,了解一下它的属性和方法为它的使用做下铺垫.本文重点介绍XMLHttpRequest的属性和方法. XMLHttpRequest对象的属性和事件 属性 描述 readyState 表示XMLHttpRequest对象的状态[1] responseText 包含客户端接收到的HTTP相应的文本内容[2] responseXML 服务器响应的XML内容对应的DOM对象[3] status 服务器返回h

内存泄露从入门到精通三部曲之排查方法篇

内存泄露从入门到精通三部曲之排查方法篇 最原始的内存泄露测试 重复多次操作关键的可疑的路径,从内存监控工具中观察内存曲线,是否存在不断上升的趋势且不会在程序返回时明显回落.这种方式可以发现最基本,也是最明显的内存泄露问题,对用户价值最大,操作难度小,性价比极高. MAT内存分析工具 2.1 MAT分析heap的总内存占用大小来初步判断是否存在泄露 在Devices 中,点击要监控的程序. 点击Devices视图界面中最上方一排图标中的“Update Heap” 点击Heap视图 点击Heap视图

字符串相似度计算的方法,使用SQL以及C#实现,本文非原创摘自网络(.NET SQL技术交流群入群206656202需注明博客园)

1 CREATE function get_semblance_By_2words 2 ( 3 @word1 varchar(50), 4 @word2 varchar(50) 5 ) 6 returns nvarchar(4000) 7 as 8 begin 9 declare @re int 10 declare @maxLenth int 11 declare @i int,@l int 12 declare @tb1 table(child varchar(50)) 13 declare