推荐系统-算法入门

推荐系统虽然当前我在实践中还不需要用到,但作为数据算法工程师,是需要系统的了解清楚,并且知道如何去使用,它在电商、广告、新闻、小视频等平台上的应用十分广泛,如以推荐为特色的今日头条、抖音等、淘宝、京东等的商品推荐。要了解推荐系统我觉得大方向主要分为三步:是什么为什么怎么做

1. 推荐系统——是什么?

如果定义推荐系统,则有:

其中,C是全体用户集合,S为全部商品/推荐内容集合,u是评判把推荐的好坏评判函数,推荐是对于,找到,使得u最大。

通俗来讲,推荐系统就是根据用户的历史行为、社交关系、兴趣点、所处上下文环境等信息去判断用户的当前需求/感兴趣的item

这里特别说明一下“社交关系”。有好多的app都有QQ/微信/微博登录,相比于注册账号,这种方式简单易记住账号。登录之后,app就可以获取好友关系,把好友感兴趣的内容推荐给你。这样,在没有“历史行为”的情况下也可以进行有效的推荐。

2. 推荐系统——为什么?

从用户的角度:在互联网信息大爆炸的时代,每天有听不完看不完的讯息,每个人关注的内容都不一样,怎样让每个人都能迅速get到内心所爱呢?对推荐系统有了很大的需求。有了推荐系统,用户不用再信息的海洋苦苦搜索,偶尔可能还有surprise(猜你喜欢),增强了用户体验。总结一下就是:找到喜欢的、帮助决策、发现新事物。

从商家的角度:通过推荐系统可以提供个性化服务,提高用户信任度和粘性。当然,还可以增加营收。比如Google news推荐系统能带来额外38%的点击;亚马逊每年35%的销售额都来源于它的推荐;今日头条半数以上新闻和广告点击来源于推荐。

3. 推荐系统——怎么做?

对存在的用户如何推荐;新用户怎么处理;如何寻找相似的产品等等

3.1系统结构

先看这张图:

分为offline和online两部分。offline做数据数理和模型学习,得到模型,online做推荐判定推出结果,对准确度和时间要求比较高。

3.2. 评定标准

假定我们已经有了一个推荐系统,那么需要评估后才能上线。如何评估呢?
  1)准确度:评定方法有打分系统、Top N推荐。
  打分系统:例如豆瓣电影的电影评分,淘宝的商品打分等。设为用户u对物品i的实际评分,为预测分。|T|是测试的样本集,用RMSE和MAE来评判两者之间的差异性。
   ,    

   Top N推荐:用准确率和召回率评定用户对推荐的喜欢程度。当然喜欢的程度不同可以再具体打分,就比如淘宝推荐商品时,用户点击、停留时间、购买等行为代表的喜欢程度不同。设R(u)为根据训练建立的模型在测试集上的推荐,T(u)为测试集上用户的选择。准确率和召回率分别为:
  ,   

  准确度表示:我们推荐的商品中用户感兴趣的比例。
  召回率表示:用户感兴趣的商品中被我们推荐到的商品的比例。
  2) 覆盖率:推荐系统希望消除马太效应,表示对物品长尾的发掘能力。I是商品全集。
  ,     

  Coverage是覆盖率简单的定义,已推荐商品的种类的集合占需要推荐商品集合的比例。但是这个不全面,不能排除这种情况“把冷门的商品推给某个用户,他恰好喜欢”。所以从信息熵的角度定义了另一个公式H,p(i)是推荐商品i的概率,当每个商品推出去的次数相当时H最大,能更有效的判定覆盖率。
  3) 多样性:表示推荐列表中物品两两之间的不相似性。意义在于我们希望推荐的商品中两两之间都不相似,用户的选择会比较多。避免某天给用户推荐了10次衬衫。 设s(i,j)表示物品i和j之间的相似度。  

,      

  R(u)是推荐商品集合个数,分母其实就是。|U|是user个数,Diversity是统计对每个用户推荐的多样性的平均。
  4)还有更多的评定方向,比较难以评定,需要进一步研究的,比如 新颖度(推荐他们不知道的商品)、 惊喜度(推荐和用户历史兴趣不相似, 却满意的)、 信任度(提供可靠的推荐理由,亚马逊在做)、 实时性(实时更新程度)等。

3.3. 推荐算法

(1)基于内容推荐

通常使用在文本相关产品上进行推荐,基于用户喜欢的item的属性/内容进行推荐,无需考虑其他用户的行为。Item之间通过内容(比如关键词)关联,比如电影题材可以有“ 爱情/探险/动作/喜剧/悬疑”等,推荐时基于item的内容来进行。
  过程:
  1)对于每个要推荐的内容, 我们需要建立一份资料:比如词 在文件 中的权重 ,常用的方法有TF-IDF。
  2)对用户也建立一份资料:比如说定义一个权重向量,其中表示第 个词对用户c的重要度。
  3)计算匹配度:有很多方法,比如计算余弦距离。
  

基于内容的推荐优点是不需要考虑用户行为,缺点是仅对于文本数据的操作,而且需要对每个内容都做处理,比较耗时耗力。

(2)协同过滤

a. 基于物品的协同过滤Item-based CF

思想:根据用户对商品/内容的行为,计算item和item相似度, 找到和当前item最近的进行推荐。
  过程
  1)一个用户序列  ,一个item序列 
  2)一个n×m的矩阵v,每个元素 表示用户i对j的打分
  3)计算item和item之间的相似度/距离
  4)选取Top K推荐或者加权预测得分

b. 基于用户的协同过滤User-based CF

思想:找到和用户最接近的其他用户,找到他们看/买过但当前用户没看/买过的item, 根据距离加权打分找得分最高的推荐。比如:有一个新用户,他想要看电影,我们没有他的历史信息可以参考,就找他朋友的观影历史信息及评价,通过打分推荐电影给新用户。
  过程
  1)一个用户序列  ,一个item序列 
  2)一个n×m的矩阵v,每个元素表示用户i对j的打分
  3)计算用户之间的相似度/距离
  4)预测得分

c. 两种CF对比

绝大多数情况下,会选择Item-based CF,因为一般情况下,物品种类比用户数少。再者Item-based CF稳定性较好,因为人的喜好是会变的。
  

d. CF优缺点

       协同过滤优点
  1)基于用户行为, 因此对推荐内容无需先验知识;例如不需要挖掘电影的内容,关键词等信息。
  2)只需要用户和商品关联矩阵即可,结构简单;
  3)在用户行为丰富的情况下,效果好;数据丰富的情况下CF的准确度比其他算法高。
  协同过滤缺点
  1)需要大量的显性/隐性用户行为;显性就是打分等,隐性就是点击、停留等表现。
  2)需要通过完全相同的商品关联,相似的不行;
  3)假定用户的兴趣完全取决于之前的行为,而和当前上下文环境无关;
  4)在数据稀疏的情况下受影响,可以考虑二度关联。

e. 冷启动问题

冷启动就是没有历史信息的情况下来推荐,什么是正常的打开方式呢?这里给出一些解决方法。
  a. 对于新用户
  1)所有推荐系统对于新用户都有这个问题
  2)在用户注册的时候收集一些信息

3)推荐非常热门的商品,收集一些信息

4)向新用户推荐具有最佳综合评级的商品
  5)在用户注册完之后,用一些互动游戏等确定喜欢与不喜欢
  b. 对于新商品
  1)根据本身的属性,求与原来商品的相似度
  2)Item-based协同过滤可以推荐出去

(3) 隐语义模型LFM(latent factor model)

自从Netflix Prize比赛举办以来, LFM(latent factor model)隐语义模型逐渐成为推荐系统领域耳熟能详的名词。其实该算法最早在文本挖掘领域被提出,用于找到文本的隐含语义。
  上一节的例子中,我们有一个用户评分矩阵, 但是有一些位置是空着的(没打分),需要做的事情是, 尽量填满未打分的项(预测得分)。怎么填呢?我们猜测有一些隐藏的因素,影响用户的打分,比如电影的演员、题材、年代等。那么,我们就希望找到一些隐藏因子,可以把user和item关联起来。

这个图表示user和电影的关系,有的位置打分为0,我们假设用户根据f1、f2、f3三个隐含特征进行的打分,同时得到电影的这些特征。这两个矩阵有如下关系:
  
  这里就需要矩阵分解,可以直接矩阵分解或者SVD,接下来会细讲。
  CF简单直接可解释性强, 但隐语义模型能更好地挖掘用户和item关联中的隐藏因子。

(4) 矩阵分解

假定有U个用户,D个item,R为打分矩阵;假定有K个隐含变量, 我们需要找到矩阵P(U*K)和Q(D*K),然后R=P*Q,希望得到的R能填上原始矩阵为0的位置。如何才能找到最佳的P和Q呢?
  步骤一:梯度下降;
  定义损失函数:
  
  求解梯度:
  
  迭代更新:
  
  步骤二:正则化
  
  步骤三:再次求梯度/偏导, 更新迭代公式。
  
  步骤四:再还原回矩阵乘积, 即可补充未打分项。
  通常情况下, 我们会限定分解得到的P和Q中的元素都非负,这样得到的结果是一定程度上可解释的。因为不存在减法操作,因此可以看做对隐变量特征的线性加权拟合。

3.3 隐语义模型的进一步优化

  每一个用户会有自己的偏好,比如某个用户最低就给3分,有个用户最高就给2分。我们引入三个参数:
    - μ:全局均值
    - :用户x带来的影响
    - :电影i带来的影响
  加上bias的隐语义模型可表示为:  

那么,需要最小化的就是:
   
  之后再用梯度下降求解。

 

 

 

参考网址:

https://blog.csdn.net/joycewyj/article/details/51692976

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Trisyp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值