常见推荐算法科普

推荐算法

目前主流的推荐算法主要包含内容关联算法, 协同过滤算法。

内容关联算法(Content-Based)

CB算法的原理是将一个item的基本属性, 内容等信息提取出来, 抽成一个taglist, 为每个tag赋一个权重。

剩下的事情就跟一个搜索引擎非常类似了, 将所有item对应的taglist做一下倒排转换, 放到倒排索引服务器中存储起来。

当要对某一个item做相关推荐的时候, 将这个item对应的taglist拿出来拼成一个类似搜索系统中的query表达式, 再将召回的结果做一下排序作为推荐结果输出。

当要对某个用户做个性化推荐的时候, 将这个用户最近喜欢/操作过的item列表拿出来, 将这些item的taglist拿出来并merge一下作为用户模型, 并将这个模型的taglist请求倒排索引服务, 将召回的结果作为候选推荐给该用户。

该算法的好处是:

  1. 不依赖于用户行为, 即不需要冷启动的过程, 随时到随时都能推荐
  2. 可以给出看起来比较合理的推荐解释
  3. item被推荐的时效性可以做得很高, 比如新闻类产品就需要用到该算法

该算法的坏处是:

  1. 需要理解item的内容, 对音频/视频等不好解析内容的就不好处理了
  2. 对于一次多义以及一义多词等情况处理起来比较复杂
  3. 容易出现同质化严重的问题, 缺乏惊喜

协同过滤算法(collaborative filtering)

简介

CF算法的原理是汇总所有<user,item>的行为对, 利用集体智慧做推荐。其原理很像朋友推荐, 比如通过对用户喜欢的item进行分析, 发现用户A和用户B很像(他们都喜欢差不多的东西), 用户B喜欢了某个item, 而用户A没有喜欢, 那么就把这个item推荐给用户A。(User-Based CF)

当然, 还有另外一个维度的协同推荐。即对比所有数据, 发现itemA和itemB很像(他们被差不多的人喜欢), 那么就把用户A喜欢的所有item, 将这些item类似的item列表拉出来, 作为被推荐候选推荐给用户A。(Item-Based CF)

如上说的都是个性化推荐, 如果是相关推荐, 就直接拿Item-Based CF的中间结果就好啦。

该算法的好处是:

  1. 能起到意想不到的推荐效果, 经常能推荐出来一些惊喜结果
  2. 进行有效的长尾item
  3. 只依赖用户行为, 不需要对内容进行深入了解, 使用范围广

该算法的坏处是:

  1. 一开始需要大量的<user,item>行为数据, 即需要大量冷启动数据
  2. 很难给出合理的推荐解释

原理

协同过滤算法具体实现的时候, 又分为典型的两类:

  1. 基于领域的协同过滤算法

    这类算法的主要思想是利用<user,item>的打分矩阵, 利用统计信息计算用户和用户, item和item之间的相似度。然后再利用相似度排序, 最终得出推荐结果。

    常见的算法原理如下:

    1. User-Based CF

      先看公式:

      该公式要计算用户i和用户j之间的相似度, I(ij)是代表用户i和用户j共同评价过的物品, R(i,x)代表用户i对物品x的评分, R(i)头上有一杠的代表用户i所有评分的平均分, 之所以要减去平均分是因为有的用户打分严有的松, 归一化用户打分避免相互影响。

      该公式没有考虑到热门商品可能会被很多用户所喜欢, 所以还可以优化加一下权重, 这儿就不演示公式了。

      在实际生产环境中, 经常用到另外一个类似的算法Slope One, 该公式是计算评分偏差, 即将共同评价过的物品, 将各自的打分相减再求平均。

    2. Item-Based CF

      先看公式:

      该公式跟User-Based CF是类似的, 就不再重复解释了。

    这类算法会面临两个典型的问题:

    1. 矩阵稀疏问题
    2. 计算资源有限导致的扩展性问题

    基于此, 专家学者们又提出了系列基于模型的协同过滤算法。

  2. 基于模型的协同过滤算法

    基于模型的研究就多了, 常见的有:

    1. 基于矩阵分解和潜在语义的
    2. 基于贝叶斯网络的
    3. 基于SVM的

    这儿只简单介绍一下基于矩阵分解的潜在语义模型的推荐算法。该算法首先将稀疏矩阵用均值填满, 然后利用矩阵分解将其分解为两个矩阵相乘, 如下图:

    看一个实际的例子:

    这个例子中, 原始矩阵中包含了网页的Title和切词后的term之间关系, 可以类比为推荐系统中的评分。然后用SVD做矩阵分解之后, 针对每个term会对应一个3维向量, 针对每个Title也会对应一个3维向量。

    那么接下来可以做的事情就很多了, 如果要计算term和title的相似度, 只需要将这两个3为向量做内积得到的分值即可;

    还可以将term和title都投影到这3维空间中, 然后利用各种聚类算法, 将用户和item, item和item, 用户和用户的分类都给求出来。

    该算法的核心是在于做矩阵分解, 在矩阵大了的情况下计算量是非常夸张的, 在实际生产环境中会常用梯度递归下降方法来求得一个近似解。

  3. 组合推荐技术

    其实从实践中来看, 没有哪种推荐技术敢说自己没有弊端, 往往一个好的推荐系统也不是只用一种推荐技术就解决问题, 往往都是相互结合来弥补彼此的不足, 常见的组合方式如下:

    1. 混合推荐技术: 同时使用多种推荐技术再加权取最优;
    2. 切换推荐技术: 根据用户场景使用不同的推荐技术;
    3. 特征组合推荐技术: 将一种推荐技术的输出作为特征放到另一个推荐技术当中;
    4. 层叠推荐技术: 一个推荐模块过程中从另一个推荐模块中获取结果用于自己产出结果;

Item-CF和User-CF选择

  1. user和item数量分布以及变化频率

    1. 如果user数量远远大于item数量, 采用Item-CF效果会更好, 因为同一个item对应的打分会比较多, 而且计算量会相对较少
    2. 如果item数量远远大于user数量, 则采用User-CF效果会更好, 原因同上
    3. 在实际生产环境中, 有可能因为用户无登陆, 而cookie信息又极不稳定, 导致只能使用item-cf
    4. 如果用户行为变化频率很慢(比如小说), 用User-CF结果会比较稳定
    5. 如果用户行为变化频率很快(比如新闻, 音乐, 电影等), 用Item-CF结果会比较稳定
  2. 相关和惊喜的权衡
    1. item-based出的更偏相关结果, 出的可能都是看起来比较类似的结果
    2. user-based出的更有可能有惊喜, 因为看的是人与人的相似性, 推出来的结果可能更有惊喜
  3. 数据更新频率和时效性要求
    1. 对于item更新时效性较高的产品, 比如新闻, 就无法直接采用item-based的CF, 因为CF是需要批量计算的, 在计算结果出来之前新的item是无法被推荐出来的, 导致数据时效性偏低;
    2. 但是可以采用user-cf, 再记录一个在线的用户item行为对, 就可以根据用户最近类似的用户的行为进行时效性item推荐;
    3. 对于像影视, 音乐之类的还是可以采用item-cf的;

原文地址:https://www.cnblogs.com/williamjie/p/9497067.html

时间: 2024-10-27 06:25:17

常见推荐算法科普的相关文章

互联网中常见的推荐算法

原文链接:各种互联网中常见的推荐算法锦集 我们在上网购物.看小说.买电影票的时候,都会遇到各种各样的推荐,给我们推荐一些我们曾经买过或收藏过的同类型产品,或者是推荐一些我们看过的小说题材相同的小说.那这些产品推荐都是如何实现的呢? 我们今天就来聊聊这些“无聊”的算法. 在互联网的应用中,常用的推荐算法有:协同过滤推荐算法(Collaborative Filtering Recommendation).内容推荐算法(Content-based Recommendation).相似性推荐算法(Sim

几种常见模式识别算法整理和总结

这学期选了门模式识别的课.发现最常见的一种情况就是,书上写的老师ppt上写的都看不懂,然后绕了一大圈去自己查资料理解,回头看看发现,Ah-ha,原来本质的原理那么简单,自己一開始仅仅只是被那些看似formidable的细节吓到了.所以在这里把自己所学的一些点记录下来,供备忘,也供參考. 1. K-Nearest Neighbor K-NN能够说是一种最直接的用来分类未知数据的方法.基本通过以下这张图跟文字说明就能够明确K-NN是干什么的 简单来说,K-NN能够看成:有那么一堆你已经知道分类的数据

常见hash算法的原理(转)

常见hash算法的原理 散列表,它是基于快速存取的角度设计的,也是一种典型的“空间换时间”的做法.顾名思义,该数据结构可以理解为一个线性表,但是其中的元素不是紧密排列的,而是可能存在空隙. 散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度.这个映射函数叫做散列函数,存放记录的数组叫做散列表. 比如我们存储70个元素,但我们可能为这70个元素申请了100个元素的空间.7

推荐算法

目前,主要的推荐方法包括:基于内容的推荐.协同过滤推荐.基于关联规则的推荐.基于效用的推荐.基于知识的推荐和组合推荐. 基于内容的推荐 基于内容的推荐(Content-based Recommendation)是信息过滤技术的延续与发展,它是建立在项目的内容信息上作出推荐的,而不需要依据用户对项目的评价意见,更多地需要用机器学习的方法从关于内容的特征描述的事例中得到用户的兴趣资料.在基于内容的推荐系统中,项目或对象是通过相关的特征的属性来定义,系统基于用户评价对象的特征,学习用户的兴趣,考察用户

天猫推荐算法大赛总结

原文:http://closure.blog.ustc.edu.cn/?p=117 阿里这次天猫推荐算法大赛题目的核心是给定用户对品牌的四个月的操作记录,预测下个月哪些用户对哪些品牌产生购买行为,这可以抽象为一个01分类问题,更确切的可以抽象为一个点击率预估(CTR).与其说这是一次比赛,我觉得更多的是一次认识,一次对大数据价值的深刻认识,在分享自己的体会之前,我真心的感谢阿里,给我们提供这样一种机会,让我们在学校里可以接触真实的数据业务需求,让所学的理论可以有一次真实的实践机会. 关于这次比赛

常见hash算法的原理

转自:http://blog.csdn.net/zxycode007/article/details/6999984 散列表,它是基于快速存取的角度设计的,也是一种典型的“空间换时间”的做法.顾名思义,该数据结构可以理解为一个线性表,但是其中的元素不是紧密排列的,而是可能存在空隙. 散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度.这个映射函数叫做散列函数,存放记录的

网易云音乐的歌单推荐算法

[转载]原文地址:https://www.zhihu.com/question/26743347 原文: 不是广告党,但我却成为网易云音乐的的重度患者,不管是黑红的用户界面,还是高质量音乐质量都用起来很舒服.我喜欢听歌,几乎每周不低于15小时,但其实听得不是特别多,并没有经常刻意地去搜歌名,所以曲目数量我并不是很在乎.但是比起其它,网音给我推荐的歌单几乎次次惊艳,而且大多都没听过,或者好久以前听过早就忘记了名字,或者之前不知道在哪听过 只是知道其中一部分旋律,根本不知道名字,等等,听起来整个人大

当推荐算法开源包多如牛毛,为什么我们还要专门的推荐算法工程师

作为一个推荐系统业余爱好者,在机器学习领域的鄙视链中,我感觉一直地位不高,时常被搞NLP CV语音等高科技技术的朋友鄙视. 最近甚至被人问,推荐算法开源包多如牛毛,我们为什么还要专门的推荐算法工程师?(难道想要辞退我!?惊) 不得不说,我想吐槽这个观点很久了.事实上搞推荐的工作不等于 import IBCF 或者 import time SVD++ import tensor啊摔! 于是找回帐号打开N年不用的博客,写一篇随想,其中含有大量主观臆断以及学术错误,尽量不中英夹杂术语之外的英文,如果有

mahout 常见机器学习算法及分类

最近一直在学习hadoop 一直没有梳理接触到的东西,常见算法分类: 推荐系统(推荐引擎): 基于用户的协同过滤算法UserCF      近邻算法,容易实现 基于物品的协同过滤算法ItemCF       速度快,容易实现分布式计算 SlopeOne算法       @Deprecated at mahout 0.8 KNN Linear interpolation item–based推荐算法    最近邻算法   @Deprecated at mahout 0.8 SVD推荐算法   奇异