◆版权声明:本文出自胖喵~的博客,转载必须注明出处。
  转载请注明出处:https://www.cnblogs.com/by-dream/p/9016289.html

前言


通常我们在网购的时候会遇到这样的情况,当我们买了一个物品A后,网站上可能会给你推荐一些和A相似的物品。这样的推荐就是典型的协同过滤算法,今天就来给大家说说协同过滤算法。

算法概念


协调过滤算法一般有两种,一种是基于物品的,一种是基于用户的,基于物品的是itembase,基于用户的是userbase,简单来说,基于物品的是当用户购买了物品A,如果发现A和C的相似度比较高,就给用户推荐物品C,基于用户的推荐是如果用户1和用户2相似度高,用户2买了物品A而用户1没有买,那么就给用户1推荐物品A。是不是很好理解。今天我主要说说itembase。

简单的推荐


刚才讲到itembase是根据物品的相似度来进行推荐,那么怎么计算物品的相似度呢?我们看一个简单的例子。

下面是一个用户的观看电影的行为的数据:

上面的表格反应的是:

用户1看了电影 A、B;
用户2看了电影 A、C;
用户3看了电影  A、B、C;

后面的打分我们可以先忽略,因为得分都是一样的。
那么对于电影来说,被人看过的统计就是
电影A:1、2、3
电影B:1、3
电影C:2、3

这里我们利用jaccard公式(下方)来计算电影A和B的距离:

那么A和B的 jaccard = (A交B)/(A并B) = [1,3] / [1,2,3] = 2/3

后面依次类我们可以算出A、B、C分别和另外两个jaccard系数。

这个时候,当一个用户看了电影B ,而我们要决定给他推荐电影A或者C的时候,我们就能很明显的看出来B和A之间的jaccard系数更大,固推荐电影A。

带用户打分权重的推荐


上面的流程中,不知道大家有没有注意到,我们忽略了一步,那就是用户对这个电影的打分,我们并没有用上。而现实生活中很有可能会出现这样的问题:我看了一个电影A和电影F,我对电影A打分特别低,但是电影A和电影B的相似度非常高,而我看电影F之后,我对电影F的打分相当的高,但是电影F和电影E之间的相似度是一般高(低于电影A和B的相似度),而如果我们还是用上面的算法的话,那么推荐给我的就是电影B了,而事实上我可能更想看的是电影E。那么如何解决这个问题呢,我们继续看。

这里我得用一个复杂的例子来讲解一下,假如我们有如下数据源:

首先第一步,我们需要构造一个item的同现矩阵

这里讲一下同现矩阵的构造方法:

[A, A] 这个地方的值代表的是 A这部电影一共出现了多少次,我们数数可以看到一共是5次,固这里值为5;

[A, B] 和 [B, A] 的值是相同的,代表的是,A和B同时被一个人观看的次数,我们可以看到用户1、2、5同时看过A和B电影,固这个值就是3;

[C, G] 类型这样的就是说,没有人同时看过C和G这两部电影。

构造完同现矩阵后,这时候,我们可以得到每一个人的打分,再构造一个评分矩阵,这里为了演示过程,我以用户4为例。

首先构造评分矩阵,这里需要注意,没有看过的电影直接记为0即可,即矩阵为:[5, 0, 3, 4.5, 0, 4, 0]

这里我们将 同现矩阵 * 评分矩阵 得到最终的得分矩阵 :

我们看下我标黑的这一列,最终的数值是 3*5+3*0+3*3+2*5+1*0+1*4+0*0 = 38,这一行代表的是B这个电影推荐给用户4的得分是38,由于我们知道用户4没有看过B、E、G,而B的得分是最高的,因此最后我们给B推荐的时候,就会优先推荐B电影。

由于同现矩阵中的数据代表是电影之间的相互权重,固在最终相乘的时候,权重高并且得分高的最终就能得到高分,这也符合推荐相似的且是用户爱看的电影。

itembase协同过滤的详细介绍的更多相关文章

  1. Mahout实现基于用户的协同过滤算法

    Mahout中对协同过滤算法进行了封装,看一个简单的基于用户的协同过滤算法. 基于用户:通过用户对物品的偏好程度来计算出用户的在喜好上的近邻,从而根据近邻的喜好推测出用户的喜好并推荐. 图片来源 程序 ...

  2. Mahout 协同过滤 itemBase RecommenderJob源码分析

    来自:http://blog.csdn.net/heyutao007/article/details/8612906 Mahout支持2种 M/R 的jobs实现itemBase的协同过滤 I.Ite ...

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

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

  4. IO流分类详细介绍和各种字节流类介绍与使用 过滤流 字节流

    Java基础笔记 – IO流分类详细介绍和各种字节流类介绍与使用 过滤流 字节流本文由 arthinking 发表于627 天前 ⁄ Java基础 ⁄ 评论数 1 ⁄ 被围观 2,036 views+ ...

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

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

  6. 【转载】协同过滤 & Spark机器学习实战

    因为协同过滤内容比较多,就新开一篇文章啦~~ 聚类和线性回归的实战,可以看:http://www.cnblogs.com/charlesblc/p/6159187.html 协同过滤实战,仍然参考:h ...

  7. CF(协同过滤算法)

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

  8. Mahout之(二)协同过滤推荐

    协同过滤 —— Collaborative Filtering 协同过滤简单来说就是根据目标用户的行为特征,为他发现一个兴趣相投.拥有共同经验的群体,然后根据群体的喜好来为目标用户过滤可能感兴趣的内容 ...

  9. 协同过滤(CF)算法

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

随机推荐

  1. mysql 数据操作 多表查询 子查询 介绍

    子查询就是: 把一条sql语句放在一个括号里,当做另外一条sql语句查询条件使用 拿到这个结果以后 当做下一个sql语句查询条件mysql 数据操作  子查询 #1:子查询是将一个查询语句嵌套在另一个 ...

  2. sql 用xml方式插入数据乱码问题解决方法

    sql 使用存储过程 参数为xml字符串 xml不要写编码,如下 <?xml version=\"1.0\" ?><root>数据字符串</root& ...

  3. IScroll5中文API整理,用法与参考

    IScroll是移动页面上被使用的一款仿系统滚动插件.IScroll5相对于之前的IScroll4改进了许多,使得大家可以更方便的定制所需的功能了. 做项目的时候正好用到了这个插件,自己做了一下总结, ...

  4. Spark中文文本分析建模

    实用的朴素贝叶斯模型建模 建模过程主要是把文本转化成向量然后再作分析 数据格式: ,善良 美丽 ,丑陋 阴险 卑鄙 ,温和 ....... 注:前面是给文章贴的标签,后面是文章的分词,分词可以找关于分 ...

  5. (转)SQL Server 2008登录错误:无法连接到(local)的解决

    在一些朋友安装完SQL Server 2008之后大多会遇到连接出错的问题.特别对于我们这样的新手而言简直郁闷的要死,好不容易装玩了又出现了问题.此篇文章意在解决安装步骤没有问题,但安装后无法登录的问 ...

  6. 浅谈padding

    浅谈padding padding是CSS盒子模型的一部分,代表盒子模型的内边距. 用法 padding属性有四个值,分别代表上.右.下.左的内边距. .box { padding: 10px 5px ...

  7. Python笔记 #17# Pandas: Merge

    10 Minutes to pandas Concat df = pd.DataFrame(np.random.randn(10, 4)) print(df) # break it into piec ...

  8. monit拉起服务

    check process hive_metastore matching "HiveMetaStore" start program = "/usr/bin/nohup ...

  9. Java实现:数据结构之排序

    Java实现:数据结构之排序 0.概述 形式化定义:假设有n个记录的序列(待排序列)为{ R1, R2 , -, Rn },其相应的关键字序列为 { K1, K2, -, Kn }.找到{1,2, - ...

  10. FromBottomToTop第十一周项目博客

    FromBottomToTop第十一周项目博客 项目内容 塔防游戏 大体就是在地图上以合理阵型建设防御炮塔来阻止小怪进入我方阵地.玩家需用现有的金币进行炮台建设或升级,金币数可根据打怪个数增加.入侵的 ...