一、基于内容的推荐(CB,Content-based Recommendations):

基于内容的推荐CB应该算是最早被使用的推荐方法,它根据用户过去喜欢的产品(本文统称为 item),为用户推荐和他过去喜欢的产品相似的产品。如,一个推荐饭店的系统可以依据某个用户之前喜欢很多的烤肉店而为他推荐烤肉店。 CB最早主要应用在信息检索系统当中,所以很多信息检索及信息过滤里的方法都能用于CB中。

  CB的过程一般包括以下三步:

(1)Item Representation:为每个item抽取出一些特征(也就是item的content了)来表示此item;

(2)Profile Learning:利用一个用户过去喜欢(及不喜欢)的item的特征数据,来学习出此用户的喜好特征(profile);

(3)Recommendation Generation:通过比较上一步得到的用户profile与候选item的特征,为此用户推荐一组相关性最大的item

二、基于协同过滤推荐(CF,Collaborative Filtering Recommendations ):

  常见的协同过滤推荐可以分为三类:(基于用户、基于物品、基于模型)

  1.基于用户的协同过滤(User CF,User based Collaborative Filtering):

  基于用户的协同过滤推荐算法先使用统计技术寻找与目标用户有相同喜好的“邻居”,然后根据目标用户的邻居的行为,向目标用户进行推荐。基本原理就是利用用户访问行为的相似性来互相推荐用户可能感兴趣的资源。在一般应用中采用计算“k近邻”,然后基于这K个邻居的历史偏好信息,为当前用户进行推荐。

  一般UserCF和ItemCF都是用上面的描述,其实真正实现的时候上面的描述只是第一步。真正实现的时候一般还是将问题分解为三步:

  (1)计算用户之间的相似度;

  (2)根据用户的相似度和用户的历史行为填补User-Item评分矩阵;

  (3)根据评分矩阵进行推荐(选高分)。

  具体的例子可以看ItemCF,UserCF只是换了表示的意义,比如下面公式(1)中N(i)和N(j)就变成了与用户i,j交互过的物品数量。

  相似度计算使用Jaccard公式或pearson相似度以及余弦相似度、欧式距离。

  2.基于物品的协同过滤(Item CF,Item based Collaborative Filtering):

  算法核心思想:给用户推荐那些和他们之前喜欢的物品相似的物品。

  这里看起来是不是和基于内容的推荐的核心思想很相像?(ItemCF和CB的区别?)

  确实很像,但是也是有很大差别的。比如,用户A之前买过《数据挖掘导论》,该算法会根据此行为给你推荐《机器学习》。但是ItemCF算法并不利用物品的内容属性计算物品之间的相似度,它主要通过分析用户的行为记录计算物品之间的相似度,然后根据相似度和用户打分结合,算出用户可能会对一些未接触过的物品给出的打分,进而进行推荐。而CB则是利用物品的内容属性计算物品之间的相似度,然后根据训练得到的用户的profile,找最相似的进行推荐。

  基于物品的协同过滤算法主要分为三步:

  (1)计算物品之间的相似度;

  (2)根据物品的相似度和用户的历史行为填补User-Item评分矩阵;

  (3)根据评分矩阵进行推荐(选高分)。

  具体如下:

    (1)

  首先使用公式(1)计算物品之间的相似度。其中,|N(i)|是喜欢物品i的用户数,|N(j)|是喜欢物品j的用户数,|N(i)∩N(j)|是同时喜欢物品i和物品j的用户数。当物品ab完全一致(是同一个物品)时,那么N(a)和N(b)应该完全相等,那么wij就为1。即w越接近1,ab越相似。w为0时,说明从用户物品交互角度来看,ab不相似。

  如图表示 用户A对abd三个物品感兴趣,以此类推。

  那么物品a和b的相似度即为:

  之后使用公式(2)预测用户对与他没有交互的物品的评分:

  (2)

  其中puj表示用户u对物品j的兴趣(可能的打分),rui则表示用户u对物品i已有的打分(explicit feedback中为打分,比如0-5分,implicit feedback中为有交互1,无交互0)。i可取自全集,也可挑选和j比较相似的几个物品(设立相似度阈值进行判断)。

  下面是一个书中的例子,帮助理解ItemCF过程:

  不止ItemCF,其实UserCF,CB的第二步,计算带推荐物品的分数(填补User-Item矩阵)的方法都是如图的方法。

  3.基于模型的协同过滤

  ItemCF和UserCF可以被归为基于记忆的模型,即依赖简单的相似性度量(比如余弦相似性、皮尔森相关系数等)来把相似的用户或物品匹配起来。如果有一个矩阵,那么其中每一行是一个用户,每一列代表一个物品,那么基于记忆的方法就是对这一矩阵的行或列使用相似性度量来获得一个相似度值,进而推荐。

  而与基于记忆的CF相对的,是基于模型的协同过滤

  基于模型的协同过滤作为目前最主流的协同过滤类型,其相关算法可以写一本书了,当然我们这里主要是对其思想做有一个归类概括。我们的问题是这样的m个物品,m个用户的数据,只有部分用户和部分数据之间是有评分数据的,其它部分评分是空白,此时我们要用已有的部分稀疏数据来预测那些空白的物品和数据之间的评分关系,找到最高评分的物品推荐给用户。

  对于这个问题,用机器学习的思想来建模解决,主流的方法可以分为:用关联算法,聚类算法,分类算法,回归算法,矩阵分解,神经网络,图模型以及隐语义模型等来解决,我们就不具体展开了。

  基于模型的协同过滤和基于记忆的协同过滤思想是一致的,都是想办法对缺失的UI(user-item)矩阵进行填补,进而进行推荐

  基于记忆的CF利用简单的相似性度量,以及线性加权组合进行填补。而基于模型的CF则利用各种更复杂的模型或方法,对UI矩阵进行填补,比如矩阵分解隐向量的思想(隐语义模型)SVDSVD++

  我们平常时常接触的隐语义模型、矩阵分解,都是基于模型的协同过滤算法

0 推荐系统——CB和CF的更多相关文章

  1. Hadoop 3.1.2(HA)+Zookeeper3.4.13+Hbase1.4.9(HA)+Hive2.3.4+Spark2.4.0(HA)高可用集群搭建

    目录 目录 1.前言 1.1.什么是 Hadoop? 1.1.1.什么是 YARN? 1.2.什么是 Zookeeper? 1.3.什么是 Hbase? 1.4.什么是 Hive 1.5.什么是 Sp ...

  2. CF卡技术详解——笔记

    知识太全面了,摘抄摘不完,还是粘过来加上注释和笔记吧. 重点以及断句用加粗,注释用红括号. 一.CF卡技术及规格 一.CF卡技术及规格 1.CF卡简史 随着数码产品的高速普及,近年来闪存卡也进入了高速 ...

  3. YUV 4:2:0 格式和YUV411格式区别

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/coloriy/article/details/6668447 MPEG 储存的 YU(Cb)V(Cr ...

  4. 11.2.0.3 RAC(VCS)节点crash以及hang的问题分析

    昨天某个客户的一套双节RAC当中一个节点crash,同一时候最后导致另外一个节点也hang住,仅仅能shutdown abort. 且出现shutdown abort实例之后,还有部分进程无法通过ki ...

  5. 微信小程序 - cb回调(typeof cb == "function" && cb(obj);)

    typeof cb == "function" && cb(obj) 但凡用了Promise,这种方式就可以抛弃了. Page({ data: {}, onLoad ...

  6. Hbase1.1.0.1配置集群

    参考链接 http://wuyudong.com/archives/119?utm_source=tuicool 参考链接 http://www.cnblogs.com/archimedes/p/45 ...

  7. HBase-1.2.1和Phoenix-4.7.0分布式安装指南

    目录 目录 1 1. 前言 2 2. 概念 2 2.1. Region name 2 3. 约定 2 4. 相关端口 3 5. 下载HBase 3 6. 安装步骤 3 6.1. 修改conf/regi ...

  8. HBase-0.98.0和Phoenix-4.0.0分布式安装指南

    目录 目录 1 1. 前言 1 2. 约定 2 3. 相关端口 2 4. 下载HBase 2 5. 安装步骤 2 5.1. 修改conf/regionservers 2 5.2. 修改conf/hba ...

  9. simotion读写CF卡,保存/读取变量

    simotion读写CF卡功能 1 使用西门子的Simotion运动控制器时,有时需要用到 读/写 CF卡的功能.主要来自以下几个方面的需求. 1)用户数据量较大,可保持(retain)存储区的容量不 ...

随机推荐

  1. 深入理解Java的浅克隆与深克隆

    前言 克隆,即复制一个对象,该对象的属性与被复制的对象一致,如果不使用Object类中的clone方法实现克隆,可以自己new出一个对象,并对相应的属性进行数据,这样也能实现克隆的目的. 但当对象属性 ...

  2. jmeter模拟spike测试(尖峰测试)

    概述 尖峰测试(Spike testing)在性能测试中属于压力测试的一个子集.指的是在某一瞬间或者多个频次下用户数和压力陡然增加的场景. 为了验证我们的网站在访问用户急剧增加的情况下,或者短时间内反 ...

  3. Windows新终端中玩转ASCII和Emoji游戏的正确姿势

    Windows新终端中玩转ASCII和Emoji游戏的正确姿势 前一段时间,我搬运了几个Windows Terminal中玩游戏的视频,详情请看 发布在即!来一睹官方团队如何玩转 Windows Te ...

  4. 10分钟实现Typora(markdown)编辑器

    本章主要内容: 介绍我们将在接下来的几章中构建的应用程序 配置我们的CSS样式表,使其看起来更像一个本机应用程序 回顾在Electron中主进程和渲染器进程之间的关系 为我们的主进程和渲染器进程实现基 ...

  5. JVM史上最全实践优化没有之一

    JVM史上最全优化没有之一 1.jvm的运行参数 1.1 三种参数类型 1.1.1 -server与-clinet参数 2.1 -X参数 2.1.1 -Xint.-Xcomp.-Xmixed 3.1 ...

  6. 大白话五种IO模型

    目录 一.I/O模型介绍 二.阻塞I/O模型 2.1 一个简单的解决方案 2.2 该方案的问题 2.3 改进方案 2.4 改进后方案的问题 三.非阻塞I/O模型 3.1 非阻塞I/O实例 四.多路复用 ...

  7. JDK源码阅读(三):ArraryList源码解析

    今天来看一下ArrayList的源码 目录 介绍 继承结构 属性 构造方法 add方法 remove方法 修改方法 获取元素 size()方法 isEmpty方法 clear方法 循环数组 1.介绍 ...

  8. POI 设置Excel单元格背景色(setFillForegroundColor)

    背景介绍:使用Java开发信息系统项目,项目中往往会涉及到报表管理部分,而Excel表格首当其冲称为最合适的选择,但是对单元格操作时对于设置单元格的背景颜色却很少提及,本文旨在方便单元格背景颜色设计. ...

  9. scrapy基础知识之将item写入JSON文件:

    pipelines.py import json class xxPipeline(object):     def __init__(self):         self.filename=ope ...

  10. tomcat配置https以及配置完成后提示服务器缺少中间证书(已解决)

    #### tomcat配置https 准备工作 下载好证书文件,下载的时候可以选择为tomcat文件.我这下载下来是压缩包.解压后就是下图的样子. 以.key结尾的文件是证书的key 以.pem结尾的 ...