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

    一、推荐系统概念简介

    推荐系统的本质是信息过滤,解决信息过载问题,将用户与物品联系起来。其实推荐系统很好的好处是发现长尾,大家可以看看长尾理论这本书~

    与搜索引擎不同,不需要用户提供明确需求,而是通过分析用户的历史行为给用户的兴趣建模,从而主动给用户推荐能够满足给他们兴趣和需求信息。

     个性化推荐系统需要依赖用户的行为数据,推荐系统应用都是由前台的展示页面、后台的日志系统以及推荐算法系统3 部分构成的。

    推荐系统构成:一个完整的推荐系统由3个部分组成:收集用户信息的行为记录模块,分析用户喜好的模型分析模块和推荐算法模块。

    推荐系统的实验方法:1.离线测试(主要是测试准确率,主要缺点是无法获得许多商业上关注的指标如点击率、转化率)。2.用户调查(高准确度不代表高满意度,所以需要用户调查,注意测试用户和真实用户分布尽量相同,缺点是招募测试用户代价较大)3.在线实验(在推荐系统上做AB测试,将它和旧的算法进行比较)。

    评测指标:用户满意度、预测准确度(均方根误差)、覆盖率、多样性、新颖性、惊喜度、信任度

    完善的推荐系统,是由很多算法组合而成,考虑用户维度、物品维度、时间维度等。

    二、推荐系统算法简介

    1)推荐系统的数学定义:

    设C为全体用户集合;设S为全体商品的集合;设u是评判把Si推荐Cj的好坏评判函数。推荐是对于c∈C,找到s∈S,使得u最大,即

    通俗来说,推荐系统需要:

    根据用户的:a)历史行为  b)社交网络  c)兴趣点 d)所处上下文(一天的情况)…去判断用户当前兴趣item。

    推荐系统的评估:

    准确度:1.打分系统

            2.TOP N推荐

    覆盖率:表示对物品长尾的发掘能力

    H是用信息熵的方式来衡量,p(i)是某个商品被推荐出去的概率,比如这个商品被推荐给了100个人,只有10个人推荐成功了,概率就是10%。可能是某一个品类。当每个商品被推荐出去的概率都比较平均时,H会较高。

    多样性:优秀的推荐系统能够保证推荐结果列表中物品的丰富性(两者之间的差异性)。第一个等式的分母实际上是,所以第一个值衡量的是某用户的推荐系统篮子的平均相似度情况;第二个值衡量的是计算一部分用户的相似度,然后求均值。

    2)推荐系统1:基于内容

       基于用户喜欢的物品的属性或内容进行推荐。

       需要分析内容,无需考虑用户与用户之间关联,只考虑user-item

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

    对于每个要推荐的内容,我们需要建立一份资料:比如词Ki在文件dj中的权重Wij(TF-IDF方法,一个词相对于这个文档的重要程度)

    需要对用户也建立一份资料:比如用户看的那些新闻,词的权重,定义一个权重向量(Wci,…Wck),其中Wci表示第Ki个词对用户c的重要度。

    然后再去评估两者权重向量的一个相似度,比如余弦距离公式

    3)推荐系统2:协同过滤

    协同过滤是一种基于“近邻”的推荐算法(KNN, ANN)

    根据用户在物品上的行为找到物品或者用户的“近邻”,比如你今天想去看电影,你不知道看什么,你就会去找和你关系比较近的小民、小红和宝宝问他们有什么好的推荐没有。

    相似度/距离定义:两个向量相似度的评估,有以下几种方法,其中jaccard相似度适用于数据为0或者1的情况。两者都为1的个数/两者中至少有1个为1的个数。

    a) 基于用户的协同过滤

    基于用户有共同行为的物品,计算用户相似度。

    找到近邻,对近邻在新物品的评价加权推荐。

     计算用户的相似度;比如计算第5个用户与其他用户的相似度,与第1个用户算出相似度S1,与第2个用户算出相似度S2…一直到S11,选出最接近的二个人,比如S5,S6。所以第5个用户问号那个位置(第5个用户可能会对电影1的打分)的计算=(3*S3+5*S6)/(S3+S6)

    b) 基于物品的协同过滤

    对于有相同用户交互的物品,计算物品相似度。

    找到物品近邻,进行推荐。

    一个用户序列Ui,i=1…n,一个物品序列Pj,j=1…m,n*m得分矩阵v,每个元素V表示用户i对物品j的打分。计算物品i和物品j之间的相似度/距离。

    假设用户Ux买过m3,m4物品,并给其打分4和8,我们可以计算m1与m3,m4之间的相似度,可以通过得分加权计算Rxi的推荐。

    Eg:计算每一部电影与第一部电影的相似度(下面是用的皮尔森相似,对在计算相似度时缺失的数据不考虑),找到第三部和第六部相似度最像。

    协同过滤优缺点:

    基于用户行为,因此对推荐内容无需先验知识;只需要用户和商品关联矩阵即可,结构简单。在用户行为丰富的情况下效果好。缺点是需要大量显性或隐性用户行为,需要通过完全相同的商品关联,相似的不行;假定用户的兴趣完全取决于之前的行为,而和当前上下文环境无关;在数据稀疏的情况下受影响。可以考虑二度关联。

    关于推荐系统的冷启动问题,所有推荐系统对于新用户都有这个问题,推荐非常热门的商品,收集一些信息,在用户注册的时候收集一些信息,在用户注册完之后,用一些互动游戏等确定喜欢与不喜欢。对于新物品,根据本身的属性,求与原来商品的相似度,item-based协同过滤可以推荐出去。

    现在商家很多都用基于物品的协同过滤,因为用户实在太多了,而且很多人注册几个号。

    4)推荐系统3:隐语义模型

    我们有用户评分矩阵,其中部分位置是空着的,我们希望尽量正确地填满未打分的项。我们需要找到隐含因子,可以对user和item进行关联。我们假定隐含因子的个数小于user和item数。假设因子为f1, f2, f3,由原来的打分矩阵转换为两个因子相关的矩阵相乘,当两者比较一致时,得分就会比较高,比如因子f3是年代,用户1喜欢看比较新的电影,取值为9,同时电影1也是年代比较新的电影,取值为6,两者相乘就会比较大。

    相比之下,CF更加简单直接、可解释性更强,隐语义模型能更好地挖掘用户与物品隐藏关联。可以发掘之前可以没有发生过行为的这些用户和商品之间的关系。

    为了更加准确,加入了偏置项,简单的理解就是wx+b,本身有些用户就是打分低,本身有些电影就是烂片,假设整个群体打分的均值,就形成了偏置项。个人的差异,群体的差异,电影的差异。

     

    5)推荐系统4:用户行为序列与word2vector

    6)推荐系统5:矩阵还原FM 因子制造机

    三、推荐系统应用

    开源的一些库,一般公司比较少用开源的,都是自己写,目前用的稍微多点的就是Mahout以及SPARK里面的ALS。

    推荐书籍《推荐系统实战》

  • 相关阅读:
    RFS入门【JS脚本应用】
    robot framework安装问题排查
    Jmeter报告模板(3种)
    【Ant】问题汇总
    上网痕迹查询助手Viewurl 2017
    Sublime3使用问题汇总
    Git常用命令
    cmp快排 结构体快排
    GCD LCM 最大公约数 最小公倍数 分数模板 (防溢出优化完成)
    三分法 模板
  • 原文地址:https://www.cnblogs.com/fionacai/p/6219423.html
Copyright © 2011-2022 走看看