推荐算法入门

推荐算法大致能够分为下面几类

  • 基于流行度的算法
  • 协同过滤算法(user-based CF and item-based CF)
  • 基于内容的算法(content-based)
  • 基于模型的算法
  • 混合算法

1. 基于流行度的算法

能够依照一个项目的流行度进行排序,将最流行的项目推荐给用户。比方在微博推荐中。将最为流行的大V用户推荐给普通用户。

微博每日都有最热门话题榜等等。

算法十分简单,通过简单热度排序就可以。

文章> Predict Whom One Will Follow:Followee Recommendation in Microblogs中推荐好友有一部分採取的策略是Item-popularity.通过计算在训练集中项目(能够是人、群组、公众号)被接受的次数来得到项目的流行度信息。

文章> A Social and Popularity-based Tag Recommender通过结合标签的流行度和另据意见向用户推荐标签。

  • 缺点:无法提供个性化推荐
  • 长处:算法简单。对于新注冊的用户比較有效
  • 改进或者新的思路:增加用户分群的流行度排序。比如把热榜上的体育内容优先推荐给体育迷。这里能否够考虑社区发现 聚类等算法??

2.协同过滤算法

协同过滤算法(Collaborative Filtering, CF)是非经常常使用的一种算法。在非常多电商站点上都实用到。CF算法包含基于用户的CF(User-based CF)和基于物品的CF(Item-based CF)。

2.1 基于用户的CF

1、分析各个用户对item的评价(通过浏览记录、购买记录等);

2、依据用户对item的评价计算得出全部用户之间的类似度。

3、选出与当前用户最类似的N个用户。

4、将这N个用户评价最高而且当前用户又没有浏览过的item推荐给当前用户。

首先我们依据站点的记录计算出一个用户与item的关联矩阵。例如以下,以微博数据为例

图中,行是不同的用户,列是全部物品,(x, y)的值则是x用户对y物品的评分(喜好程度)。我们能够把每一行视为一个用户对物品偏好的向量。然后计算每两个用户之间的向量距离。这里我们用余弦类似度来算:

然后得出用户向量之间类似度例如以下,当中值越接近1表示这两个用户越类似:

最后,我们要为用户1推荐物品,则找出与用户1类似度最高的N名用户(设N=2)评价的物品,去掉用户1评价过的物品。则是推荐结果。

基于物品的CF原理大同小异。仅仅是主体在于物品:

1、分析各个用户对item的浏览记录。

2、依据浏览记录分析得出全部item之间的类似度;

3、对于当前用户评价高的item。找出与之类似度最高的N个item。

4、将这N个item推荐给用户。

2、基于物品的CF

计算方式大致同样。仅仅是关联矩阵变为了item和item之间的关系,若用户同一时候浏览过item1和item2,则(1,1)的值为1。最后计算出全部item之间的关联关系例如以下:

对于微博数据集,item能够指的是被关注者(followee),而item之间的类似度能够通过用户对于item的行为来统计。假设用户对于item有过行为,则能够令偏好值为1。针对用户关注行为列表,能够通过统计item在用户关注列表中的共现次数来计算。

长处:算法简单,一定程度上准确率高

缺点:

1、依赖于准确的用户评分。

2、在计算的过程中,那些大热的物品会有更大的几率被推荐给用户;

3、冷启动问题。当有一名新用户或者新物品进入系统时,推荐将无从依据;

4、在一些item生存周期短(如新闻、广告)的系统中。因为更新速度快,大量item不会实用户评分,造成评分矩阵稀疏,不利于这些内容的推荐。

    -

3 基于内容的算法

大量的语料库中通过计算(比方典型的TF-IDF算法),我们能够算出新闻中每个关键词的权重。在计算类似度时引入这个权重的影响,就能够达到更精确的效果。

利用word2vec一类工具,能够将文本的关键词聚类,然后依据topic将文本向量化。

如能够将德甲、英超、西甲聚类到“足球”的topic下。将lv、Gucci聚类到“奢侈品”topic下,再依据topic为文本内容与用户作类似度计算。

利用word2vec一类工具,能够将文本的关键词聚类。然后依据topic将文本向量化。如能够将德甲、英超、西甲聚类到“足球”的topic下,将lv、Gucci聚类到“奢侈品”topic下,再依据topic为文本内容与用户作类似度计算。

4 基于模型的算法

基于模型的方法有非常多。用到的诸如机器学习的方法也能够非常深,这里仅仅简介下比較简单的方法——Logistics回归预測。我们通过分析系统中用户的行为和购买记录等数据,得到例如以下表:

中的行是一种物品,x1~xn是影响用户行为的各种特征属性。如用户年龄段、性别、地域、物品的价格、类别等等,y则是用户对于该物品的喜好程度,能够是购买记录、浏览、收藏等等。通过大量这类的数据,我们能够回归拟合出一个函数,计算出x1~xn相应的系数。这即是各特征属性相应的权重,权重值越大则表明该属性对于用户选择商品越重要。

在拟合函数的时候我们会想到,单一的某种属性和还有一种属性可能并不存在强关联。

比方,年龄与购买护肤品这个行为并不呈强关联,性别与购买护肤品也不强关联,但当我们把年龄与性别综合在一起考虑时,它们便和购买行为产生了强关联。比方(我仅仅是比方),20~30岁的女性用户更倾向于购买护肤品,这就叫交叉属性。通过重复測试和经验,我们能够调整特征属性的组合。拟合出最准确的回归函数。最后得出的属性权重例如以下:

基于模型的算法因为高速、准确,适用于实时性比較高的业务如新闻、广告等。而若是须要这样的算法达到更好的效果,则须要人工干预重复的进行属性的组合和筛选,也就是常说的Feature Engineering。

而因为新闻的时效性。系统也须要重复更新线上的数学模型,以适应变化。

5 混合算法

现实应用中,事实上非常少有直接用某种算法来做推荐的系统。

在一些大的站点如Netflix。就是融合了数十种算法的推荐系统。我们能够通过给不同算法的结果加权重来综合结果,或者是在不同的计算环节中运用不同的算法来混合,达到更贴合自己业务的目的。

时间: 2024-10-04 23:30:38

推荐算法入门的相关文章

mahout入门指南之mahout单机版推荐算法

鄙人最近在研究mahout,网上找了一些入门资料来看,发现都整理的比较乱.折腾了一番,终于搞清楚了.为了让新手们较快入门,决定总结分享一下,写此入门指南. mahout是什么? mahout是一个机器学习库,里面实现了一些算法,比如推荐算法,聚类算法. 实现方式有单机内存版,也有分布式(hadoop和spark). mahout如何快速入门? 个人觉得单机版的mahout推荐系统demo比较适合初学者.网上有一些入门资料其实也是单机版的算法,但是那些资料都要配置很多"不必要的"的环境,

SVD推荐算法(二)

这次讲解的是model-based的SVD推荐算法. 跟ALS推荐算法一样,都是矩阵分解的推荐算法,只不过求解的方式不同而已. 假如评分矩阵是R,那么我们希望拟合这样一个模型 R=U*M 其中U是user特征,M是item特征. 假如一个user的特征是u,一个item的特征是i,那么这个user对这个item的评分就是 u*i(两个特征的内积). 损失函数是: 然后我们的目标就是最小化这个E了. 这是SVD矩阵分解预测评分最基本的一种方法. 基于这个思想,各种最优化的方式和损失函数的改造也随之

写给嵌入式程序员的循环冗余校验(CRC)算法入门引导

写给嵌入式程序员的循环冗余校验(CRC)算法入门引导 http://blog.csdn.net/liyuanbhu/article/details/7882789 前言 CRC校验(循环冗余校验)是数据通讯中最常采用的校验方式.在嵌入式软件开发中,经常要用到CRC 算法对各种数据进行校验.因此,掌握基本的CRC算法应是嵌入式程序员的基本技能.可是,我认识的嵌入式程序员中能真正掌握CRC算法的人却很少,平常在项目中见到的CRC的代码多数都是那种效率非常低下的实现方式. 其实,在网上有一篇介绍CRC

关于2015阿里移动推荐算法大赛的总结(二)——推荐算法

虽然开始走错了路,但是也学到了东西,美团技术团队的文档还是不错的,喜欢的童鞋可以经常去瞅瞅,后面我会给链接的~~~~ -------------------------------------------------------------- 具体流程 基本流程如下,借用美团的图. 从框架的角度看,推荐系统基本可以分为数据层.触发层.融合过滤层和排序层.数据层包括数据生成和数据存储,主要是利用各种数据处理工具对原始日志进行清洗,处理成格式化的数据,落地到不同类型的存储系统中,供下游的算法和模型使

【转】循环冗余校验(CRC)算法入门引导

原文地址:循环冗余校验(CRC)算法入门引导 参考地址:https://en.wikipedia.org/wiki/Computation_of_cyclic_redundancy_checks#References  给出了CRC 计算的详细信息.想要深入学习,可以从这个网址开始.尤其是最后给出的 Reference 各个是精品 http://www.zorc.breitbandkatze.de/crc.html 是个非常有用的网站,文中给出的代码都与那里的结果进行了对比 写给嵌入式程序员的循

贝叶斯公式由浅入深大讲解—AI基础算法入门

1 贝叶斯方法 长久以来,人们对一件事情发生或不发生的概率,只有固定的0和1,即要么发生,要么不发生,从来不会去考虑某件事情发生的概率有多大,不发生的概率又是多大.而且概率虽然未知,但最起码是一个确定的值.比如如果问那时的人们一个问题:"有一个袋子,里面装着若干个白球和黑球,请问从袋子中取得白球的概率是多少?"他们会想都不用想,会立马告诉你,取出白球的概率就是1/2,要么取到白球,要么取不到白球,即θ只能有一个值,而且不论你取了多少次,取得白球的概率θ始终都是1/2,即不随观察结果X

什么是协同过滤推荐算法?

剖析千人千面的大脑——推荐引擎部分,其中这篇是定位:对推荐引擎中的核心算法:协同过滤进行深挖. 首先,千人千面融合各种场景,如搜索,如feed流,如广告,如风控,如策略增长,如购物全流程等等:其次千人千面的大脑肯定是内部的推荐引擎,这里有诸多规则和算法在实现对上述各个场景进行“细分推荐排序”:最后是推荐引擎的算法又以“协同过滤”为最核心.最主流热门,也是当下众多内容型.电商型.社交工具.分发型的基础. 由于协同过滤的算法介绍,网上也蛮多但片段化.要么侧重讲“原理流程”,这个占了4成:要么讲算法公

拓展KMP算法 入门+模板

拓展KMP算法入门 博客推荐 扩展KMP算法, 图很形象,代码写的也很清晰,下面的模板就是出自该博客文章. 拓展KMP是求母串S长度为n和子串T长度为m,求S的每一个后缀子串与T的前缀子串匹配的最长长度. 代码实现 //求解模式串T的next数组,这个函数和下面的函数几乎相同 void getnext(string &T, int m, int[] next) { int a = 0, p = 0; next[0] = m; //T字符串自身和自身匹配 for(int i=1; i<m; i

第一部分:趣味算法入门;第八题:冒泡排序(并与选择排序对比)

100个不同类型的python语言趣味编程题 在求解的过程中培养编程兴趣,拓展编程思维,提高编程能力. 第一部分:趣味算法入门:第八题: 8.冒泡排序:对N个整数(数据由键盘输入)进行升序排序 冒泡排序的思想:首先从表头开始往后扫描数组,在扫描的过程中逐对比较相邻的俩个元素的大小.若相邻的两个元素中,前面的元素大于后面的元素,则将它们互换,称之为消去了一个逆序,在扫描的过程中不断的将两相邻元素中的大者往后移动,最后就将数组中的最大者换到了表的最后,然后在剩下的数组元素中(n-1)个元素重复上面的