常用的推荐算法小结

转载自   常用的推荐算法小结

推荐系统的必然

互联网发展到现阶段,信息已经不是匮乏,而是爆炸。所以良好的用户体验就是把用户喜欢的,感兴趣的从大量的数据中筛选出来,再呈现给用户,实现千人千面的效果。

所以推荐系统的出现就是必然了,他可以推荐每个用户感兴趣的产品,同时也将每个产品呈现到感兴趣的用户面前。实现用户和产品的双赢。

推荐系统架构

一个常见的推荐系统架构一般如下图: 
 
可以看到分为数据来源、推荐引擎和推荐交互三个方面。 
数据 60%,产品30%,算法10%,这是一个基本的共识

数据来源

将一个产品推荐给一个用户。设计到的对象有两个,产品和用户。还有两者的交互。所以数据源有三个方面。

  • 产品数据:价格,标签,类别等
  • 用户数据: 性别,年龄,年级等
  • 交互数据:对产品的评价打分(构建评价模型)

评价模型,通过真实的用户行为数据构建,包括对产品是否浏览,浏览时间,是否收藏,是否分享等等。通过这些指标构建评价模型。(相关性分析+回归?)

推荐引擎

推荐引擎主要是推荐系统的算法,主要包括 基于人口统计学的推荐,基于内容的推荐,协同过滤三种。下文详细分析。

另外现在推荐引擎都构建在搜索引擎的基础上,贴一个推荐架构: 
 
这是基于Mahout 和 Elasticsearch 实现推荐系统 
更多见这里

用户交互

将“推荐”理解为“推送” 
如果主动推送给用户,很有可能会引起用户反感,虽然在一定程度上会提升用户活跃度。当然这个也可以通过算法去控制要不要主动推送,对于活跃度一直很低的可以主动推荐,甚至是通过发短信来推送,其他用户则可以转为被动。

当下无数的互联网产品都有一个“发现”模块,包括微信,Twiiter等大量产品。用户有需求的时候,会主动的找“推荐”,避免被打搅。而对于推荐系统,也避免对用户形成打扰,引起用户反感。

参考这里

推荐算法

基于人口学的推荐

核心是基于用户数据建模 
 
这是最为简单的一种推荐算法,它只是简单的根据系统用户的基本信息发现用户的相关程度,然后将相似用户喜爱的其他物品推荐给当前用户。

系统首先会根据用户的属性建模,比如用户的年龄,性别,兴趣等信息。根据这些特征计算用户间的相似度。比如系统通过计算发现用户A和C比较相似。就会把A喜欢的物品推荐给C。

  • 优势: 
    a 不需要历史数据,没有冷启动问题 
    b 不依赖于物品的属性,因此其他领域的问题都可无缝接入。
  • 不足: 
    算法比较粗糙,效果很难令人满意,只适合简单的推荐

推荐系统的「冷启动」包含两个层面: 
1. 用户的冷启动,应该是80%的「冷启动」所描述的问题,新的用户因为没有在产品上留下行为数据,你自然无法得知他/她的喜好,从而做出靠谱的推荐。这时一般需要借助用户的背景资料,或者引导性地让用户选择,或者暂时用热门启动替代个性化推荐来解决,在线推荐系统可以做到在用户产生行为数据后立马更新推荐列表。 
2. 物品的冷启动,主要适用于ItemBased的场景,即对一个物品推类似的物品,因为新物品还没有用户行为数据,自然也就没有办法通过协同过滤的方式进行推荐,这时一般会利用物品属性的相关程度来解决。 
作者:ershou 
链接:https://www.zhihu.com/question/19668164/answer/39133343 
来源:知乎 
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

基于内容的推荐

核心是基于内容数据建模 
 
与上面的方法相类似,只不过这次的中心转到了物品本身。使用物品本身的相似度而不是用户的相似度。 
系统首先对物品(图中举电影的例子)的属性进行建模,图中用类型作为属性。在实际应用中,只根据类型显然过于粗糙,还需要考虑演员,导演等更多信息。通过相似度计算,发现电影A和C相似度较高,因为他们都属于爱情类。系统还会发现用户A喜欢电影A,由此得出结论,用户A很可能对电影C也感兴趣。于是将电影C推荐给A。

  • 优势: 
    对用户兴趣可以很好的建模,并通过对物品属性维度的增加,获得更好的推荐精度
  • 不足: 
     a 物品的属性有限,很难有效的得到更多数据 
     b 物品相似度的衡量标准只考虑到了物品本身,有一定的片面性 
     c 需要用户的物品的历史数据,有冷启动的问题

协同过滤

核心是用户交互数据建模 
基于协同过滤的推荐可以分为三个子类:基于用户的推荐(User-based Recommendation),基于项目的推荐(Item-based Recommendation)和基于模型的推荐(Model-based Recommendation)。

基于用户的协同过滤推荐

它的基本假设是,喜欢类似物品的用户可能有相同或者相似的口味和偏好。根据所有用户对物品或者信息的偏好,发现与当前用户口味和偏好相似的“邻居”用户群,在一般的应用中是采用计算“K- 邻居”的算法;然后,基于这 K 个邻居的历史偏好信息,为当前用户进行推荐。 
 
假设用户 A 喜欢物品 A,物品 C, 
用户 B 喜欢物品 B, 
用户 C 喜欢物品 A ,物品 C 和物品 D; 
从这些用户的历史喜好信息中,我们可以发现用户 A 和用户 C 的口味和偏好是比较类似的,同时用户 C 还喜欢物品 D,那么我们可以推断用户 A 可能也喜欢物品 D,因此可以将物品 D 推荐给用户 A。

基于用户的协同过滤推荐机制和基于人口统计学的推荐机制都是计算用户的相似度,并基于“邻居”用户群计算推荐,但它们所不同的是如何计算用户的相似度,基于人口统计学的机制只考虑用户本身的特征,而基于用户的协同过滤机制是在用户的历史偏好的数据上计算用户的相似度

基于项目的协同过滤推荐

基于项目的协同过滤推荐的基本原理也是类似的,只是说它使用所有用户对物品或者信息的偏好,发现物品和物品之间的相似度,然后根据用户的历史偏好信息,将类似的物品推荐给用户。 
 
假设用户 A 喜欢物品 A 和物品 C, 
用户 B 喜欢物品 A,物品 B 和物品 C, 
用户 C 喜欢物品 A, 
从这些用户的历史喜好可以分析出物品 A 和物品 C 时比较类似的,喜欢物品 A 的人都喜欢物品 C,基于这个数据可以推断用户 C 很有可能也喜欢物品 C,所以系统会将物品 C 推荐给用户 C。

与上面讲的类似,基于项目的协同过滤推荐和基于内容的推荐其实都是基于物品相似度预测推荐,只是相似度计算的方法不一样,前者是从用户历史的偏好推断,而后者是基于物品本身的属性特征信息

基于模型的协同过滤推荐

基于模型的协同过滤推荐就是基于样本的用户喜好信息,训练一个推荐模型,然后根据实时的用户喜好的信息进行预测,计算推荐。

协同过滤小结

  • 优点: 
    a. 它不需要对物品或者用户进行严格的建模,而且不要求物品的描述是机器可理解的,所以这种方法也是领域无关的。 
    b. 这种方法计算出来的推荐是开放的,可以共用他人的经验,很好的支持用户发现潜在的兴趣偏好
  • 缺点: 
    a. 方法的核心是基于历史数据,所以对新物品和新用户都有“冷启动”的问题。 
    b. 推荐的效果依赖于用户历史偏好数据的多少和准确性。 
    c. 在大部分的实现中,用户历史偏好是用稀疏矩阵进行存储的,而稀疏矩阵上的计算有些明显的问题,包括可能少部分人的错误偏好会对推荐的准确度有很大的影响等等。 
    d. 对于一些特殊品味的用户不能给予很好的推荐。 
    e. 由于以历史数据为基础,抓取和建模用户的偏好后,很难修改或者根据用户的使用演变,从而导致这个方法不够灵活。

推荐算法小结

  • 基于人口统计学或者内容的推荐 
    仅仅考虑用户或者内容本身的特征,并相相同特征形成一个集合。这样,如果你选择了集合中的一个,就像你推荐集合中的另一个。
  • 基于协同过滤的推荐 
    充分利用集体的智慧,即在大量的人群的行为和数据中收集答案,以帮助我们对整个人群得到统计意义上的结论。对象客观上不一定一样,但是主观的行为相似,就可以产生推荐。 
    完全基于用户的行为习惯,即 
    1)相似消费习惯的用户,很可能消费相同的东西 (可能两个消费习惯相同的用户,年龄,性别都不一样) 
    2)相似消费习惯的产品,很可能同时被消费。(可能两个相似消费习惯的产品种类,大小都不一样)

推荐算法发展方向

1 需要考虑在保证推荐准确性的同时增加推荐的多样性,使特殊喜好的用户得到推荐 
2 需要考虑用户对系统的实时反馈,更好的利用反馈数据强化推荐算法 
3 考虑时间,空间,任务等因素,来更好的完成推荐 
4冷启动问题的解决思路这里


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/328835.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET 4.6.2正式发布带来众多特性

虽然大多数人的注意力都集中在.NET Core上,但与原来的.NET Framework相关的工作还在继续。.NET Framework 4.6.2正式版已于近日发布,其重点是安全和WinForms/WPF/ASP.NET/WCF相关的特性,英文博客文章https://blogs.msdn.microsoft.com/dotnet/2016/08/02…

推荐算法-关联分析(关联规则)

转载自 推荐算法-关联分析(关联规则)关联分析又称关联挖掘,就是在交易数据、关系数据或其他信息载体中,查找存在于项目集合或对象集合之间的频繁模式、关联、相关性或因果结构。或者说,关联分析是发现交易数据库中不…

动态网页开发基础【笔记】

一、C/S结构和B/S结构1.C/S(Client/Server):客户端服务程序,控制台程序,window应用2.B/S(Browser/Server):浏览器服务程序[java:jsp应用;C#:asp.net],web应用程序区别:C/S:客户端和服务器端都需要开发&…

ASP.NET Core 中文文档 第三章 原理(2)中间件

原文:Middleware作者:Steve Smith and Rick Anderson翻译:刘怡(AlexLEWIS)校对:许登洋(Seay) 章节: 什么是中间件用 IApplicationBuilder 创建中间件管道内置中间件编写中间件扩展资源 查看或下载样例代码 什么是中间件…

关联分析:FP-Growth算法

转载自 关联分析:FP-Growth算法关联分析又称关联挖掘,就是在交易数据、关系数据或其他信息载体中,查找存在于项目集合或对象集合之间的频繁模式、关联、相关性或因果结构。关联分析的一个典型例子是购物篮分析。通过发现顾客放入购物篮中不同…

sql server链接查询

一、连接结果集中有多个表的信息时用连接查询1.内连接:多个表根据公共列连接,符合条件的显示,不符合条件的不显示 2.外连接:多个表根据公共列连接,显示一个表中的所有信息,另个表中中符合条件的信息,不符合条件的用nul…

ASP.NET Core 中文文档 第三章 原理(1)应用程序启动

原文:Application Startup作者:Steve Smith翻译:刘怡(AlexLEWIS)校对:谢炀(kiler398)、许登洋(Seay) ASP.NET Core 为你的应用程序提供了处理每个请求的完整控制。Startup 类是应用程序的入口(entry point)…

基于内容的推荐(Content-based Recommendations)

转载自 基于内容的推荐(Content-based Recommendations)Collaborative Filtering Recommendations (协同过滤,简称CF) 是目前最流行的推荐方法,在研究界和工业界得到大量使用。但是,工业界真正使用的系统一般都不会只…

[置顶]动态网页开发基础【笔记】

一、C/S结构和B/S结构1.C/S(Client/Server):客户端服务程序,控制台程序,window应用2.B/S(Browser/Server):浏览器服务程序[java:jsp应用;C#:asp.net],web应用程序区别:C/S:客户端和服务器端都需要开发&…

ASP.NET Core 中文文档 第三章 原理(3)静态文件处理

原文:Working with Static Files作者:Rick Anderson翻译:刘怡(AlexLEWIS)校对:谢炀(kiler398)、许登洋(Seay)、孟帅洋(书缘) 静态文件(static files),诸如 HTML、CSS、图片和 JavaScript 之类的…

使用IDEA Maven搭建Mybatis环境

本文是使用IDEA Maven搭建Mybatis环境 涉及到的搭配环境 JDK1.8 Maven3.6.3 IDEA2019 MySQL数据库 一、Maven介绍 Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理,是一个自动化构建工具。 自动化构建工具:将原材料&…

常用推荐算法

转载自 常用推荐算法在推荐系统简介中,我们给出了推荐系统的一般框架。很明显,推荐方法是整个推荐系统中最核心、最关键的部分,很大程度上决定了推荐系统性能的优劣。目前,主要的推荐方法包括:基于内容推荐、协同过滤…

不该活着的SqlHelper和DBHelper

前言: 还记得刚学ADO.NET的情景么? 还记得当年是怎么从ADO.NET被忽悠到用SqlHelper的么? 话说从入门到走上工作岗位那些年,我们就一直被纯纯地教导或引导,ADO.NET太原始,得封装成SqlHelper或DBHelper......…

使用IDEA配置Mybatis-Plus框架

使用IDEA配置Mybatis-Plus框架 本文是以使用IDEA配置Mybatis-Plus框架作为简单的讲解。 所涉及到的应用: IDEA2019Mybatis-Plus框架Mysql数据库Maven3.6.3jdk1.8 一、什么是Mybatis-Plus框架? MyBatis-Plus(简称MP)是一个MyBatis的增强工具&#xff…

css实现一级下拉菜单

涉及到的图片请到这里下载 涉及到的图片请到这里下载 涉及到的图片请到这里下载 html代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"…

UserCF,基于用户的协同过滤算法

转载自 UserCF,基于用户的协同过滤算法UserCF&#xff1a;User Collaboration Filter&#xff0c;基于用户的协同过滤 算法核心思想&#xff1a;在一个在线推荐系统中&#xff0c;当用户A需要个性化推荐时&#xff0c;可以先找到和他有相似兴趣的其它用户&#xff0c;然后…

用BenchmarkDotNet给C#程序做性能测试

BenchmarkDotNet是一个用MIT协议开源的C#程序性能测试的一个库&#xff0c;非常简单易用。 用法 安装NuGet包&#xff0c;BenchmarkDotNet在需要做性能测试的方法前加上属性[Benchmark]。在Main函数调用性能测试var summary BenchmarkRunner.Run<Md5VsSha256>();。 工作…

ItemCF,基于物品的协同过滤算法

转载自 ItemCF,基于物品的协同过滤算法ItemCF&#xff1a;Item Collaboration Filter&#xff0c;基于物品的协同过滤 算法核心思想&#xff1a;给用户推荐那些和他们之前喜欢的物品相似的物品。 比如&#xff0c;用户A之前买过《数据挖掘导论》&#xff0c;该算法会根据此行…

用Swashbuckle给ASP.NET Core的项目自动生成Swagger的API帮助文档

Swagger是一个描述RESTful的Web API的规范和框架。如果使用ASP.NET的话&#xff0c;可以用Swashbuckle来自动生成Swagger,具体参考如何使 WebAPI 自动生成漂亮又实用在线API文档。下面详细的介绍一下如何给ASP.NET Core的项目自动生成Swagger的API帮助文档。 创建ASP.NET Core的…

涨知识 | 100个中国最难读的地名,第一个就折了

内容来源网络&#xff0c;侵删&#xff01; 1.浙江丽水的丽&#xff0c;不读l&#xff0c;读l。 2.浙江台州、天台的台&#xff0c;不读ti&#xff0c;读tāi。 3.浙江嵊州的嵊&#xff0c;读音为shng。 4.浙江鄞县的鄞&#xff0c;读音为yn&#xff0c;不读jn。 5.浙江乐清的乐…