什么是推荐系统?

推荐系统(recommender system; recommendation system)可以预测一个用户(user)对于一个项目(item)的评分(rating)或偏好(preference)。

推荐系统近年来获得了业界的广泛应用,并帮助用户更高效地匹配项目。推荐系统应用在以下场景中:

  • 媒体推荐,如推荐符合用户喜好的电影、音乐、新闻、书籍
  • 产品推荐,如线上购物推荐预测评分高的宝贝、二手车网站推荐二手车
  • 搜索引擎个性化结果
  • 社交网络,如推荐约会对象

推荐系统的算法有两类:协同过滤(collaborative filtering)和基于内容的过滤(content-based filtering)。其中协同过滤算法根据用户过去的行为或评分,结合其它用户过去类似的行为或评分,用来预测该用户对新项目的评分。基于内容的过滤算法利用项目的属性元数据(metadata),如项目名字、文字说明、用户评价、项目照片等,寻找相似的其它项目。两者往往结合起来使用。

我们使用一个评分矩阵R来表示用户对项目的评分数据,其中R的每行代表一个用户,每列代表一个项目,矩阵的元素为缺失值或用户对该项目的评分。推荐算法的目标是填补该剧真的缺失值。

下表为一个评分矩阵的例子:

获得评分数据的方式分为显式(explicit data collection)和隐式(implicit data collection)。

其中显式数据收集意味着数据是直接由用户提供的,例如:

  • 要求用户对一个项目进行评分
  • 要求用户从一些项目中选择最喜爱的或按照喜好程度排序
  • 要求用户手动创建一个喜欢项目的名单

隐式数据收集意味着数据跟用户行为有关,但不是直接由用户提供,而是通过用户行为推测(infer)得来的,例如:

  • 用户浏览的项目结合查看时间(viewing time)
  • 用户历史购物记录
  • 用户过去听的音乐、看的视频
  • 用户的社交圈的信息

对于推荐系统算法的评估(evaluation),可以使用均方根误差(root mean squared error),即将一部分数据隐藏作为测试数据,对这些测试数据进行预测,并计算预测值

与真实评分r的误差的平方和,取平均并开根号:

协同过滤(collaborative filtering)介绍

协同过滤只使用评分矩阵R中的评分数据,而不使用用户或项目本身的信息。其核心假设是过去喜好类似的用户未来的喜好也一致;用户在未来仍喜欢与以往喜欢的项目所类似的新项目。

协同过滤的优点是不需要用户或项目本身的信息,因此对于如电影、音乐等复杂项目,协同过滤算法不需要处理这些复杂的数据就能够根据过往的评分数据进行预测。

协同过滤的缺点有:

  • 冷启动(cold start):协同过滤系统基于其它用户过去的评分和该用户对于其它项目过去的评分,因此需要大量起始数据才能开始预测。
  • 可延展性(scalability):很多场景下,用户和产品数都非常大,因此需要大量的计算资源和并行计算能力。
  • 稀疏性(sparsity):一般来说,项目的个数非常多,因此整个数据的大部分评分是缺失的。

协同过滤的算法主要有基于用户(user-based)、基于项目(item-based)、基于模型(model-based)、混合方法(hybrid)。

user-based collaborative filtering算法

基于用户的协同过滤有两个步骤:

  1. 寻找与当前用户喜好相似的其它用户
  2. 根据这些用户对当前项目的评分来预测当前用户对当前项目的评分

对于一个用户,该用户与其它用户的相似度(similarity)打分函数有诸多选择,最常见的有皮尔森相关系数(Pearson correlation similarity)和余弦相似度(cosine similarity)。对于用户u和项目i,我们选择对项目i进行评分的用户中与u的相似度最高的K个

,并且通过这K个用户对项目i的评分
和与u的相似度
累计得到关于用户u对项目i的评分预测。

皮尔森相关系数打分函数定义在两个用户

上,假设用户u对所有已评分项目的平均评分为
皮尔森相关系数打分为两个用户在同时评分的项目集合I上的评分分别减去各自的平均评分,并计算相关系数:

余弦相似度为两个用户在共同评分的项目II上的评分对应向量的夹角余弦值:

累计预测同样有不同的方法,以下为一些常见的方法:

  • 使用K个用户评分的平均值

  • 使用K个用户评分的关于相似度的加权平均值
  • 使用K个用户评分的关于相似度的加权平均值,但是将每个用户的评分
    减去自身的平均项目评分
    得到
    以减少偏差(bias)

item-based collaborative filtering算法

基于项目的协同过滤与基于用户的协同过滤完全对称,只需要把用户和项目的角色互换,套用基于用户的协同过滤算法即可。实际数据中,基于项目的协同过滤结果往往好于基于用户的协同过滤结果,一种可能的原因是用户相对于项目更加多元化,因此与一个用户在过往项目上匹配的用户未必会在一个新的项目上匹配;而项目相对来说类型更单一,因此一个用户对于类似项目的喜好程度应当接近。

对于只是对一个用户推荐最可能感兴趣的K个项目的应用问题,还可以首先寻找与该用户相似度最高的若干个其它用户,然后对于其它用户喜爱的项目进行关联规则分析并基于其结果为该用户进行推荐。

model-based collaborative filtering算法

基于用户和基于项目的协同过滤统称为基于记忆的协同过滤(memory-based collaborative filtering)在数据比较稀疏时效果较差,此时可以使用基于模型的协同过滤算法。基于模型的协同过滤算法使用机器学习算法对未评分的用户项目对进行预测,常见的方法有贝叶斯网络(Bayesian networks)、聚类(clustering)、隐性语义分析(latent semantic analysis)、马尔可夫决策过程(Markov decision process)。

基于模型的协同过滤算法的另一个好处是无需将大量数据放入内存读取,而只需要一小部分数据就可以进行预测。

例子

对于上文给出的评分数据,我们使用基于用户协同过滤、基于项目协同过滤、基于模型协同过滤分别进行预测。

基于用户协同过滤

我们使用皮尔森相关系数、相似度的加权平均值(按照平均项目评分调整)作为累计预测、选K=2,可以对4个缺失的评分进行如下预测:

1. 首先将每个用户减去自己的平均评分得到矩阵为

2. 对于每两个用户计算评分公共部分的相关系数,如Leo和Jessica同时观看过"狮子王"和"无人生还",相关系数为

3. 利用以上信息可以预测缺失评分,以Leo和"寻梦环游记"为例,看过寻梦环游记的用户只有Jessica和Shango,两者减去自身平均评分后的评分分别为1.66和1,与Leo的相似度分别为-1和0.9805,因此Leo对"寻梦环游记"评分减去自身平均3.66的预测为

Leo对"寻梦环游记"评分的预测为

类似也可以得到其它缺失评分的预测,以红色字体显示:

部分Python代码:

import numpy as np# 用户数量
n_user = 4
# 项目数量
n_item = 4
# K
K = 2# (用户, 项目, 评分)的数据
data = [(0, 0, 5), (0, 1, 2), (0, 3, 4), (1, 0, 2), (1, 2, 5), (1, 3, 3), (2, 1, 2), (2, 2, 4), (2, 3, 3), (3, 0, 5), (3, 1, 1), (3, 3, 3)]# 评分矩阵, rating[u][i]表示用户u对项目i的评分
rating = dict()
for u, i, r in data:if u not in rating:rating[u] = {i: r}else:rating[u][i] = r# 将每个用户减去平均分
avg_rating = dict()
adjusted_rating = dict()

限于本文篇幅,剩余的例子以及Python代码可以参考LionKing数据科学专栏官网的推荐系统介绍。

LionKing数据科学专栏​www.dscademy.com

更多面试真题见http://www.dscademy.com/problems.php?from=zhihurecommender

欢迎大家关注我们为数据科学家的job seeker准备的网站http://www.dscademy.com我们团队的微信公众号WechatID: dscademy

这里有全面的数据科学知识点总结、面试技巧和论坛。欢迎转载本文,并向身边的小伙伴推广我们的网站。本网站专业的数据科学家团队还提供简历修改、模拟面试、1对1辅导等收费服务。相信能在大家找工作的道路上给予不小的帮助。

打分系统php_亚马逊的推荐系统是怎么实现的?相关推荐

  1. Windows系统连接亚马逊Ubuntu云服务器

    Windows系统连接亚马逊Ubuntu云服务器 本文参考链接: https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/putty.htm ...

  2. 使用elasticsearch文件搜索系统助力亚马逊解决方案架构师认证考试

    当真没想到随手写的一个文章 使用elasticsearch搭建文件搜索系统(带界面),居然会有这么多的点赞.哈哈,应该是贫穷限制了我的想象力,感谢30多位同学的赞.总之趁热打铁,围绕这个话题,趁我还有 ...

  3. 亚马逊服务器怎么做系统,使用亚马逊云服务器EC2做深度学习(四)配置好的系统镜像...

    这是<使用亚马逊云服务器EC2做深度学习>系列的第四篇文章. 配置深度学习的环境是一个非常繁琐的过程.它要求你对Linux命令有一定地了解,与此同时各种深度学习库.驱动更新十分频繁,有可能 ...

  4. python电子病历交接班系统_亚马逊电子病历上的Pydoop

    我终于成功了.所有事情都发生在主节点上-作为用户hadoop,ssh到该节点 你需要一些包裹:sudo easy_install argparse importlib sudo apt-get upd ...

  5. 回顾亚马逊推荐系统20年发展

    回顾亚马逊推荐系统20年发展 推荐系统 亚马逊 阅读2164  近期,IEEE Internet Computing上发表了一篇名为<亚马逊推荐系统二十年>的文章,提纲挈领地回顾了亚马逊推 ...

  6. 亚马逊给警察局装备了人脸识别系统就万事大吉了?没那么容易

    如今,人脸识别技术被广泛应用于智能手机领域,但人脸识别技术还未真正成熟.近期,亚马逊想要在执法领域推行AI人脸识别技术,但却遭到了多方质疑与反对.<华盛顿邮报>对"俄勒冈州成为亚 ...

  7. 亚马逊在德国新设AI研发中心,与马克思普朗克系统研究所亲密合作

    李杉 编译自 TechCrunch 量子位 出品 | 公众号 QbitAI 亚马逊宣布在德国开设一个新的研发中心,重点通过人工智能技术来改进用户体验--尤其是在视觉系统中的体验. 亚马逊宣布,这个研发 ...

  8. 亚马逊erp系统详细介绍,新手第一步

    亚马逊无货源操作过程比较简单,需要采集商品链接复制到亚马逊ERP系统上面,然后对商品信息进行修改,避免侵权违规,商品制作完成后,选择一键刊登就可以上传到亚马逊店铺了.原创作者:LAU768 大致流程1 ...

  9. 亚马逊erp系统亚马逊FBA系统货代仓储打包系统

    电商现在比较火的也就是跨境电商与国内电商这两个比较火,跨境的平台相对应多一点,目前来说比较好的亚马逊与亚马逊是最多了,国内的话现在都在往抖店这块集中,那么大家在做这块的时候,肯定都会用到店铺管理系统, ...

最新文章

  1. 【YOLOV4】(7) 特征提取网络代码复现(CSPDarknet53+SPP+PANet+Head),附Tensorflow完整代码
  2. java中那些类是线程安全的?
  3. linux 中用PPA安装软件
  4. ios 裁剪圆形头像_IOS_iOS如何裁剪圆形头像,本文实例为大家介绍了iOS裁剪 - phpStudy...
  5. CryptoQuant CEO:OKEx暂停提款对比特币价格影响不大
  6. LeetCode60:Permutation Sequence
  7. 【Django 2021年最新版教程9】数据库查询操作
  8. 无法启动IE调试vs2008的一个解决办法
  9. 基于Java+SpringBoot+mybatis+vue+element实现旅游管理系统
  10. chm 文件的阅读、制作和反编译
  11. bmp180气压传感器工作原理_40张动图看懂各种传感器工作原理
  12. 勇士主场为什么叫oracle,再见甲骨文,十年过去了,金州勇士除了复刻经典,还要再造传奇!...
  13. 史上最全第三代半导体产业发展介绍(附世界各国研究概况解析)
  14. Linux战地日记—date命令详细示例
  15. 大学计算机应用技术基础vb考试,计算机vb考试试题精选
  16. java期末复习题-110道选择题
  17. Android微信智能心跳方案 (转)
  18. 计算机软件类自然科学基金标书,国家自然科学基金标书范例.pdf
  19. 大数据_MySQL之DQL(数据查询语言)
  20. 嘀嗒出行4年未获新融资,市场、法规双压下亟待上市自救

热门文章

  1. win10 连接android,win10系统连接安卓手机usb没反应的解决方法
  2. 皮一皮:他为我承受了太多太多...
  3. StackOverflow热帖:Java整数相加溢出怎么办?
  4. 每日一皮:强大的sudo ...
  5. Spring Cloud Stream如何消费自己生产的消息?
  6. 中国式微服务技术栈2.0
  7. Spring Cloud Gateway真的有那么差吗?
  8. 115网盘如何打开php文件格式,115网盘下载:因纽特语教材(初级+高级+音频)
  9. 提高安全意识,保护自身安全
  10. TensorRT C++ 批量推理笔记