1、 皮尔逊相关系数
在早期的推荐系统中皮尔逊相关系数是一个基础的相似性衡量标准,先从这个参数定义开始说起。

皮尔逊系数度量两个一一对应数列之间的线性相关程度,上述四种公式都是计算该系数方法,下面python 代码使用就是公式4。

def sim_pearson(prefs,p1,p2):# Get the list of mutually rated itemssi={}for item in prefs[p1]: if item in prefs[p2]: si[item]=1# if they are no ratings in common, return 0if len(si)==0: return 0# Sum calculationsn=len(si)# Sums of all the preferencessum1=sum([prefs[p1][it] for it in si])sum2=sum([prefs[p2][it] for it in si])  # Sums of the squaressum1Sq=sum([pow(prefs[p1][it],2) for it in si])sum2Sq=sum([pow(prefs[p2][it],2) for it in si])
# Sum of the productspSum=sum([prefs[p1][it]*prefs[p2][it] for it in si])
# Calculate r (Pearson score)num=pSum-(sum1*sum2/n)den=sqrt((sum1Sq-pow(sum1,2)/n)*(sum2Sq-pow(sum2,2)/n))if den==0:return 0r=num/denreturn r

说完皮尔逊系数的计算后我们来分析该系数的优势和不足。
优势:该系数可以修正‘夸大分值’的情况,举例就是user1 倾向总是评分为高分,user2 倾向总是评分在低分区域,加入使用时欧式距离这样两个user的相似性比较低,但是其实两个user爱好可能类似,只是他们对分数的标准不是那么一致。
不足:首先没有考虑到两个用户的给出评分数目,两个看过200部电影的用户,即便他们偶尔有些评分不一致,但我们也会觉得比两个仅仅看了2部相同电影用户相似。
其次,根据公式可以发现,如果两个user重叠的评分只有一个item 这样,该公式定义是无法进行计算的,在稀疏数据集上面这个问题尤其凸显出来,当然如果两个用户重叠次数太少我们也基本可以认为两者相似性不高。
最后,根据公式可以明显发现,如果一个user评分序列中所有的评分都是一样的,这样导致该公式是未定义的。

2、 欧式距离定义相似度
这是最常用相似度,不做详细介绍。
3、 余弦相似性度量
简单贴下mahout中余弦公式实现

 public static double distance(double[] p1, double[] p2) {double dotProduct = 0.0;double lengthSquaredp1 = 0.0;double lengthSquaredp2 = 0.0;for (int i = 0; i < p1.length; i++) {lengthSquaredp1 += p1[i] * p1[i];lengthSquaredp2 += p2[i] * p2[i];dotProduct += p1[i] * p2[i];}double denominator = Math.sqrt(lengthSquaredp1) * Math.sqrt(lengthSquaredp2);// correct for floating-point rounding errorsif (denominator < dotProduct) {denominator = dotProduct;}// correct for zero-vector corner caseif (denominator == 0 && dotProduct == 0) {return 0;}return 1.0 - dotProduct / denominator;}

4、 斯皮尔曼相关系数
理论可以参考这个博客:http://blog.csdn.net/wsywl/article/details/5859751
下面是mahout中该参数实现主要部分

 @Overridepublic double userSimilarity(long userID1, long userID2) throws TasteException {PreferenceArray xPrefs = dataModel.getPreferencesFromUser(userID1);PreferenceArray yPrefs = dataModel.getPreferencesFromUser(userID2);int xLength = xPrefs.length();int yLength = yPrefs.length();if (xLength <= 1 || yLength <= 1) {return Double.NaN;}// Copy prefs since we need to modify pref values to ranksxPrefs = xPrefs.clone();yPrefs = yPrefs.clone();// First sort by values from low to highxPrefs.sortByValue();yPrefs.sortByValue();// Assign ranks from low to highfloat nextRank = 1.0f;for (int i = 0; i < xLength; i++) {// ... but only for items that are common to both pref arraysif (yPrefs.hasPrefWithItemID(xPrefs.getItemID(i))) {xPrefs.setValue(i, nextRank);nextRank += 1.0f;}// Other values are bogus but don't matter}nextRank = 1.0f;for (int i = 0; i < yLength; i++) {if (xPrefs.hasPrefWithItemID(yPrefs.getItemID(i))) {yPrefs.setValue(i, nextRank);nextRank += 1.0f;}}xPrefs.sortByItem();yPrefs.sortByItem();long xIndex = xPrefs.getItemID(0);long yIndex = yPrefs.getItemID(0);int xPrefIndex = 0;int yPrefIndex = 0;double sumXYRankDiff2 = 0.0;int count = 0;while (true) {int compare = xIndex < yIndex ? -1 : xIndex > yIndex ? 1 : 0;if (compare == 0) {double diff = xPrefs.getValue(xPrefIndex) - yPrefs.getValue(yPrefIndex);sumXYRankDiff2 += diff * diff;count++;}if (compare <= 0) {if (++xPrefIndex >= xLength) {break;}xIndex = xPrefs.getItemID(xPrefIndex);}if (compare >= 0) {if (++yPrefIndex >= yLength) {break;}yIndex = yPrefs.getItemID(yPrefIndex);}}if (count <= 1) {return Double.NaN;}// When ranks are unique, this formula actually gives the Pearson correlationreturn 1.0 - 6.0 * sumXYRankDiff2 / (count * (count * count - 1));}

转载于:https://www.cnblogs.com/huruzun/p/5423887.html

推荐系统中的相似性度量相关推荐

  1. 在推荐系统中衡量社交朋友兴趣相似度

    在推荐系统中衡量社交朋友兴趣相似度 摘要 由于过去几年在线社交网络服务的普及,社交推荐系统已成为一个新兴的研究课题.本文旨在为社会推荐问题的研究提供基础支持,对社交好友关系与用户兴趣相似之间的相关性进 ...

  2. 推荐系统中的前沿技术研究与落地:深度学习、AutoML与强化学习 | AI ProCon 2019...

    整理 | 夕颜 出品 | AI科技大本营(ID:rgznai100) 个性化推荐算法滥觞于互联网的急速发展,随着国内外互联网公司,如 Netflix 在电影领域,亚马逊.淘宝.京东等在电商领域,今日头 ...

  3. 从0到1详解推荐系统中的嵌入方法,原理、算法到应用都讲明白了

    (图片由AI科技大本营付费下载自视觉中国) 作者丨gongyouliu 编辑丨lily 来源 | 大数据与人工智能(ID:) 前言 作者曾在这篇文章中提到,矩阵分解算法是一类嵌入方法,通过将用户行为矩 ...

  4. Angel:深度学习在腾讯广告推荐系统中的实践

    分享嘉宾:郭跃超 腾讯 应用研究员 编辑整理:康德芬 出品平台:DataFunTalk 导读:Angel是腾讯自研的分布式高性能的机器学习平台,支持机器学习.深度学习.图计算以及联邦学习等场景.Ang ...

  5. 全新的深度模型在推荐系统中的应用

    文章作者:周浩 第四范式 研究员 编辑整理:汪方野 出品平台:第四范式天枢.DataFunTalk 导读:如今,在电子商务.物联网等领域,推荐系统扮演着越来越重要的地位.如何根据用户的历史行为和项目的 ...

  6. 深度学习在阿里B2B电商推荐系统中的实践

    作者:卡本,来自:DataFunTalk 导读:推荐导购场景在电商中是重要的满足用户"逛"和"买"的场景,本次分享我们聚焦深度学习在阿里B2B电商 ( 1688 ...

  7. 一文了解推荐系统中的图神经网络

    来源:RUC AI Box本文约4600字,建议阅读9分钟 本文主要介绍推荐系统中的图神经网络,欢迎交流探讨! [ 引言 ]近年来,GNN技术由于其在图数据学习方面的出色表现,在许多领域得到了广泛的应 ...

  8. 在推荐系统中,我还有隐私吗?联邦学习:你可以有

    2020-11-19 15:38:41 机器之心分析师网络 作者:仵冀颖 编辑:H4O 在推荐系统无所不在的网络环境中,用户越来越强烈地意识到自己的数据是需要保密的.因此,能够实现隐私保护的推荐系统的 ...

  9. 物品推荐系统中的挑战和解决方案

    2020-01-30 17:03:18 作者:datarevenue 编译:ronghuaiyang 导读 如何处理没有见过的数据,优化响应时间,并频繁更新模型. 如何处理不可见的数据,优化响应时间, ...

最新文章

  1. 无需任何标记数据,几张照片就能还原出3D物体结构,自监督学习还能这样用...
  2. P3639-[APIO2013]道路费用【最小生成树】
  3. 将Android源码集成到Eclipse中的方法
  4. php 获取指定时间 次日,PHP时间判断语句
  5. Why Redis 4.0?
  6. 机器是没有思想的,只会安装规定好的电路工作机器是没有思想的,只会安装规定好的电路工作
  7. 软件设计师25-操作系统
  8. 易语言写的一个去广告小软件
  9. Deep Learning for Content-Based Image Retrival:A Comprehensive Study 论文笔记
  10. 【saas公司案例】易快报与浦发云资金
  11. 几何分布的期望和方差公式推导_机器学习常用的方差、协方差与皮尔逊值
  12. Expandable实现方法
  13. 计算机网络——IPv4地址概述
  14. DPDK内存管理总结
  15. Knime基础数据案例(1)统计数据分组
  16. IDEA编译器Debug方法启动:method breakpoints may dramatically slow down debugging
  17. 近视眼学计算机好吗6,近视又不戴眼镜,还经常对着电脑会怎么样
  18. 合理运用计算机技术学校,浅议在学校管理中计算机技术合理应用
  19. Python——Day4(基础知识练习二)
  20. 未来计算机行业什么最吃香,未来哪些行业吃香 这四个行业前景比较好

热门文章

  1. python ssd目标检测_目标检测算法之SSD的数据增强策略
  2. idea 光标 快捷键_IntelliJ Idea 常用快捷键
  3. 计算机应用技术基础 形考4,最新电大《计算机应用技术基础》形考作业任务01-03网考试题及答案...
  4. 注册规划师 计算机科学与技术,关于公布2018年度注册城乡规划师考试合格人员名单的通知...
  5. 南邮ctf mysql_南邮ctf知识点汇总 - Crypto篇
  6. r语言中paste函数_R中的paste()函数-简要指南
  7. groupdel 删除组_如何在Linux中删除组– groupdel命令
  8. android 通知栏样式_Android通知样式
  9. C++基础:C++的路径表示有哪些
  10. 网络广告假流量盛行,查处有妙招