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

     

    一.推荐系统需求与应用

    随着信息的快速增长,信息重复和信息过多导致的被动获取的信息过载,信息搜索是根据和群体行为相关的权重排序信息,带有任务的用户寄希望能快速搜索到感兴趣的内容之后再深入阅读,再带着新的任务继续搜索,而现实的情形是个体用户不得不调整关键词反复搜索处于长尾的信息.通过搜索引擎主动获得高质量的信息也会花费更多的成本,推荐系统是解决这些问题最有潜力的方法.

      推荐系统(recommender systems)是利用信息过滤技术向用户推荐其可能感兴趣的信息.

      其作用在于:
      帮助用户快速发现感兴趣和高质量的信息,提升用户体验
      增加用户使用产品时间
      减少用户浏览到重复或者厌恶的信息带来的不利影响
      提供个性化信息,信息的推荐更为精准.

     

    二.推荐系统评价标准

    1.准确度

     a.打分系统:

    评分预测的预测准确度一般通过均方根误差(RMSE)和平均绝对误差(MAE)来判定.对于测试集中的一个用户u和物品i,令$r_{ui}$是用户u对物品i的实际评分,$ hat{r}_{ui}$是推荐系统给出的用户对物品的预测评分:

          $RMSE=frac{sqrt{sum_{u,i{in}T}{left(r_{ui} - hat{r}_{ui} ight)^2}}}{left|T ight|}$

      MAE采用绝对值计算预测误差:

          $MAE=frac{sum_{u,i{in}T}{left|r_{ui} - hat{r}_{ui} ight|}}{left|T ight|}$    

     b.topN:

      TopN推荐的预测准确率一般通过准确率(precision)/召回率(recall)度量.令R(u)为用户在训练集上的结果,T(u)为用户在测试集上的结果.

      召回率定义为:

          $Recall=frac{sum_{u{in}U}left|{Rleft(u ight){igcap}Tleft(u ight)} ight|}{sum_{u{in}U}left|{Tleft(u ight)} ight|}$

      准确率定义为:

          $Precision=frac{sum_{u{in}U}left|{Rleft(u ight){igcap}Tleft(u ight)} ight|}{sum_{u{in}U}left|{Rleft(u ight)} ight|}$

      2.覆盖率

    推荐出来的物品占总物品集合的比例.

      $Coverage=frac{left|U_{u{in}U}{Rleft(u ight)} ight|}{left|{I} ight|}$

    (1)信息熵:又称香农熵,指代信息量的多少,一般来说,覆盖率越高的推荐系统,信息熵越大.

    (2)基尼系数:经济学系数,在这里指代推荐系统中,热门物品与冷门物品的比值,一般来说,覆盖率越高的推荐系统,基尼系数越接近0

      3.多样性

    推荐系统给出推荐列表中的商品,两两之间的不相似性.

      4.信任度

    提供可靠的推荐理由

      5.惊喜度

    推荐和用户历史兴趣不相似, 却满意的

     

    三.推荐系统冷启动

     对于新用户:

       所有推荐系统对于新用户都有这个问题

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

       在用户注册的时候收集一些信息

       在用户注册完之后, 用一些互动游戏等确定喜欢与不喜欢

     对于新商品

       根据本身的属性, 求与原来商品的相似度.

       Item-based协同过滤可以推荐出去. 

     

     

    四.推荐系统算法 

    1.基于内容的推荐

    基于用户喜欢的item的属性/内容进行推荐

    需要分析内容, 无需考虑其他用户的行为

    通常使用在文本相关产品上进行推荐

    Item通过内容(比如关键词)关联

    基于比对item内容或标签进行推荐

    对于每个要推荐的内容, 我们需要建立一份资料:

    比如词kj在文件dj中的权重wij

    常用的方法比如TF-IDF

     

    需要对用户也建立一份资料:

    比如说定义一个权重向量(wc1,…,wck)

    其中wci表示第ki个词对用户c的重要度

    计算匹配度进行排序.

    比如用余弦距离公式

     

    2.协同过滤推荐(CF)

    a.user-based CF

    找到和用户最近的其他用户, 找到他们看/买过但当前用户没看/买过的item,根据距离加权打分找得分最高的推荐.

    一个用户序列 ui,一个item序列pj

    一个n×m的矩阵v, 每个元素vij表示用户i对j的打分,这个打分可能是多个维度,这个打分对推荐结果影响很大,需要不断优化.

    计算用户与用户相似度/距离(后面有相似度计算公式)

    选取Top K推荐或者加权预测得分

      

     

     下图比较直观:

     

     

    UserCF 算法的特点是:

      新闻推荐使用UserCF算法

    用户较少的场合,否则用户相似度矩阵计算代价很大

    适合时效性较强,用户个性化兴趣不太明显的领域

    对新用户不友好,对新物品友好,因为用户相似度矩阵不能实时计算

     

    b.item-based CF

    根据用户对商品/内容的行为,计算item和item相似度, 找到和当前item最近的进行推荐.

    一个用户序列ui,一个item序列pj

    一个n×m的矩阵v, 每个元素vij表示用户对j的打分

    计算item和item之间的相似度/距离

    选取Top K推荐或者加权预测得分

    ItemCF 算法的特点:

      购物网站使用ItemCF算法

    适用于物品数明显小于用户数的场合,否则物品相似度矩阵计算代价很大

    适合长尾物品丰富,用户个性化需求强的领域

    对新用户友好,对新物品不友好,因为物品相似度矩阵不需要很强的实时性

    利用用户历史行为做推荐解释,比较令用户信服

    越是热门的类,其类内物品的相似度会越大.

     

    计算相似度:

    1.欧氏距离相似度

            

    2.Jaccard相似度

            

    3.余弦相似度

            

    4.Pearson相似度

            

         

    协同过滤优点:

    基于用户行为, 因此对推荐内容无需先验知识.

    只需要用户和商品关联矩阵即可, 结构简单.

    在用户行为丰富的情况下, 效果好.

    协同过滤缺点:

    需要大量的显性/隐性用户行为.

    需要通过完全相同的商品关联, 相似的不行.

    假定用户的兴趣完全取决于之前的行为, 而和当前上下文环境无关.

    在数据稀疏的情况下受影响, 可以考虑二度关联.

     

    3.隐语义模型

    现实生活中的User-Item矩阵极大(User数量极大、Item数量极大),而用户的兴趣和消费能力有限,对单个用户来说消费的物品,产生评分记录的物品是极少的.这样造成了User-Item矩阵含有大量的空值,数据极为稀疏.

    我们假定前提:隐藏因子的个数小于user和item数因为如果每个user都关联一个独立的隐藏因子.

    核心是:奇异矩阵分解SVD

    还有加bias项的隐语义模型,进一步提高了推荐的准确性.

     

      4.基于二部图结构的推荐

     

      5.基于深度学习的推荐

     

  • 相关阅读:
    tetrahedron (公式)
    Subway (树中心 + 树hash)
    包装类的Null值
    基本数据类型的范围边界
    基本数据类型的装箱和拆箱()优先使用基本数据类型
    第三章-python基础 笔记
    第二章-Python起步
    第一章-欢迎来到python世界
    第八章-连接与多张表的操作
    php错误和异常的处理方式
  • 原文地址:https://www.cnblogs.com/xmeo/p/6138925.html
Copyright © 2011-2022 走看看