zoukankan      html  css  js  c++  java
  • hadoop Mahout中相似度计算方法介绍(转)

    来自:http://blog.csdn.net/samxx8/article/details/7691868

    相似距离(距离越小值越大)
    优点 缺点 取值范围
    PearsonCorrelation
    类似于计算两个矩阵的协方差
    不受用户评分偏高
    或者偏低习惯影响的影响
    1. 如果两个item相似个数小于2时
    无法计算相似距离.
    [可以使用item相似个数门限来解决.]
    没有考虑两个用户之间的交集大小[使用weight参数来解决]
    2. 无法计算两个完全相同的items
    [-1, 1]
    EuclideanDistanceSimilarity
    计算欧氏距离, 使用1/(1+d)
    使用与评分大小较
    重要的场合
    如果评分不重要则需要归一化,
    计算量大
    同时每次有数据更新时麻烦
    [-1, 1] 
    CosineMeasureSimilarity
    计算角度
    与PearsonCorrelation一致
    [-1, 1]
    SpearmanCorrelationSimilarity
    使用ranking来取代评分的
    PearsonCorrelation
    完全依赖评分和完全放弃评分之间的平衡
    计算rank消耗时间过大
    不利于数据更新
    [-1, 1]
    CacheUserSimilarity
    保存了一些tag, reference
    缓存经常查询的user-similarity 额外的内存开销
    TanimotoCoefficientSimilarity
    统计两个向量的交集占并集的比例
    同时并集个数越多, 越相近.
    适合只有相关性
    而没有评分的情况
    没有考虑评分,信息丢失了 [-1,1]
    LogLikeLihoodSimilarity
    是TanimoteCoefficientSimilarity
    的一种基于概率论改进
    计算两者重合的偶然性
    考虑了两个item相邻的独特性
    计算复杂 [-1,1]

    在现实中广泛使用的推荐系统一般都是基于协同过滤算法的,这类算法通常都需要计算用户与用户或者项目与项目之间的相似度,对于数据量以及数据类型不 同的数据源,需要不同的相似度计算方法来提高推荐性能,在mahout提供了大量用于计算相似度的组件,这些组件分别实现了不同的相似度计算方法。下图用 于实现相似度计算的组件之间的关系:

    1

    图1、项目相似度计算组件

    2

    图2、用户相似度计算组件

    下面就几个重点相似度计算方法做介绍:

    皮尔森相关度

    类名:PearsonCorrelationSimilarity

    原理:用来反映两个变量线性相关程度的统计量

    范围:[-1,1],绝对值越大,说明相关性越强,负相关对于推荐的意义小。

    说明:1、 不考虑重叠的数量;2、 如果只有一项重叠,无法计算相似性(计算过程被除数有n-1);3、 如果重叠的值都相等,也无法计算相似性(标准差为0,做除数)。

        该相似度并不是最好的选择,也不是最坏的选择,只是因为其容易理解,在早期研究中经常被提起。使用Pearson线性相关系数必须假设数据是成对地从正态 分布中取得的,并且数据至少在逻辑范畴内必须是等间距的数据。Mahout中,为皮尔森相关计算提供了一个扩展,通过增加一个枚举类型 (Weighting)的参数来使得重叠数也成为计算相似度的影响因子。

    欧式距离相似度

    类名:EuclideanDistanceSimilarity

    原理:利用欧式距离d定义的相似度s,s=1 / (1+d)。

    范围:[0,1],值越大,说明d越小,也就是距离越近,则相似度越大。

    说明:同皮尔森相似度一样,该相似度也没有考虑重叠数对结果的影响,同样地,Mahout通过增加一个枚举类型(Weighting)的参数来使得重叠数也成为计算相似度的影响因子。

    余弦相似度

    类名:PearsonCorrelationSimilarity和UncenteredCosineSimilarity

    原理:多维空间两点与所设定的点形成夹角的余弦值。

    范围:[-1,1],值越大,说明夹角越大,两点相距就越远,相似度就越小。

    说明:在数学表达中,如果对两个项的属性进行了数据中心化,计算出来的余弦相似度和皮尔森相似度是一样的,在 mahout中,实现了数据中心化的过程,所以皮尔森相似度值也是数据中心化后的余弦相似度。另外在新版本中,Mahout提供了 UncenteredCosineSimilarity类作为计算非中心化数据的余弦相似度。

    Spearman秩相关系数

    类名:SpearmanCorrelationSimilarity

    原理:Spearman秩相关系数通常被认为是排列后的变量之间的Pearson线性相关系数。

    范围:{-1.0,1.0},当一致时为1.0,不一致时为-1.0。

    说明:计算非常慢,有大量排序。针对推荐系统中的数据集来讲,用Spearman秩相关系数作为相似度量是不合适的。

    曼哈顿距离

    类名:CityBlockSimilarity

    原理:曼哈顿距离的实现,同欧式距离相似,都是用于多维数据空间距离的测度

    范围:[0,1],同欧式距离一致,值越小,说明距离值越大,相似度越大。

    说明:比欧式距离计算量少,性能相对高。

    Tanimoto系数

    类名:TanimotoCoefficientSimilarity

    原理:又名广义Jaccard系数,是对Jaccard系数的扩展,等式为

    范围:[0,1],完全重叠时为1,无重叠项时为0,越接近1说明越相似。

    说明:处理无打分的偏好数据。

    对数似然相似度

    类名:LogLikelihoodSimilarity

    原理:重叠的个数,不重叠的个数,都没有的个数

    范围:具体可去百度文库中查找论文《Accurate Methods for the Statistics of Surprise and Coincidence》

    说明:处理无打分的偏好数据,比Tanimoto系数的计算方法更为智能。

  • 相关阅读:
    vue2.0开发聊天程序(八) 初步完成
    王下邀月熊_Chevalier的前端每周清单系列文章索引
    将HTML页面转换为PDF文件并导出
    二维码活码管理系统
    前端眼里的docker
    这些好玩的例子,希望你也能喜欢
    如何实现swipe、tap、longTap等自定义事件
    基于 HTML5 Canvas 的交互式地铁线路图
    【php学习】时间函数
    页面瀑布流布局的实现 javascript+css
  • 原文地址:https://www.cnblogs.com/sunxucool/p/4142311.html
Copyright © 2011-2022 走看看