推荐系统中的相似度度量

相似度计算是数据挖掘,推荐引擎中的最基本问题,例如在推荐系统(Recommender Systems,简称RSs)中计算带推荐物品(Item)相似度,或是用户(User)之间的相似度以期获得兴趣口味(Taste)相似的用户时,均需要使用到相似度计算技术。经常使用的相似度计算方式较多,且各有特点, 以下就列出常用的相似度计算方式,原理,以及其优缺点。

相似度计算和距离计算是类似问题,之前粗略看了下Mahout(apache分布式数据挖掘项目)中的实现对各计算方式进行分析。结合在实际项目中的应用,介绍几类常用的距离计算公式。

Cosine

最常使用的相似度计算方法,而且总体效果较好,可以说是简单实用。数学描述如下:

其中 是X的模。

例如,在推荐引擎中,使用 r_ui表示User u对Item i的打分,则可以使用u对各Item打的分数的向量作为User u的兴趣爱好,则User u和User v之间的cosine相似度计算方式为:

其中 I_ui 表示User u,v均投票了的item。

Cosine的几何意义为向量空间中,将待计算相似度的向量均归一化为长度为1的向量, 所有被归一化后的向量  ov的v点坐标均落在以向量0为球心,半径为1的球面上,使用二向量的夹角度量二者相似度,夹角越小,相似程度越高。

在文本处理过程中,cosine度量方式表现效果都会比较好。

Mahout中参见CosineDistanceMeasure.java

Pearson Correlation

用于度量线性关系最常用的方法, 定义 为协方差,σ为标准差, 则Pearson相关系数为:

例如,使用 表示User u对Item的打分,则User u,v之间的相似度计算方式为:

其中 表示User u,v均投票了的item,与COS的区别是考虑了投票的均值, 且分母考虑的是User u,v共同投票的Item。

很多时候,针对User的PC要比针对Item的PC效果较好,因为针对User的PC相当于对各个用户的投票Scales做了一个中心化,避免各用户对相同Item投票时,因为投票习惯不一样而导致的差异。例如:投票分值分[1,5]档,有些人投4表示非常喜欢, 而有些人会投5表述相同的喜好程度。

PC的缺点如下:

  1. 如任意User仅投票了一个元素, 则无法使用该公式计算。
  2. 如任意User的每个投票分值均一样, 则无法使用该公式计算。
  3. 计算时没有考虑投票的总数量, 例如User u投票了200 Items,而v仅投票了2Items,则最后有可能还是v与待比较User近似。

另外PC也经常用作序列趋势的相近程度度量。在检索,推荐系统中经常需要考虑检索结果及推荐商品的季节因素,例如根据往年某一商品的季节特征,预测类似产品的接下来的流行程度。 下图分别为检索词‘吴莫愁’,‘梁博’,‘滑雪’在过去3个月的搜索PV,使用PC度量,很容易得到检索词‘吴莫愁’与‘梁博’的相似度远远大于‘梁博’与‘滑雪’的相似度。

Mahout中参见PearsonCorrleationSimilarity.java

Spearman Rank Correlation(SRC)

Spearman Rank Correlation和Pearson Correlation非常类似, 只是SRC没有考虑对User对某具体Item的投票,而是考虑Item 在User所有投票中的相对Ranking。其数学表示为:

其中 k_ui表示User u对Item的投票值在User u所有投票中的Ranking。

SRC的优点是能够避免每个用户因投票习惯不一致带来的误差, 缺点是计算开销较大(每次计算都需要进行排序)

Mahout中参见SpearmanCorreleationSimilarity.java。计算复杂度较高。

Simple Matching Coefficient

imple Matching Coefficient

仅考虑数据为二值的情况(0,1)。 如果数据非二值, 则将数据转化为为二值。定义M01为u中属性为0,但v中属性为1的数量,M00表示u,v中属性均为0的数量,M10,M11同理。则SMC定义如下:

例如u=[1,1,0,0],v=[0,1,1,0],则SMC=2/4=0.5

Jaccard Coefficient

与SMC计算方式类似,但具体运算公式如下:

即仅考虑两个向量中,同一维度上值均为1的数量。该相似度度量公式在文本匹配中也较为常用, 比如在计算两个短字串的相似度时,首先将字符串切词,找到更细粒度的切词结果term,之后以不同的term作为不同维度的属性,使用JC计算相似度。

Extented Jaccard(Tanimoto)

距离度量方式

该度量方式是最直观的度量方式,一般使用曼哈顿,欧几里得距离度量,而更为广义的是闵科夫斯基度量方式。以Euclidean Distance为例:

可简单转化为相似度则表示为:

推荐系统中的相似度度量

时间: 2024-08-14 23:45:49

推荐系统中的相似度度量的相关文章

图像检索中相似度度量公式:各种距离(1)

基于内容的图像检索(Content-Based Image Retrieval)是指通过对图像视觉特征和上下文联系的分析,提取出图像的内容特征作为图像索引来得到所需的图像. 相似度度量方法 在基于内容的图像检索中需要通过计算查询和候选图像之间在视觉特征上的相似度匹配.因此需要定义一个合适的视觉特征相似度度量方法对图像检索的效果无疑是一个很大的影响.提取的视觉特征大都可以表示成向量的形式,事实上,常用的相似度度量方法都是向量空间模型,也就是把视觉特征看作是向量空间中的点,通过计算两个点之间的接近程

模式识别之相似度计量---余弦计算相似度度量关于两句话的相似度

余弦计算相似度度量 相似度度量(Similarity),即计算个体间的相似程度,相似度度量的值越小,说明个体间相似度越小,相似度的值越大说明个体差异越大. 对于多个不同的文本或者短文本对话消息要来计算他们之间的相似度如何,一个好的做法就是将这些文本中词语,映射到向量空间,形成文本中文字和向量数据的映射关系,通过计算几个或者多个不同的向量的差异的大小,来计算文本的相似度.下面介绍一个详细成熟的向量空间余弦相似度方法计算相似度 向量空间余弦相似度(Cosine Similarity) 余弦相似度用向

推荐系统中所需的概率论与数理统计知识

前言 一个月余前,在微博上感慨道,不知日后是否有无机会搞DM,微博上的朋友只看不发的围脖评论道:算法研究领域,那里要的是数学,你可以深入学习数学,将算法普及当兴趣.想想,甚合我意.自此,便从rickjin写的"正态分布的前世今生"开始研习数学. 如之前微博上所说,"今年5月接触DM,循序学习决策树.贝叶斯,SVM.KNN,感数学功底不足,遂补数学,从'正态分布的前后今生'中感到数学史有趣,故买本微积分概念发展史读,在叹服前人伟大的创造之余,感微积分概念模糊,复习高等数学上册,

矩阵分解在推荐系统中的应用

矩阵分解是最近几年比较火的算法,经过kddcup和netflix比赛的多人多次检验,矩阵分解可以带来更好的结果,而且可以充分地考虑各种因素的影响,有非常好的扩展性,因为要考虑多种因素的综合作用,往往需要构造cost function来将矩阵分解问题转化为优化问题,根据要考虑的因素为优化问题添加constraints,然后通过迭代的方法进行矩阵分解,原来评分矩阵中的missing vlaue可以通过分解后得到的矩阵求的. 本文将简单介绍下最近学习到的矩阵分解方法. (1)PureSvd 怎么评价这

算法之常用的距离和相似度度量

在数据分析和数据挖掘的过程中,我们经常需要知道个体间差异的大小,进而评价个体的相似性和类别.最常见的是数据分析中的相关分析,数据挖掘中的分类和聚类算法,如K最近邻(KNN)和K均值(K-Means).当然衡量个体差异的方法有很多,这里整理罗列下. 为了方便下面的解释和举例,先设定我们要比较X个体和Y个体间的差异,它们都包含了N个维的特征,即X=(x1, x2, x3, … xn),Y=(y1, y2, y3, … yn).下面来看看主要可以用哪些方法来衡量两者的差异,主要分为距离度量和相似度度量

Mahout 常用相似度度量(笔记)

Mahout 基于推荐系统,分类,聚类算法 等经常用到的相似度度量: PearsonCorrelationSimilarity 皮尔森距离 EuclideanDistanceSimilarity 欧几里德距离 CosineMeasureSimilarity   余弦距离(0.7变成了UncenteredCosineSimilarity) SpearmanCorrelationSimilarity 斯皮尔曼等级相关, 排序后的皮尔森距离 TanimotoCoefficientSimilarity 

相似度度量 距离

在数据分析和数据挖掘的过程中,我们经常需要知道个体间差异的大小,进而评价个体的相似性和类别.最常见的是数据分析中的相关分析,数据挖掘中的分类和聚类算法,如K最近邻(KNN)和K均值(K-Means).当然衡量个体差异的方法有很多,最近查阅了相关的资料,这里整理罗列下. 为了方便下面的解释和举例,先设定我们要比较X个体和Y个体间的差异,它们都包含了N个维的特征,即X=(x1, x2, x3, - xn),Y=(y1, y2, y3, - yn).下面来看看主要可以用哪些方法来衡量两者的差异,主要分

距离和相似度度量

在数据分析和数据挖掘的过程中,我们经常需要知道个体间差异的大小,进而评价个体的相似性和类别.最常见的是数据分析中的相关分析,数据挖掘中的分类和聚类算法,如K最近邻(KNN)和K均值(K-Means).当然衡量个体差异的方法有很多,最近查阅了相关的资料,这里整理罗列下. 为了方便下面的解释和举例,先设定我们要比较X个体和Y个体间的差异,它们都包含了N个维的特征,即X=(x1, x2, x3, - xn),Y=(y1, y2, y3, - yn).下面来看看主要可以用哪些方法来衡量两者的差异,主要分

推荐系统中召回策略

推荐系统一般分为两个阶段,即召回阶段和排序阶段.召回阶段主要是从全量的商品库中得到用户可能感兴趣的一小部分候选集,排序阶段则是将召回阶段得到的候选集进行精准排序,推荐给用户. 推荐系统中几种常用的召回策略.主要有协同过滤.向量化召回和阿里最近在Aicon中提到的深度树匹配模型. 1.协同过滤 协同过滤主要可以分为基于用户的协同过滤. 基于物品的协同过滤.基于模型的协同过滤(如矩阵分解) 1.1 基于用户的协同过滤(userCF) 基本思想:当召回用户A的候选集时,可以先找到和他有相似兴趣的其他用