zoukankan      html  css  js  c++  java
  • 推荐系统初探

    推荐系统初探

    首先推荐系统是什么?
    推荐系统简单来说就是找出用户当前最感兴趣/想购买的物品/服务。那么如何来找呢?可以根据用户历史行为、社交关系、用户兴趣点、当前上下文环境等方面来进行。
    为什么要有推荐系统?
    基本上稍微大一点的公司都会有自己的推荐系统,电商推荐用户需要的商品,视频和音乐网站推荐给用户感兴趣的商品,还有像头条这种,如何给用户推送及时的、个性化的、真正感兴趣的新闻消息几乎是头条的核心竞争力了。反正只要是信息/商品的量很多,那么就需要推荐系统来帮助用户进行筛选,展示给用户他们最想要的东西。归根到底,推荐系统为商家增加营收,增加用户粘度;为用户发现新的有趣的东西,帮助用户决策。总结一句话:商家用户都需要推荐系统。

    推荐的评价标准

    1. 计算预测打分和实际评分的RMSE(均方根误差),MAE(平均绝对值误差)。
    2. 对评分进行top-K选择然后计算预测集合的准确率和召回率。
    3. 覆盖率(推荐热门商品的同时尽量覆盖到冷门商品)
    4. 多样性(考虑推荐差异不同种类的商品的差异性)
      当然在不同的推荐场景中,还会考虑到新颖度、信任度、惊喜度、实时性等不同要求。

    经典推荐算法

    基于内容的推荐:

    • 直接针对已知的用户感兴趣内容进行推荐,不需要关心其他用户的行为。
    • 需要计算和已知内容相似度。
    • 需要对推荐的东西进行建模
    • 通常用在文本相关领域。

    协同过滤:
    根据user-item评分矩阵,根据矩阵中已有的一些评分来估计未知的评分。协同过滤分为基于item和基于user的。
    基于item的是先在找一些和当前item最相似的item,然后用当前用户已打分的item评分加权平均作为当前用户当前item的评分。例如:

    和movies1最相似的是movies3和movies6,于是计算(v_{1,6})的评分为:(v_{1,6}=frac{2 imes 0.41+3 imes 0.59}{0.41+0.59}=2.59)
    基于user的是先找到和你兴趣相似的其他用户,然后向你推荐其他用户感兴趣的item。
    两种协同过滤的对比:

    协同过滤的优点:

    • 只需要user-item矩阵,不需要对item进行建模
    • 当用户行为丰富时(矩阵不稀疏),效果较好

    协同过滤缺点:

    • 只取决于历史行为,与当前上下文无关。
    • 需要大量的用户行为。
    • 矩阵稀疏时效果不好。(此时可以考虑二度关联对矩阵进行填充)

    隐语义模型
    隐语义模型最早应用在文本中,是为了解决文本数据特征维度高,但样本稀疏的问题的。同样隐语义模型也可以使用在推荐系统中。
    直接将user-item矩阵进行矩阵分解(widehat{R}=P imes Q^T),R中的每一个值(widehat{r_{ij}}=p_{i}q_{j}^T=sum_{k=1}^{K}p_{ik}q_{kj})
    为了求解(P,Q),损失函数(e_{ij}=(r_{ij}-widehat{r_{ij}})^2=(r_{ij}-sum_{k=1}^{K}p_{ik}q_{kj})^2)。当然还需要加上正则项控制模型的复杂度,排除掉user和item的bias。于是需要优化的损失函数为:$$C=sum_{i,j}(r_{ij}-(mu+b_{i}+b_{j}+p_{i}q_{j}T))2+lambda_1sum_i{||b_i||2}+lambda_2sum_j{||b_j||2}+lambda_3sum_i{||p_i||2}+lambda_4sum_j{||q_j||2}$$
    然后使用梯度下降,求偏导,写出迭代更新公式,求出(P,Q)

    FM(Factorization Machine)
    FM和隐语义模型的做法差不多,都是矩阵分解,但是FM主要用在特征组合问题,由于经过One-Hot编码后的特征维度很高,用FM使用隐变量来降低进行特征组合时的复杂度。$$y(mathbf{x}) = w_0+ sum_{i=1}^n w_i x_i + sum_{i=1}^n sum_{j=i+1}^n w_{ij} x_i x_j $$
    转换为:

    [y(mathbf{x}) = w_0+ sum_{i=1}^n w_i x_i + sum_{i=1}^n sum_{j=i+1}^n langle mathbf{v}_i, mathbf{v}_j angle x_i x_j ]

    其中(W=V^TV)(v_i)(k)维向量。
    关于FM,这篇博客写的很详细。还有FM的论文FM在KDD2012中的使用

    FFM(Field-aware Factorization Machine)
    FFM是FM的改进版,将特征归为不同的field,同一个特征在对不同field特征进行组合时使用不同的隐向量,因此,FFM的二次参数从FM的(kn)个增加到(kfn)个。可以说FM是FFM的简化版或特例。
    FFM的论文LIBFFM项目主页

    参考:
    https://zhuanlan.zhihu.com/p/24202220
    http://blog.csdn.net/harryhuang1990/article/details/9924377
    http://tech.meituan.com/deep-understanding-of-ffm-principles-and-practices.html
    https://tracholar.github.io/machine-learning/2017/03/10/factorization-machine.html
    http://www.meihua.info/a/65329

    延伸阅读:
    深度学习在推荐系统中的应用
    DNN在CTR预估上的应用

  • 相关阅读:
    PAT (Advanced Level) 1010. Radix (25)
    PAT (Advanced Level) 1009. Product of Polynomials (25)
    PAT (Advanced Level) 1008. Elevator (20)
    PAT (Advanced Level) 1007. Maximum Subsequence Sum (25)
    PAT (Advanced Level) 1006. Sign In and Sign Out (25)
    PAT (Advanced Level) 1005. Spell It Right (20)
    PAT (Advanced Level) 1004. Counting Leaves (30)
    PAT (Advanced Level) 1001. A+B Format (20)
    PAT (Advanced Level) 1002. A+B for Polynomials (25)
    PAT (Advanced Level) 1003. Emergency (25)
  • 原文地址:https://www.cnblogs.com/sandy-t/p/6819027.html
Copyright © 2011-2022 走看看