《推荐系统》学习笔记 -- 基本概念

实战推荐(开发维护电子商务网站的推荐系统)几个月之后,感觉到达一个瓶颈。

从实战角度来讲,对于一个中型的电子商务网站(比如千万PV),独立构建一个推荐系统,完成基础的推荐功能,比如:ViewView(看过还看过)、ViewWant(看过还加车)、WantWant(加车还加车)、CollectCollect(收藏还收藏)之类的基于协同过滤的推荐;Similar(猜您喜欢)之类的基于内容的推荐,从数据的收集、抽取、计算、分析,已经没有问题。

但是对推荐的理论性认识,推荐策略及其适用场景,推荐算法,推荐效果评估等的认识,有待进一步提高。

值此阶段,看一本书,一本推荐的入门书:《Recommender System An Introduction》,中文名就叫《推荐系统》,几个奥地利人写的,百度的蒋凡翻译的。

看这本书之际,把学习内容记录一下,也写一些心得,达到加深记忆和理解的目的。

引言

《推荐系统》这本书重点讨论的是个性化推荐。提供个性化推荐系统要求系统知道每个用户的信息。推荐系统必须开发并维护一个用户模型(user model)或用户记录(user profile)保存用户的偏好。

用户模型对每个推荐系统都很重要,如何获取并利用这个信息取决于特定的推荐技术 。用户的偏好可以通过监测用户行为隐式地获取,也可以通过询问访问者显示地获取。

生成个性化推荐列表时,该利用什么样额外的信息?最著名的方法就是考虑其他用户构成的大规模群体的行为、意见和爱好。系统经常称之为基于群体或协同的方法。

协同过滤推荐

这些系统的基本思想是,如果用户在过去有相同的偏好(比如浏览或买过相同的书),那么他们在未来也会有相似的偏好,比如:User1、User2相似,User1购买了Book1,User2还不知道Book1,则可以向User2推荐Book1。

由于选择可能感兴趣的书涉及从大量集合中过滤出最优希望的书,而且用户是在隐式地与其他人相互协作,因此这种技术也被称为协同过滤(CF,Collaborative Filtering)。

常见问题如下:

1)如何发现与我们要推荐的用户有着相似偏好的用户?

2)如何衡量相似度?

3)如何处理还没有购买经历的新用户?

4)如果只有很少的评分该怎么办?

5)除了利用相似的用户之外,还有哪些技术可以用来预测某个用户是否喜欢其物品?

纯粹的协同过滤方法不会利用或要求任何有关物品本身的知识,比如卖书系统的推荐,不需要知道书的体裁、内容或作者。这种策略显而易见的优势是系统不需要获取并维护这些数据。

基于内容的推荐

基于内容推荐的核心是能够得到物品的描述(不管是人工生成还是自动抽取的)和这些特征的重要目录。

与物品的描述类似,用户记录也需要自动抽取或“学习”,方法是分析用户的行为和反馈,或者直接询问用户的兴趣和偏好。

常见问题:

1)系统如何自动获取并持续改进用户记录?

2)如何决定哪个物品匹配或者至少能接近、符合用户的兴趣?

3)什么技术能自动抽取或学习物品的描述,从而减少人工标注?

基于内容的推荐有两大优点:

首先,不需要大规模用户就可以达到适度的推荐精准度;

其次,一旦得到物品的属性就能立刻推荐新物品。

基于知识的推荐

如果把注意力投向其他应用领域,比如消费类电子产品,就会涉及大量的单次购买者。这意味着我们可能无法依赖购买记录,而这可是协同过滤和基于内容过滤方法的前提条件。

即便如此,我们还是能够获取到更为精细和结构化的内容,包括专业性的优质特征。

比如对于购买数码相机,一般用户每隔几年才会买一部新相机,所以推荐系统不可能构建用户记录或推荐其他人喜欢的相机,这将导致只推荐畅销机型。

此时,系统需要利用额外的因果知识生成推荐。在这种基于知识的方法中,推荐系统通常会用到有关当前用户和有效物品的额外信息(这些信息一般都是人工提供的)。

在许多基于知识的推荐系统中,用户需求必须通过交互引导得出。真正用心设计的交互式方法应该像平常对话一样,在个性化的一问一答中,系统能够摸索出用户的真正喜好。

总体来说,基于知识的推荐系统要解决的问题如下:

1)哪种领域知识能表示成知识库?

2)什么机制可根据用户的特点来选择和排名物品?

3)如何在没有购买记录的领域获取用户信息?如何处理用户直接给出的偏好信息?

4)哪种交互方式能够用于交互式推荐系统?

5)设计对话时,要考虑哪些个性化因素才能确保准确获得用户偏好信息?

评估推荐系统

推荐系统领域研究的主要推动力是提高推荐质量。随之而来的问题就是,我们如何实际衡量推荐系统所给出建议的质量?我们应该选择哪些评估方法?

通过回答如下问题,可以得到解答:

1)哪些研究设计适用于评估推荐系统?

2)如何利用历史数据实验评估推荐系统?

3)什么衡量标准适合不同的评估目标?

4)现有评估技术的局限是什么?尤其是在推荐系统的会话性或商业价值方面。

小结

本章是推荐系统相关的的一些基本概念,在以后的章节中会逐渐深入学习每部分的内容。

关于推荐系统,要能回答以下问题:

1)推荐系统的商业价值是什么呢?

2)它能帮助提高销售额或将很多访问者转化为购买者吗?

3)不同推荐算法在效果上有差别吗?在哪种情况下应该使用哪种技术?

时间: 2024-10-11 11:14:27

《推荐系统》学习笔记 -- 基本概念的相关文章

JavaScript高级程序设计学习笔记--基本概念

1.语句 ECMAScript中的语句以一个分号结尾:如果省略分号,则由解析器确定语句的结尾,如下例所示: var sum=a+b //即使没有分号也是有效的语句--推荐 var diff=a-b; //有效的语句--推荐 虽然语句结尾的分号不是必需的,但我们建议任何时候都不要省略它.两个原因:1.加上分号可以避免很多错误 2.加上分号也会在某些情况下增进代码的性能,因为这样解析器就不必再花时间 推测应该在哪里插入分号了. 2.变量 var message="hi"; 像这样初始化变量

Javascript高级程序设计学习笔记

3. 基本概念 基本数据类型:Undefined,Null,Boolean,Number,String. 复杂数据类型:Object. 3.6 语句 switch比较值时用的是全等运算符 “===” ,因此不会进行类型转换.例如 “10” 不等于10. 3.7 函数 ECMAScript函数不介意传递进来多少个参数,也不在乎参数的类型.即使定义的函数只接受两个参数,在调用的时候也可以传递任意多个或者0个.因为ECMAScript的参数在内部是用一个数组表示的,在函数体内部可以通过argument

JavaScript高级程序设计学习笔记--错误处理与调试

try-catch语句 只要代码中包含finally子句,则无论try或catch语句块中包含什么代码--甚至return语句,都不会阻止finally子句的执行,来看下面这个函数: function testFinally(){ try{ return 2; }catch(error){ return 1; }finally{ return 0; } } 调用这个函数会返回0(PS:但我实际执行的时候会先返回0,再返回2) 抛出错误 与try-catch语句相配的还有一个throw操作符,用于

JavaScript高级程序设计学习笔记--面向对象程序设计

工厂模式 虽然Object构造函数或对象字面量都可以用来创建单个对象,但这些方式有个明显的缺点:使用同一个接口创建很多对象,会产生大量的重复代码.为解决这个问题,人们开始使用 工厂模式的一种变体. function createPerson(name,age,job){ var o=new Object(); o.name=name; o.age=age; o.job=job; o.sayName=function(){ alert(this.name); }; return o; } var

JavaScript高级程序设计学习笔记--高级技巧

惰性载入函数 因为浏览器之间行为的差异,多数JavaScript代码包含了大量的if语句,将执行引导到正确的代码中,看看下面来自上一章的createXHR()函数. function createXHR(){ if (typeof XMLHttpRequest != "undefined"){ return new XMLHttpRequest(); } else if (typeof ActiveXObject != "undefined"){ if (typeo

JavaScript高级程序设计学习笔记--DOM

DOM(文档对象模型)是针对HTML和XML文档的一个API(应用程序接口). Document类型 文档的子节点 虽然DOM标准规定Document节点的子节点可以是DocumentType,Element,ProcessingInstruction或Comment,但还有两个内置的访问其子节点的快捷方式.第一个就是documnetElement属性,该属性始终指向HTML页面中的<html>元素.另一个就是通过childNodes列表访问文档元素,但通过documentElement属性则

JavaScript高级程序设计学习笔记--BOM

window对象 BOM的核心对象是window,它表示浏览器的一个实例.在浏览器中,window对象有双重角色,它既是通过JavaScript访问浏览器窗口的一个接口,又是ECMScript规定的Global对象. 全局作用域 由于window对象同时扮演着ECMAScript中Global对象的角色,因此所有在全局作用域中声明的变量.函数都会变成window对象的属性和方法.来看下面的例子: var age=29; function sayAge(){ alert(this.age); }

JavaScript高级程序设计学习笔记--引用类型

Object类型 对象字面量表示法: var person={ name:"Nicholas", age:29, 5:true }; 这人例子会创建一个对象,包含三个属性:name,age和5.但这里的数值属性名会自动转换为字符串. 对象属性的访问:点表示法和方括号语法 alert(person["name"]); // "Nicholas" alert(person.name); // "Nicholas" 从功能上看,这两

javascript 高级程序设计 学习笔记01章 javascript的认知

hello world: 大家早上好 ,所谓一年之计在于春,一日之计在于晨.今天开始学习 高级程序设计第三版 第二遍 以前以迅雷不及掩耳之势草草看过一遍 ,但是什么也没记住 已经忘得差不多了.哈哈,原来我不是黄蓉,也不是天才,还是那句话 好记性不如烂笔头.这次学习高级程序设计第三版 是有目标的,有目的性的.所以我会把 每一章学习的心得和笔记 都记录在此.于己于人都方便.废话不多说 ,开始吧 今天的第一张 ,javascript 的实现.张鑫旭大神说过 非it(计算机专业的)的前端从业人员 学习j

JavaScript高级程序设计---学习笔记(三)

函数表达式 定义函数的方式有两种:一种是函数声明,另一种是函数表达式. 关于函数声明,它的一个重要特征就是函数声明提升,意思是在执行代码之前会先读取函数声明所以可以把函数声明放在调用它的语句后面. 而函数表达式必须在调用它之前定义. 1.递归 递归函数是在一个函数通过名字调用自身的情况下构成的,如: function factorial(num){ if(num <= 1){ return 1; }else{ return num * factorial(num - 1); } } 这是一个经典