版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.csdn.net/z50L2O08e2u4afToR9A/article/details/79565720

project架构方向的程序猿。看到推荐/搜索/广告等和算法相关的技术,心中或多或少有一丝胆怯。但认真研究之后。发现事实上没有这么难。

 

今天的1分钟系列,给大家介绍下推荐系统中的“协同过滤”,绝无不论什么公式,保证大伙弄懂。

 

什么是协同过滤(Collaborative Filtering)?

:通过找到兴趣相投。或者有共同经验的群体。来向用户推荐感兴趣的信息。

 

举例。怎样协同过滤。来对用户A进行电影推荐?

:简要过程例如以下

  • 找到用户A(user_id_1)的兴趣爱好

  • 找到与用户A(user_id_1)具有同样电影兴趣爱好的用户群体集合Set<user_id>

  • 找到该群体喜欢的电影集合Set<movie_id>

  • 将这些电影Set<Movie_id>推荐给用户A(user_id_1)

 

详细实施步骤怎样?

:简要过程例如以下

(1)画一个大表格。横坐标是全部的movie_id,纵坐标全部的user_id,交叉处代表这个用户喜爱这部电影

http://mmbiz.qpic.cn/mmbiz_jpg/YrezxckhYOyX5wfsD9TdibFmicOBhTr04AIIc1InhzTkQl83wQiajKd1QqicphMXb76HGSEhZ9JIU7XEUavaUicxicFw/640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1" alt="640?

wx_fmt=jpeg&wxfrom=5&wx_lazy=1" />

如上表:

  • 横坐标,如果有10w部电影。所以横坐标有10w个movie_id。数据来源自数据库

  • 纵坐标,如果有100w个用户,所以纵坐标有100w个user_id,数据也来自数据库

  • 交叉处,“1”代表用户喜爱这部电影,数据来自日志

画外音:什么是“喜欢”,须要人为定义,比如浏览过,查找过,点赞过,反正日志里有这些数据

 

(2)找到用户A(user_id_1)的兴趣爱好

https://mmbiz.qpic.cn/mmbiz_jpg/YrezxckhYOyX5wfsD9TdibFmicOBhTr04ASib9sXy8gXiaTr7TpxRrcxjgPtg2ARV34ut1bNmahgl1zscv2ApzsD8g/640?

wx_fmt=jpeg" alt="640?

wx_fmt=jpeg" />

如上表,能够看到,用户A喜欢电影{m1, m2, m3}

 

(3)找到与用户A(user_id_1)具有同样电影兴趣爱好的用户群体集合Set<user_id>

wx_fmt=jpeg" alt="640?

wx_fmt=jpeg" />

如上表。能够看到,喜欢{m1, m2, m3}的用户,除了u1。还有{u2, u3}

 

(4)找到该群体喜欢的电影集合Set<movie_id>

如上表。具备同样喜好的用户群里{u2, u3},还喜好的电影集合是{m4, m5}

画外音:“协同”就体如今这里。

 

(5)未来用户A(use_id_1)来訪问站点时,要推荐电影{m4, m5}给ta。

 

协同过滤大致原理如上。希望大家有收获。

推荐文章:

1分钟了解“区块链”的本质

1分钟了解“挖矿”的本质

1分钟了解“区块链分叉”

1分钟了解协同过滤,pm都懂了的更多相关文章

  1. 推荐系统算法学习(一)——协同过滤(CF) MF FM FFM

    https://blog.csdn.net/qq_23269761/article/details/81355383 1.协同过滤(CF)[基于内存的协同过滤] 优点:简单,可解释 缺点:在稀疏情况下 ...

  2. 推荐召回--基于用户的协同过滤UserCF

    目录 1. 前言 2. 原理 3. 数据及相似度计算 4. 根据相似度计算结果 5. 相关问题 5.1 如何提炼用户日志数据? 5.2 用户相似度计算很耗时,有什么好的方法? 5.3 有哪些改进措施? ...

  3. [Recommendation System] 推荐系统之协同过滤(CF)算法详解和实现

    1 集体智慧和协同过滤 1.1 什么是集体智慧(社会计算)? 集体智慧 (Collective Intelligence) 并不是 Web2.0 时代特有的,只是在 Web2.0 时代,大家在 Web ...

  4. 协同过滤 CF & ALS 及在Spark上的实现

    使用Spark进行ALS编程的例子可以看:http://www.cnblogs.com/charlesblc/p/6165201.html ALS:alternating least squares ...

  5. CF(协同过滤算法)

    1 集体智慧和协同过滤 1.1 什么是集体智慧(社会计算)? 集体智慧 (Collective Intelligence) 并不是 Web2.0 时代特有的,只是在 Web2.0 时代,大家在 Web ...

  6. 协同过滤(CF)算法

    1 集体智慧和协同过滤 1.1 什么是集体智慧(社会计算)? 集体智慧 (Collective Intelligence) 并不是 Web2.0 时代特有的,只是在 Web2.0 时代,大家在 Web ...

  7. 协同过滤的R语言实现及改进

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 协同过滤算法是推荐系统最常用的算法之一,本文将介绍一种方法来使它可以在大型数据集上快速训练. 协同过滤算法(CF)是构建推荐系统时最常用的技 ...

  8. 从item-base到svd再到rbm,多种Collaborative Filtering(协同过滤算法)从原理到实现

    http://blog.csdn.net/dark_scope/article/details/17228643 〇.说明 本文的所有代码均可在 DML 找到,欢迎点星星. 一.引入 推荐系统(主要是 ...

  9. 推荐召回--基于物品的协同过滤:ItemCF

    目录 1. 前言 2. 原理&计算&改进 3. 总结 1. 前言 说完基于用户的协同过滤后,趁热打铁,我们来说说基于物品的协同过滤:"看了又看","买了又 ...

随机推荐

  1. C/C++获取文件后缀名并且比较

    以下这段是VC中过去文件后缀名的方法 1.CString GetSuffix(CString strFileName) {         return strFileName.Right(strFi ...

  2. YII2 model 字段验证提示 Unknown scenario: update

    意思是 update 场景不存在,也就是 定义的 rules 中没有该规则: /** * @inheritdoc * 验证规则 */ public function rules() { return ...

  3. 《转载》renameTo文件在windows环境下可以,在linux中报错

    以前我一直以为File#renameTo(File)方法与OS下面的 move/mv 命令是相同的,可以达到改名.移动文件的目的.不过后来经常发现问题:File#renameTo(File)方法会返回 ...

  4. Delphi应用程序的调试(十)调试器选项

    可在两个级别上设置调试选项:工程级和环境级.在前面的讲解中讲解了工程级调试选项,通过主菜单[Project | Options…]打开如下对话框: 可在Debugger Options对话框中设置全局 ...

  5. 怎样更改SQL Server 2008的身份验证方式

    大家都知道sql server 有两种登录验证方式,即sql server验证方式和windows验证方式,但是sql server默认的是windows登录验证方式,我们如何启用sql server ...

  6. jQuery事件处理(四)

    看了几天,决定整理一下jQuery事件处理的整体设计思路 1.通过add方法给选中的元素注册事件处理程序(通过缓存系统将事件储存到cache,而不是绑定到元素上) a.在存储之前,会为事件处理程序增加 ...

  7. 23种设计模式之访问者模式(Visitor)

    访问者模式是一种对象的行为性模式,用于表示一个作用于某对象结构中的各元素的操作,它使得用户可以再不改变各元素的类的前提下定义作用于这些元素的新操作.访问者模式使得增加新的操作变得很容易,但在一定程度上 ...

  8. JVM源码分析之javaagent原理完全解读

    概述 本文重点讲述javaagent的具体实现,因为它面向的是我们Java程序员,而且agent都是用Java编写的,不需要太多的C/C++编程基础,不过这篇文章里也会讲到JVMTIAgent(C实现 ...

  9. jfinal如何获取参数为数组的值

    前台: var postParams = { ids:["qw","ew"]}; 后台: String[] userids = this.getParaValu ...

  10. idea正则表达式查找代码的方法

    find: 1. 该正则表达式: initEcharts *:{1} *\{{1} 匹配: initEcharts : { 其中冒号两边允许无限个空格: 2.#[a-zA-Z]*#匹配:两边以井号结束 ...