机器学习进阶 第二节 第十课
概述
什么才是好的推荐系统? 这是推荐系统需要解决的首要问题. 一个完整的推荐系统一般存在 3 个参与方: 用户, 物品系统者和提供推荐系统的网站.
推荐系统的实验方法
在介绍推荐系统的指标之前, 首先看一下获取这些指标的主要实验方法. 主要有 3 种: 即离线实验, 用户调查和在线实验.
离线实验
离线试验的方法一般由如下几个步骤组成:
- 通过日志系统获取用户行为数据, 并按照一定格式生成一个标准的数据集
- 将数据集按照一定的规则分成训练集合测试集
- 在训练集上训练用户新区模型, 在测试集上进行预测
- 通过离线标准评测算法在测试集上的预测结果. 缺点是无法获取商业是的指标, 并且离线实验和商业指标上存在差距
用户调查
用户调查是需要一些真实的用户, 在推荐系统上完成一些任务. 根据他们的答案和行为了解系统的性能. 可以完成离线时没有办法评测的用户的主观感受, 因为高预测率不等于高用户满意度. 但是这种方式成本较高, 同时还要保证样本用户的可靠性.
在线试验
在完成离线实验和必要的用户调查后, 可以将推荐系统上线做 AB 测试, 将系统和旧的算法进行比较. AB 测试的优点是可以公平获得不同算法实际在线时的性能指标, 包括商业上关注的指标. AB 测试的缺点主要是周期比较长, 必须进行长期的实验才能得到可靠的结果. 因此一般不会用 AB 测试测试所有的算法, 而只是用它测试那些在离线试验和用户调查中表现很好的算法. 一般来说, 一个新的推荐算法最终上线, 需要完成上面所说的 3 个试验:
- 首先, 需要通过离线试验证明它在很多离线指标上优于现有的算法
- 然后, 需要用过用户调查确定它的用户满意度不低于现有的算法
- 最后, 通过在线的 AB 测试确定它在我们关心的指标上优于现有的算法
- 在线试验
评测指标
评测指标可以用于评价推荐系统各方面的性能.
用户满意度
用户作为推荐系统的重要参与者, 其满意度是评测的最重要指标. 但是, 用户满意度没有办法离线计算, 只能通过用户调查或者在线试验获得.
用户调查获得用户满意度主要是用过调查问卷的形式. 用户对推荐系统的满意度分为不同的层次.
GroupLens 曾经做过一个论文推荐系统的调查问卷. 该问卷的调查问题是请问下面哪句话最能描述你看到推荐结果后的感受?
- 推荐的论文都是我非常想看的
- 推荐的论文很多我都看过了, 确实是符合我兴趣的不错论文
- 推荐的论文和我的研究兴趣是相关的, 但我并不喜欢
- 不知道为什么会推荐这些论文, 它们和我的兴趣丝毫没有关系
由此可以看出, 这个调查问卷不是简单地询问用户对结果是否满意, 而是从不同的侧面询问用户对结果的不同感受. 比如, 如果仅仅问用户是否满意, 用户可能心里认为大体满意, 但是对某个方面还有点不满, 因而可能很难回答这个问题. 因此在设计问卷时需要考虑到用户各方面的感受, 这样用户才能针对问题给出自己准确的回答.
在系统中, 用户满意度主要通过一些对用户行为的统计得到. 比如在电子商务网站中, 用户如果购买了推荐的商品, 就表示他们在一定程度上满意. 因此, 我们可以利用购买率度量用户满意度. 此外, 有些网站会用过设计一些用户反馈界面收集用户满意度.
预测准确度
预测准确度度量一个推荐系统或者推荐算法预测用户行为的能力. 这个指标最重要的推荐系统离线评测指标, 从推荐系统诞生的那一天起, 几乎 99% 与推荐相关的论文都在讨论这个指标. 这主要是因为该指标可以通过离线试验计算, 方便了很多学术界的研究人员研究推荐算法.
一般我们的离线推荐算法有两个不同的方向, 一个是评分预测, 另一个是 TopN 推荐.
评分预测
很多提供推荐服务的网站都有一个让用户给物品打分的功能. 那么, 如果知道了用户对物品的历史评分, 就可以从中习得用户的兴趣模型, 并预测该用户在将来看到一个他没有过分的物品时, 会给这个物品评多少分. 预测用户对物品评分的行为称为预测.
评分预测的预测准确度一般用过均方根误差 (RMSE) 和平均绝对误差 (MAE) 计算.
ef RMSE(records):
return math.sqrt(sum([(rui-pui)*(rui-pui) for u,i,rui,pui in records])/float(len(records)))
def MAE(records):
return sum([abs(rui-pui) for u,i,rui,pui in records])/ float(len(records))
- 1
- 2
- 3
- 4
- 5
TopN 推荐
令 R(u) 是根据用户在训练集上的行为给用户做出的推荐列表, 而 T(u) 是用户在测试集上的行为列表. 那么. 推荐结果的召回率定义为:
def PrecisionRecall(test, N):
hit = 0
n_recall = 0
n_precision = 0
for user, items in test.items():
rank = Recommend(user, N)
hit += len(rank & items)
n_recall += len(items)
n_precision += N
return [hit / (1.0 * n_recall), hit / (1.0 * n_precision)]
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
关于评分预测和 TopN 推荐的讨论:
网站在提供服务时, 一般是给用户一个个性化的推荐列表, 这种推荐叫做 TopN 推荐. TopN 推荐的预测准确率一般通过准确率 (precision) / 召回率 (recall) 度量.
评分预测一直是推荐系统研究的热点, 绝大多数推荐系统的研究都是基于用户评分数据的评分预测. 这主要是因为, 一方面推荐系统早期研究组 GroupLens 的研究主要就是基于电影评分数据 MovieLens 进行的. 其次, Netflix 大赛也主要面向评分预测问题. 因而, 很多研究人员都将研究精力集中在优化评分预测的 RMSE 上. 对此, 亚马逊前科学家 Greg Linden 有不同的看法. 2009 年, 他在 Communications of the ACM 网站发表了一篇文章, 指出电影推荐的目的时找到用户最有可能感兴趣的电影, 而不是预测用户看了电影后会给电影什么样的评分. 因此, TopN 推荐更符合实际的应用需求. 也许有一部电影用户看了之后会给很高的分数, 但用户看的可能性非常小. 因此, 预测用户是否会看一部电影, 应该比预测用户看了电影后会给它什么评分更加重要.
文章来源: iamarookie.blog.csdn.net,作者:我是小白呀,版权归原作者所有,如需转载,请联系作者。
原文链接:iamarookie.blog.csdn.net/article/details/111355930
- 点赞
- 收藏
- 关注作者
评论(0)