前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >每周学点大数据 | No.59协同过滤模型(下)

每周学点大数据 | No.59协同过滤模型(下)

作者头像
灯塔大数据
发布2018-04-04 12:06:38
7220
发布2018-04-04 12:06:38
举报
文章被收录于专栏:灯塔大数据

NO.58

协同过滤模型(下)

Mr. 王:是的,前面的那种加权平均的形式,我们是可以直接利用的,其中的量稍作修改即可:

此时式中,Sij 表示的是i 和j 两种项目的相似度。j 就是来自x 评价过的与i 最相近的项目。rxi 是i 的效用矩阵。我们来看一个例子。有一个电影网站,近期比较热门的6 部电影分别对应表格的6 行,12个进行过评价的用户就对应表格的12 列。在这个例子中,评分的范围是1 ~ 5。表格中黄色部分是已经进行过评分的数据域,白色部分是没有进行过评分的数据域。

比如我们现在要对用户5 对电影1 的评分进行一个预测估计,也就是图中的红色部分。

现在我们总结一下协同过滤的优缺点。它的第一个优势就是适用于任何形式的项目,它完全不依赖项目的内容,不需要进行特征选择,直接通过用户的评分来进行衡量。不过它也存在非常明显的冷启动问题,协同过滤需要系统中有足够的用户进行匹配,无法推荐一个没有被评价过的项目,比如新项目和隐秘项目。我们得到的评分效用矩阵往往也是非常稀疏的,大量的用户都没有评价过相同的项目,这直接导致了我们很难去发现评价过相同项目的用户。另外,协同过滤无法给只有单一口味的用户推荐项目,它推荐的内容会比较分散,不像是基于内容的推荐那么集中,倾向于推荐流行项目。我们发现,基于内容的推荐和协同过滤都各有优缺点,而且它们的优势和缺陷是互补的,我们可以尝试去实现两种或多种不同的推荐方法相结合的方式,并组合预测结果。比如可以结合基于内容的推荐方法与协同过滤,将我们研究过的两种方法进行组合,充分发挥它们的优势,避免它们的劣势。

小可:嗯,这两种方法如果单独使用确实显得极端了一点,一种只考虑了项目本身的特征;另一种只考虑了他人的评价,如果把它们结合起来确实更能发挥二者的优势,给出更加准确的推荐结果。

Mr. 王:别忘了,我们设计任何一种算法或者方法时,都要对其进行评价。这也是非常重要的。在不同的场合下,不同的方法给出的推荐准确程度是不一样的,我们依然要建立一种评价机制,对推荐模型的好坏进行评估。第一个要考虑的就是准确度。对系统性能评价最重要的一部分就是推荐的内容是不是准确、恰当。

小可:想要推荐的结果足够准确,从前面两种方法来看,就需要我们的评分足够准确。评分的准确是推荐准确的基础。

Mr. 王:没错,对于这种基于评分的推荐模式,我们对项目的评分估计的准确程度还是非常重要的。常用的评分评价方法就是对比预测值与已知的评分。我们可以让评分预测模型去预测一些已知分数的值,然后用一些常用的数学误差评价机制,比如方均根误差、TOP 10 精度以及秩相关等方法对其进行评价。另外,从预测的结果来看,我们还要从信息检索的角度对其进行评价,比如覆盖度,也就是系统能够预测的item/user 数量,还可以让用户进行精确度评价,看看用户对系统的推荐是不是足够满意。另外,从受试者工作特征的角度,我们还可以对虚报率与漏报率进行测量。虚报就是那些被推荐而用户并不喜欢的项目,漏报就是那些用户本身会喜欢,却没推荐的项目。这两者的均衡曲线是可以用来衡量推荐系统效果的。

小可:均衡曲线?这说明它们往往不能同时被降低吧。

Mr. 王:一般来说是这样的,如果降低虚报率,往往就要尝试返回比较少的结果,这样会导致增大漏报率;如果降低漏报率,往往就要多返回一些结果,这就会导致虚报率增大。这两者往往需要进行平衡,很难同时达到最优。另外,虽然我们需要去关注精度,但是有时狭隘地关注精度没有意义,推荐系统运用的环境往往是多样而复杂的,可能在我们的测试数据环境下表现得很好的推荐系统,在实际应用中效果就差了很多,即使在不同的情境下,不同的心情和不同的时间用户的喜好都有可能产生不

同的变化。即使再好的模型,也会受制于很多很复杂的数据因素和人为因素,所以精度很多时候可以作为实验时的一个参考,不能太过迷信精度的作用。

小可:我想除了结果的好坏,得出结果的速度也是要考虑的吧。

Mr. 王:是的,我们要进行推荐的数据集合往往是非常复杂而庞大的。就以协同过滤为例,我们要操作的数据集合是一个非常庞大的矩阵,这是非常费时而困难的。其中最费时的步骤是找到k 个最相似的用户,这一步骤的时间复杂度为O(|X|)。在实际的推荐系统中,我们不能实时完成这个工作,如果等用户需要推荐了才开始考虑的话,那么是很难在用户可以接受的时间范围内完成的,反映在用户那里就是延迟非常大。为了避免这种情况的发生,我们可以进行预先计算。从以往的预先计算来看,朴素预先计算的时间复杂度为O(N·|C|)。除了预先计算之外,对于如此之大的数据规模,我们也要尝试使用一些大数据处理方法,比如高维数据中的最近邻居搜索(LSH)、聚类、降维等思想,来简化和降低实际操作的数据量,以达到提升系统性能的效果。

Mr. 王:前面我们介绍了几种比较经典的推荐系统的策略,而目前在实际使用的各种推荐系统中,在推荐过程中考虑的因素还是非常多的。历史上曾经举办过一个推荐系统大赛,叫作Netflix Prize。进行比赛的环境就是我们的协同过滤模型处理的那种环境,现有一些观影者对一些电影评分的矩阵,参赛者要用自己的模型进行处理,去预测矩阵中的缺失值。当年这场比赛的训练集包括100 000 000 次评分、480 000 个观影用户和17 770 部电影,横贯从2000 年到2005 年。要求是通过评估填充整个矩阵中缺失的280 000 000 个评价。

小可:真是好大的数据集合,处理起这些数据来一定很困难。但当时的比赛用什么标准来衡量各支队伍的结果好坏呢?

Mr. 王:比赛采用了经典的均方根误差RMSE。Netflix 自己的推荐引擎Netflix RMSE 最终得出的结果为0.9514。在当年参与比赛的超过2700 支的队伍中,Netflix 给那些能在Cinematch引擎的结果上增强10% 的队伍100 万美元的奖金。将这种问题变成一种模型,就是这样:在这个图中,黄色区域是训练集,其中包括用户对电影评分的已知数据;蓝色区域是测试集,其对于参赛者来说是未知的。比赛的评价规则非常简单,就是看看他们和实际值的误

差如何。

小可:那么最后比赛的获胜者是怎么做的呢?

Mr. 王:Netflix Prize 大赛的获胜者是BellKor 推荐系统。它就利用了我们今天要讨论的潜在因素模型,对数据进行了多尺度建模。它不仅考虑了我们前面讨论的全局特征,还研究了用户/ 电影的总体偏差、区域特征、局域特征,在这些特征的影响之下,基于协同过滤模型进行评分估计,最终获得冠军。

先从全局角度看,求出所有电影的平均评分为3.7,而The Six Sense 的评分比平均分高出0.5。而Joe 这个用户对电影的评分比均值低0.2,那么我们认为他对The Six Senses 的基础评分为4.0。

小可:嗯,这种以均值偏差来估计的思想有点类似于前面的中心化方法。

Mr. 王:从局域的角度我们发现,Joe 不喜欢和The Six Senses 相似的一部电影Signs,通过这一信息,我们要适当将其评分调低一些,降低0.2。最终估计为Joe 对The Sixth Sense 的评分是3.8 星。

Mr. 王:以上我们举了一个实际推荐系统的例子。关于推荐系统的相关文献还是有很多的,如果有兴趣的话,可以去查阅相关的资料,研究各大网站上使用的推荐系统的算法和策略。

下期精彩预告

经过学习,我们了解了一下了解了协同过滤模型涉及到的一些具体问题。在下一期中,我们将进一步研究磁盘算法实践。更多精彩内容,敬请关注灯塔大数据,每周五不见不散呦!

文章作者:王宏志

文章编辑:秦革

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-10-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 灯塔大数据 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
大数据
全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档