• 相似度计算方法学习总结


    无论什么推荐算法,计算相似度都是避不开的,下面就总结一下已经了解的相似度计算方法。

    1.余弦相似度

     

    这个算是最常用的了,典型例子是计算文本相似度。通过计算两个向量间的夹角,越是相似夹角度数越接近0,所计算的值也就越接近1

    但是余弦相似度只对方向敏感,对距离并不敏感。

     2.欧式距离(欧几里得距离)

     

    就是计算空间上两点间的距离。下图很好体现了欧氏距离和余弦相似度的差异。

     

    所以可以看出 欧氏距离 适用于 那些 对数值差异大小敏感的 相似度计算,

    余弦相似度 更适用于 判别方向上的差异,而对绝对的数值不敏感的,比如 通过用户对 内容的评分来区分兴趣的相似度,修正了不同用户之间可能存在度量标准不统一的问题(有的用户默认高分,有的用户默认低分,对于默认低分用户来说7分就表示他喜欢了,而对默认高分用户来说10分才表示喜欢)。

     3.皮尔逊相关系数(PC)

     

    其实就是 升级版的余弦相似度。

    举个例子:

    用户对内容评分,按5分制,XY两个用户对两个内容的评分分别为(1,2)和(4,5),使用余弦相似度得到的结果是0.98,两者极为相似。但从评分上看X似乎不喜欢2这个 内容,而Y则比较喜欢,余弦相似度对数值的不敏感导致了结果的误差,需要修正这种不合理性就出现了调整余弦相似度,即所有维度上的数值都减去一个均值,比如XY的评分均值都是3,那么调整后为(-2-1)和(1,2),再用余弦相似度计算,得到-0.8,相似度为负值并且差异不小,但显然更加符合现实。

    此外,还有

    斯皮尔曼等级相关系数、平局平方差异(MSD)、Jaccard距离和Dice系数等... 不太懂,以后涉及到深处在研究哈。

    https://www.cnblogs.com/chenliyang/p/6548306.html)

  • 相关阅读:
    ES6中关于数据类型的拓展:Symbol类型
    ES里关于数组的拓展
    ES里关于对象的拓展
    ES6里关于函数的拓展(三)
    ES6里关于函数的拓展(二)
    ES6里关于函数的拓展(一)
    ES6里关于正则表达式的拓展
    ES6里关于模板字面量的拓展
    Android之怎样实现滑动页面切换【Fragment】
    java quartz的使用,做时间轮询调用 CronTrigger
  • 原文地址:https://www.cnblogs.com/dsgcBlogs/p/8619549.html
Copyright © 2020-2023  润新知