zoukankan      html  css  js  c++  java
  • Basic MF

    (1) 基本思想

    将评分矩阵R分解为用户矩阵U和项目矩阵S, 通过不断的迭代训练使得U和S的乘积越来越接近真实矩阵

    (2)具体的过程如图

    (3)目标函数如下,当Loss最小的时候,U和S的乘积可以近似的替代R


    $$ min Loss = min sum_{i=1}^{m} sum_{j=1}^{n} (R_{ij} - U_i^TS_j)^2 $$


    (4)更新函数


    $$ U_i leftarrow U_i - eta frac{partial L}{partial U_i}, S_j leftarrow S_j-eta frac{partial L}{partial S_j} $$


    η是学习速率
    当η = 1.5时,通常以震荡的形式接近极值点
    当η < 1时,迭代单调趋向极值点
    当η > 2时,不会收敛,围绕极值点逐渐发散


    具体取什么值要根据实验经验,另外还需要在每一步对学习速率进行衰减,目的是使算法尽快收敛。
    该方法也叫 LFM(latent factor model).


    (5)正则化,解决过拟合问题


    $$ min Loss = min sum_{i=1}^{m} sum_{j=1}^{n} (R_{ij} - U_i^TS_j)^2
    + lambda (|| U_{i} ||^{2} + || S_{j} ||^{2}) $$



    梯度下降结束的条件:真实值和预测值的差小于阈值

    (6)参数


    隐特征个数:F
    学习速率:α
    正则化参数:λ
    负样本/正样本比例:R

    实验发现,R 对 LFM 性能影响最大,随着负样本数目的增加,LFM 的准确率和召回率有明显提高,
    当 R > 10后趋于稳定,
    同时,随着负样本数目增加,覆盖率不断降低,流行度不断增加,说明 ratio 参数控制了推荐算法发掘长尾的能力。
    另外,与之前实验比较,在所有指标上都优于 UserCF 和 ItemCF。

    然而当数据集非常稀疏时,LFM 的性能会明显下降。

    (7)实际应用

    LFM 模型在实际使用中有一个困难,就是很难实现实时推荐。经典的 LFM 模型每次训练都需要扫描所有的用户行为记录,并且需要在用户行为记录上反复迭代来优化参数,所以每次训练都很耗时,实际应用中只能每天训练一次。在新闻推荐中,冷启动问题非常明显,每天都会有大量的新闻,这些新闻往往如昙花一现,在很短的时间获得很多人的关注,然后在很短时间内失去关注,实时性就非常重要。

    雅虎对此提出了一个解决方案。
    首先,利用新闻链接的内容属性(关键词、类别等)得到链接 i 的内容特征向量 $ y_i $ , 其次,实时收集用户对链接的行为,并且用这些数据得到链接 i 的隐特征向量 $ q_i $ ,然后,利用下面的公式预测用户 u 是否会单击链接 i:

    $$ r_{ui}=x^T_uy_i+p^T_uq_i $$

    $ y_i $ : 根据物品的内容属性直接生成
    $ x_{uk} $ : 用户 u 对内容特征 k 的兴趣程度,用户向量 xuxu 可以根据历史行为记录获得,每天计算一次
    $ p_u , q_i $ : 实时拿到的用户最近几小时的行为训练 LFM 模型获得
    对于一个新加入的物品 i,可以通过 $ x^T_uy_i $ 估计用户 u 对物品 i 的兴趣,然后经过几个小时后,通过 $ p^T_uq_i $ 得到更准确的预测值。


    (8)优缺点

  • 相关阅读:
    12.python中的列表
    11.python中的元组
    10.python中的序列
    9.python的布尔类型与流程控制
    8.python中的数字
    7.python字符串-内置方法分析
    Boost--lexical_cast 一个方便安全高效的string转换库
    STL进阶--vector vs deque
    STL进阶--删除元素
    STL进阶--相等 vs 等价 (Equality vs Equivalence)
  • 原文地址:https://www.cnblogs.com/weibao/p/12456062.html
Copyright © 2011-2022 走看看