我是靠谱客的博主 舒心曲奇,最近开发中收集的这篇文章主要介绍推荐系统 --- 推荐算法 --- 混合推荐算法(二),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

概述

  • 描述
    • 把推荐选择具体物品,上升到选择策略。如果后台算法中有三种策略: 按照内容相似推荐,按照相似好友推荐,按照热⻔门推荐。每次选择⼀种策略,确定了策略后,再选择策略中的物品,这样两个步骤。

Bandit

  • 概述
    • 指的是一类算法,而不是一个算法
  • 基本思想
    • 看看选择会 带来多少遗憾,遗憾越少越好;
    • ⼩⼼翼翼地试,越确定某个选择好,就多选择它,越 确定某个选择差,就越来越少选择它。
  • 关键元素
    • 臂:每次推荐要选择候选池,可能是具体物品,也可能是推荐策略,也 可能是物品类别;
    • 回报:⽤户是否对推荐结果喜欢,喜欢了就是正⾯的回报,没有买账就 是负⾯回报或者零回报;
    • 环境:推荐系统⾯临的这个⽤户就是不可捉摸的环境。
  • 具体算法
    • 汤普森采样算法
      • Beta分布
      • 汤普森采样
        • 汤普森采样的背后原理正是上述所讲的Beta分布,你把贝塔分布的 a 参数看成是推荐后用户点击的次数,把分布的 b 参数看成是推荐后用户未点击的次数,则汤普森采样过程如下:
          • 取出每一个候选对应的参数 a 和 b;
          • 为每个候选用 a 和 b 作为参数,用贝塔分布产生一个随机数;
          • 按照随机数排序,输出最大值对应的候选;
          • 观察用户反馈,如果用户点击则将对应候选的 a 加 1,否则 b 加 1;
        • 汤普森采样为什么有效呢?
          • 如果一个候选被选中的次数很多,也就是 a+b 很大了,它的分布会很窄,换句话说这个候选的收益已经非常确定了,就是说不管分布中心接近0还是1都几乎比较确定了。用它产生随机数,基本上就在中心位置附近,接近平均收益。
          • 如果一个候选不但 a+b 很大,即分布很窄,而且 a/(a+b) 也很大,接近 1,那就确定这是个好的候选项,平均收益很好,每次选择很占优势,就进入利用阶段。反之则有可能平均分布比较接近与0,几乎再无出头之日。
          • 如果一个候选的 a+b 很小,分布很宽,也就是没有被选择太多次,说明这个候选是好是坏还不太确定,那么分布就是跳跃的,这次可能好,下次就可能坏,也就是还有机会存在,没有完全抛弃。那么用它产生随机数就有可能得到一个较大的随机数,在排序时被优先输出,这就起到了前面说的探索作用。
    • UCB 算法
      • 概述
        • UCB 算法全称是 Upper Confidence Bound,即置信区间上界。
        • 公式有两部分,加号前⾯是这个候选臂到⽬前的平均收益,反应了它的效果,后⾯的叫做 Bonus,本质上是均值的标准差,反应了候选臂效果的不确定性, 就是置信区间的上边界。
      • 这个评分公式也和汤普森采样是⼀样的思想:
        • 以每个候选的平均收益为基准线进⾏选择;
        • 对于被选择次数不⾜的给予照顾;
        • 选择倾向的是那些确定收益较好的候选。
      • 优化算法
        • LinUCB
          • 概述
            • 和传统 的 UCB 算法相⽐,最⼤的改进就是加⼊了特征信息,每次估算每个候选的置 信区间,不再仅仅是根据实验,⽽是根据特征信息来估算,这⼀点就⾮常的“机 器学习”了。
            • 在⼴告推荐领域,每⼀个选择的样本,由⽤户和物品⼀起构成,⽤户特征,物 品特征,其他上下⽂特征共同表示出这个选择,把这些特征⽤来估计这个选择 的预期收益和预期收益的置信区间,就是 LinUCB 要做的事情。
          • 分类
            • 简单版本其实就是让每⼀个候选臂之间完全互相⽆关,参数不共享。
            • ⾼级版本就是候选臂之间共享⼀部分参数。
      • 总结
        • LinUCB 只是⼀个推荐框架,可以将这个框架应⽤在很多地⽅,⽐如投放⼴告, 为⽤户选择兴趣标签,你还可以发挥聪明才智,看看它还能⽤来解决什么问题, 欢迎留⾔⼀起交流。
    • Epsilon 贪婪算法

COFIBA 算法

  • 特点
    • 结合协同过滤的群体智慧,与 Bandit 的⾛⼀步看⼀步⼀起,让两种思想碰 撞,也许可以让你的推荐系统与众不同。
  • 基本思想
    • 在时刻 t,有⼀个⽤户来访问推荐系统,推荐系统需要从已有的候选池 ⼦中挑⼀个最佳的物品推荐给他,然后观察他的反馈,⽤观察到的反馈来更新 挑选策略。
    • 这⾥的每个物品都有⼀个特征向量, 所以这⾥的 Bandit 算法是 context 相关的,只不过这⾥虽然是给每个⽤户维护⼀套参数,但实际上是由 ⽤户所在的聚类类簇⼀起决定结果的。
    • 这⾥依然是⽤岭回归去拟合⽤户的权重向量,⽤于预测⽤户对每个物品 的可能反馈(payoff),这⼀点和我们上⼀次介绍的 LinUCB 算法是⼀样的。
  • 对⽐上⼀次介绍的 LinUCB 算法,COFIBA 的不同有两个:
    • 基于⽤户聚类挑选最佳的物品,即相似⽤户集体动态决策;
    • 基于⽤户的反馈情况调整⽤户和物品的聚类结果。
  • 算法流程
    • ⽤协同过滤来少选可以参与决策的⽤户代表,⽤ LinUCB 算法来实际执 ⾏选择;
    • 根据⽤户的反馈,调整基于⽤户和基于物品的聚类结果,即对物品和⽤ 户的群体代表做换届选举;
    • 基于物品的聚类如果变化,⼜进⼀步改变了⽤户的聚类结果;
    • 不断根据⽤户实时动态的反馈来调整⽤户决策参数,从⽽重新划分聚类 结果矩阵。

深度学习

最后

以上就是舒心曲奇为你收集整理的推荐系统 --- 推荐算法 --- 混合推荐算法(二)的全部内容,希望文章能够帮你解决推荐系统 --- 推荐算法 --- 混合推荐算法(二)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部