当前课程知识点:高级大数据系统 >  Machine Learning System >  Recommendation in Mahout >  Video

返回《高级大数据系统》慕课在线视频课程列表

Video在线视频

Video

返回《高级大数据系统》慕课在线视频列表

Video课程教案、知识点、字幕

刚才介绍了分布式机器学习系统

以及我们介绍了一个recommendation

他最简单的一个实现

因为recommendation是机器学习里面

重要的一种任务

也是今天大量的互联网企业

或者互联网的服务

他们所依赖的一个基础设施

那么现在我们就要去看一下

通过mahout

怎么样从代码的这种层面

去实现一个推荐的策略

那么mahout

在处理推荐的时候

大概可以分成这么几个步骤

首先是我们看一下输入和输出

输入就是原始数据

包含了用户点击

item的记录

或者说是用户给item的

一个评分

那么输出就是我们对于那种

没有评分过没有点击过的

这些记录

他的偏好的一个估计

利用这个估计我们可以对用户

进行内容的推荐

比如说我们把最高分的偏好的

内容推荐用户

那么这4个步骤大概是这样的

一个过程

第一步我们会建立一个这个

数据输入的模型

那么这个模型会把原始的文件

原始的表格

或者原始的数据库的数据源

给导入到我们mahout里面

然后第二步

我们会去加入这个

推荐的这些模块

那么具体来说这里面会定义用户

或者item的之间的similarity

相似度

然后再去做推荐的时候

我们到底参考多大范围的

相同的用户

或者相同的item

也叫做neighbor

这是第二步

我们去定义推荐的模块

那么第三步

我们去计算偏号的这样一个估计

把偏号的估计计算出来

那么第四步

进行推荐性能的一个评测

那注意这个评测并不是用户需要

去进行

而是mahout本身带有的

这样一个评测

帮助我们能够在完成了

一个机器学习算法之后

告诉用户这个机器学习算法

它到底是好还是坏

有多好或者有多坏

好 那我们来看一下这几个步骤

它分别对应的这个接口是什么

那么数据的输入对应的接口

叫做data model

就是说用户通过去实现data model

实际上它是可以

在mahout里面去提供数据

那么data model

今天的mahout实际上支持了

非常丰富的这种data model

就像我刚刚说到它可以来自

分布式文件系统

可以来自于nosql的数据库

可以来自于其他的这种

关系数据库等等

那么user similarity这个interface

这个接口是用来定义用户的

相似度

也就是说用户A和用户B

它到底有多相似

基于这个相似度

我们会去做推荐

然后item similarity定义的是

内容和内容之间的相似度

那么基于这个相似度

我们可以把内容推荐给用户

那么user neighbour

定义了我们在对用户

进行推荐的时候

我们参考了用户周围哪一些

其他的用户

那么所谓的周围指的是和它具有

相似的这个偏好的这些用户

最后是这个

recommender的这个接口

那么recommender的这个接口

实际上会去运行刚刚我们定义的

similarity和neighbour

把这些模块给串联起来

同时会去完成整个推荐算法的

一个evaluation

我们先深入到这个data model

这个interface

我们来看

它到底提供了什么样的一些能力

data model它的作用

是把数据灌给整个

mahout系统

我们来看看

目前实现

在mahout当中实现了这个

data model

包含的这个情况是什么样

首先是基于

data base的

这个data model

它可以把传统的这种关系数据库

mysql

或者是其他的这个数据库

支持标准SQL接口的

这种数据库

把它这个数据给提取出来

然后支持大数据这种数据库类型

nosql

比如说这里面支持了这个

mangoDB

它的这样一个接口

然后可以从外部的文件

直接把数据给读起来

可以从单机的文件

可以从分布式文件系统

把数据load起来

这也是在大数据背景下

被广泛用来存储用户偏好数据

用户行为记录的这样一个

数据模式

当然还有其他用户可以进一步

去自定义的这个接口

叫做generic的这样一个接口

在这种接口底下

用户可以从网络

以任何的这种协议的方式

把数据给读取到

mahout里面去

这是数据接口的一个情况

在数据接口里面

我们需要包含什么样的

这个信息呢

它对应到的就是generic的

这种data model

以及文件保存成CSV的

这样一个格式

以及数据库的这样一个具有

表格模式的这样一个数据形式

这几种数据形式实际上都要求它

具有这样的一个数据的一个属性

和数据的结构

是什么样呢

就是说我们要有

user的ID

要有item的ID

要有它的preference

user的ID

用户的这个编号

我们可以用它来区别

两个不同的用户

那么item id

这个内容的编号

我们可以用它来区分不同的内容

同时还有一个实数

用来表征了用户对item的

一个打分

这是在mahout里面

我们需要的这样一个数据的

输入的样子

这也是我们在大量的系统中

可以得到的这样一个样子

这边给出了一个例子

在这种file data的

data model底下

这个文件会长成什么样子

我们可以看

它的user ID

它的item ID

它的用户的这种打分

所以非常的容易理解

我们可以用这样的方式

把用户之前历史上发生的这种

行为记录

给记录下来

同时这种记录又可以在我们之前

学习的分布式文件系统

或者是hadoop里面

得到有效的存储和处理 生成

好 刚刚说到

我们可以在文件里面把数据给

存成一个表格的形式

CSV的形式

本质上来说

在mahout里面

只要你能够以一个

triple的形式

把user item和score

给存储下来

实际上就不会影响它的计算

所以如果是在其他的

这种数据结构里面

只要你能够通过你自己的

自定义的代码

能够把刚刚说到的三方面的信息

提供出来

实际上mahout

都可以把它作为输入

直接去处理

第二个这个component

就是user的这个similarity

user similarity实际上定义的是

用户和用户在当前这个系统里面

当前这个推荐任务底下

它们的相似度

它们的相似度可以通过

比如说用户之前的这个行为记录

我们可以把它计算出来

我们也可以通过其他额外的信息

比如说我们已经知道这两个用户

在社交网络里面存在着某一种

相似性

我们也许可以把它用到

mahout里

这是相似度可以去做的

但是在典型的这个推荐系统里面

我们通常是不依赖于其他

外部信息

比如说社交媒体里面用户的

这种相似度

我们而是依赖于它的这种

行为记录

也就是说他们在item上的

这个行为记录

通过行为记录

我们大概可以通过以下的一些

距离计算方法

来把用户的相似性给计算出来

包含典型的

比如说pearson这种线性的

这种相关度

然后spearman这种相关系数

以及其他的这个likelihood等等

这种相似性的计算方法

我们在这边给出了一个相似度的

计算的一个例子

那么在这边的这个矩阵中

实际上我们是把item

相似度给算了出来

我们发现相同的内容

它的相似度通常是比较大的

一个值

也符合我们的这种直观的

一个印象

其他的这个0到1之间的数据是

表示两个内容他们之间的

一个相似度

比如说0.507

这样一个相似度

假设我们是通过我们刚刚说到的

一些距离的计算方式来计算的话

它大概是这样发生的

比如说我们用余弦相似度

它的一个计算方法

就是用这个产品A跟产品B

共同的购买人数

除以它们两个产品分别的

购买人数的这样一个平方根

这就是余弦相似度的一个定义

这个相似度它的一个原理就在于

当两个产品他们共同的这个用户

多的话

它的这个值就会更加趋近于一

如果两个产品它们共同的用户

比较少的话

也就是它们交集比较小

他们的这个销售就会趋近于零

我们用这样一个0到1的数值

就表示出了两个产品的相似度

我们把这个方法也可以同样

运用到user上

两个用户

如果他们看过的内容

尽可能多的话

他们的这个相似度接近于一

如果他们看的内容比较少的话

共同的内容比较少的话

它们的相似度就会趋近于零

有了这个

我们就可以定义用户的

一个相似度

有了用户或者item的

相似度之后

我们还有一个mahout的概念

叫做这个user neighborhood

所谓mahout就是说

我在做推荐的时候

我到底参考多大范围

实际上从原理上讲

我们想要参考的是

全网的范围 对吧

比如说我们的系统中

有100万用户

我们在对其中一个用户

进行内容推荐的时候

我们其实是可以参考所有

100万用户

他之前的这种偏好和行为记录

但实际上那样有两个问题

第一是没有必要

因为我们参考这100万

不见得会比我们参考10个人

得到效果更好

第二就是说在做这个真正的

计算和处理的时候

它会带来很大的开销

又没有必要

然后又有很大的开销

所以并不是我们想要选择的

所以我们的一个思路就说我们

能不能只参考一小部分用户

也能得到一个比较好的

推荐的效果

这是neighborhood的作用

在mahout里面

对neighborhood的这个定义

实际上只有两种办法

一种就是去找最相近的N个用户

就是说我每次参考

一定是参考N个用户

这N个用户是和我相似度最近的

N个用户

我们刚刚已经定义了相似度

另外一个

就是说我不一定去找固定数量的

一个用户

而是通过一个阈值去挑选

那我必须要求这些参考的用户

和我的相似度达到多大的一个值

我才能够进行下去

两种方法实际上各有它的好处

如果我们选最近的N个用户

实际上我们可以控制每次这个

N的数量

达到一个相对来说比较稳定的

运行时间

相对比较可控的一个计算规模

但是它的缺点可能我们会把一些

并不是特别相近的人

也给放进去参考

或者说我们没有包含足够多

非常相近的人

它的反向

反过来就是说

如果我们去参考阈值的话

我们可能会没法控制运行的时间

因为预值可能会带来参考

非常量大的这样一个用户集

所以这是两种neighborhood的选择上

可能会需要去做的一个考量

有了这样一个数据

然后有了similarity

又有了neighborhood之后

实际上我们的推荐的框架就已经

可以运行起来了

在我们mahout里面支持的

这个推荐框架

我们刚刚已经反复说过

包含了基于用户的

基于item的

然后基于svn

和基于这个slope-one的

这个cf

这个协同过滤

大家可以根据这个具体

你的任务的一个要求

比如说我们的任务

它的这种相似的偏好非常的明显

并且它具有很好的相关性

同时它的这个参考也比较简单

那我们可以用slope-one

但如果我们的这种相似性

并不是那么明显

或者说我们需要参考

比较多的数据

才能发现这种相似性的话

我们可能会需要选择相对

复杂一些的推荐的引擎

或者推荐的这个算法

那这是

用户在实现的时候

可以具体去尝试的

那么在这张表中

实际上我们给出了mahout

它最初实现的几个算法

它的一些特性

我们简单的可以给大家来看一下

比如说我们用这个

基于用户的这种

generic的基于用户的这个

推荐的引擎的话

实际上它是相对

它是相对规模是比较小的

因为它需要去对这个用户的

similarity

做一个定义同时需要对mahout或者

和它的这种neighborhood做定义

所以当你的范围比较大的时候

你就可能不太容易去决定你的

这些值需要去怎么样去设定

那么再往底下

我们可以看到基于矩阵的

一些方法

那么矩阵的方法也是今天工业界

在验证当中发现它是一个性能

能够得到保障

然后在实际的系统中

运行效率比较高的这样一个方法

那么它的这个问题就是说我们

需要一定的这种预处理

比如说我们需要对矩阵

进行一定的预处理

尤其是当你的这种

用户数和内容数

呈现一定的吸收度

或者说它的这个长宽有一定的

这个形状的时候

我们需要做这种特定的预处理

还有knn的方法

也就是说我们参考最近的

这N用户

那么它的这种knn的方法

那么同样它也有一些这种

scalabity上的

这种局限性

总之大家会根据自己的这个

具体的任务

你做的是什么样的推荐

或者你做的是什么样的预测

来选择你的这个推荐引擎

甚至你也可以同时运行多个

推荐引擎

来比较它们的优劣

那么我们把整个系统

运行起来之后

我们需要去进行evaluation

我们需要去评测

它到底是好还是坏

那么在mahout里面

和其他机器学习的

这种评测是对应

它也提供了基于这个

prediction的这种

这个评测的一个结果

和基于这种信息检索

information retrieval的这种评测的结果

那么在这里面主要是对预测结果

或者推荐结果的准确性

进行一个评估

包含了这个mae的

这样一个指标

或者是rmse这样的一个

错误率的一个指标

那么它本质上是去比较我推荐

或者我估计出来的

这样一个偏好的一个评分值

和真实的评分值

它们之间的这个差

而还有一种方法

就是我通过信息检索

这样一个评测方法

那他在里面关心的是我分类

到底对还是不对

比如说我推荐了一个item

到底用户后面有没有点击它

那是通过这样的办法

它对应的指标

包含了prediction

和recall

这部分如果大家想要去

详细了解的话

我们推荐大家去读一些

和数据挖掘和模式识别相关的

这个书籍

然后了解一下这两种评分方法

对于你的系统是不是合适

或者说你需要更加个性化

比如说对rank进行排序

排序之后又要同时结合一些

评分方法

那么我们在这个最后

给到了一个参考的这样一个代码

实际上

这个代码这这段伪代码是

在mahout里面

大家如果去实现

一个推荐系统的话

可以参考的这样一个原形

我们来看

那么首先

我们第一步

构建data model

那么data model呢

我们是从一个这个文件里面

获得了user item

和评分的这样一个数据

然后我们构建了用户的

这个similarity

使用了皮尔森的这种评分方式

他们会对用户在item上的

这样一个评分

进行一个线性相关系数的

这样一个计算

那么也是一样的接近于零

说明两个用户不太相似

接近于一

说明两个用户高度相似

然后我们定义了neighborhood

我们使用了一个

threshold的方式

当两个用户

他的similarity

超过0.1的时候

我们认为是可以去参考的用户

使用了这样一个neighborhood

那么这时候我们有了用户

可以参考

我们有了这个新用户点击的内容

我们就可以做推荐

那么在推荐的引擎里面

使用的是一个genericBasedRecommendation

然后使用了刚刚提到的neighborhood

和这个similarity

那么后面我们可以对内容

进行推荐

当然在这一步推荐

正式进行推荐之前

我们还需要对整个推进系统

它的这个性能进行evaluation

大家可以选择刚刚提到的这个

基于正确率

或者是基于它的这种分类的

准确度的这样一个验证的方法

那么我们下面给大家看一段视频

让大家了解一下

mahout它在真实系统中

应用的时候一个情况

高级大数据系统课程列表:

Introduction to Big Data Systems

-What is big data and what is big data system?

--Video

-Problems in big data systems?

--Video

-Overview of the course

--Video

-Principles of big data system design

--Video

Basics of Linux Data Processing

-Manipulating Data on Linux

--Video

--Video

--Video

-Basics of Linux Data Processing--Manipulating Data

-Running Commands on a Single Machine

--Video

-Running Commands on a Single Machine--作业

-Using a Linux Cluster

--Video

-Using a Linux Cluster--作业

Distributed File System

-Storage for Big Data Computing: Distributed file system

--Video

-Storage for Big Data Computing: Distributed file system--作业

-File system and GFS

--Video

-File system and GFS--作业

-Understanding HDFS using Legos

--Video

-Understanding HDFS using Legos--作业

-File System Implementation and DFS

--Video

--Video

-File System Implementation and DFS--作业

MapReduce

-What is MapReduce and why

--Video

-What is MapReduce and why

-Learn MapReduce by playing with cards

--Video

-Processing pattern

--Video

-Processing pattern--作业

-Hadoop

--Video

-Hadoop--作业

-Algorithms in MapReduce

--Video

-Algorithms in MapReduce--作业

-Tutorial

--Video

In-memory Processing

-Background

--Video

-Background--作业

-Spark

--Video

-Spark--作业

-Use Spark for data mining

--Video

-Use Spark for data mining--作业

-Spark data processing

--Video

-Spark data processing--作业

-Experiment in Spark

--Video

-Experiment in Spark--作业

Streaming Data Processing

-Introduction to streaming data processing

--Video

-Introduction to streaming data processing--作业

-Storm

--Video

--Video

--Video

-Storm--作业

-Spark streaming

--Video

--Video

-Spark streaming--作业

NoSQL

-NoSQL introduction

--Video

-NoSQL introduction--作业

-Common Advantages

--Video

-Common Advantages--作业

-Bigtable

--Video

-Bigtable--作业

-Master Startup

--Video

-Master Startup--作业

-HBase

--Video

-HBase--作业

Graph Processing

-What is GraphDB and Graph data processing

--Video

-What is GraphDB and Graph data processing--作业

-Graph systems

--Video

-Graph systems

-Example of a GraphDB

--Video

-Example of a GraphDB--作业

Machine Learning System

-Mahout

--Video

-Mahout--作业

-Case Study: Recommendation

--Video

-Case Study: Recommendatio作业

-Recommendation in Mahout

--Video

-Recommendation in Mahout--作业

Video笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。