00:00
那接下来就是,呃,大家会想到是不是就是训练模型的过程了,对吧,训练营与翼模型啊,我们先把它放在这儿啊,然后训练完了之后我们做什么事情呢?是不是就可以。基于得到的模型是不是就拿到了用户的特征和电影的特征啊,基于影特征就是用户和电影的影特征计算是不是可以计算预测评分啊预测评分。呃,那当然了,这一部分预测评分算完了之后,最后我们可以得到一个用户的推荐列表,对吧?根据评分高低得到一个用户推荐列表,这是我们第二步要做的内容,然后第三步还有一件什么事情呢?是不是我们需要去算一下电影之间的相似度啊,对吧?基于电影影特征计算相似度矩阵,得到电影的相似度列表,当然我们也可以认为这就是一个相似推荐列表,对不对啊,这三步做完之后啊,我们的这个Spark就可以stop了。
01:36
接下来我们就是大家来看一下,就是这个训练模型该怎么训练,大家会想到这里是不是我们的一个核心部分啊,核心代码对吧?呃,我们看看这个核心代码怎么样去处理啊,首先我们先定义一下train data,我们这里的train data就等于是不是应该是RARDD啊啊这里主要就是RARDD要做一个操作,那这里大家需要注意RARDD我们不是已经把它做了这个数据转换吗?哎,当时我们这块没没做的太就是太太,那个就是没把最后一步做完,相当于为什么呢?因为最后我们调用ars算法的时候,它需要的是一个标准的rating类型数据,对不对,那这个rating数据我们是不是还得去把它做一个转换啊,啊,所以这里边我们多一步就是。
02:37
呃,那大家大家会想到我们这里就直接做一个map对吧,做一个map操作可以把每一个元素是不是对应到转换成一个真正的一个RA。这样的一个数据结构啊,那么这个类我们把它引入,大家看,哎,我们引入这个ML lab recommendation下面的这个类。
03:04
好,把它引入进来,里边的内容就是来我们先看一眼这个到底是什么吧,大家看这个这个类是个什么东西啊,样例类对吧,是不是里面就是这么三个元素啊,啊,这就是为什么我们当时要把那个呃时间出来要去掉对不对,所以它里面其实就是一个叫做user,这是一个int类型。一个叫product,又是一个类型,还有一个RA叫double,呃,这是double类型对吧?所以这是不是就是uidd mid对应的score啊,呃,这里其实就是这三个东西啊,好,那么这里多给大家讲讲一点,就是提一句,大家会知道它就是在我们,嗯,它就在我们的m ML lab下边对不对?大家看ML lab下边有一个有一个包啊,叫recommendation,专门针对推荐的一个包,对不对?那这个推荐这个包下面有什么东西呢?
04:03
大家看是不是就是als啊啊,那当然我们还看到还有两个东西,Reading,这是不是就是我们这里定义的这个样例类对吧?然后还有一个matrix factorization model,这是什么呀?矩阵因子模型,大家会想这是不是就是我们说的引语音模型的那个东西啊,所以是在这里定义了类似于我们矩阵分解的这样一个引语音模型,大家看是不是有一个rank。我们前面提到过,As里边的rank是不是就是那个影特征的维度啊,大家看上面啊,Rank rank of the features in this model。Features特征,特征的维度对不对,然后下边大家看到是不是有user features product features。是不是用户特征矩阵,物品特征矩阵啊,哎,所以这是不是就是我们的那个营运模型啊。然后它具体的算法是不是就在这儿,是不是ars这里边啊,所以大家看为什么要给大家讲这个ars,或者说为什么我们这里要用到它,其实就是ML lab里边它的推荐recommendation下边现在保留的就剩就剩这些了。
05:17
呃,这这就是基于这个行为数据做推荐的时候,就是就是拿它来做对不对?当然了,大家说难道说我们做推荐就只能用这个as来做吗?当然不是,那这里是行为数据,如果我们做营语义模型分析的话,就是用这个算法,那别的还有什么东西呢?其实我们可以看到这个ML lab下边是不是东西很多,比方说大家就这么瞄一眼,大家看到有有熟悉的面孔。比如说我们是不是可以看到这里这个叫什么classification classification是不是分类啊,对吧,所以里边诶大家看这个大家熟悉吗?Logistic regression model对逻辑回归模型对不对啊,然后下面这个大家熟悉吗?这个给大家提过一句啊,Naive BA对朴素贝叶斯对吧?这也是可以用来做这个分类的,那下面这里边还有的还有什么呢?啊,这里还有这个呃,Streaming流式的这个处理对吧?下面还有SVM。
06:23
支撑向量积对不对?哎,这些都是做这个分类的一些经典算法,那当然了,大家会看到这里,诶你既然说分类,我们最经典的分类应该是那个KNN啊,哎,就是因为KNN太简单,他认为你这个拿一个距离函数直接算就完了对不对?所以这个就没必要再给你包装成这样的就是算法类了,大家如果感兴趣的话,可以就是把这些东西去去调一调,看看它这个东西怎么用的啊啊,当然这个里边你就得看它的API那个参数到底怎么定义了啊,看一看源码,然后下面还有,诶大家看这个熟悉吗?Cluster这个熟悉吗?Classroom是什么?大家看一开始就有个什么东西,这里面有什么kins kins是什么K均值聚类对不对?所以clustering是我们当时讲过的无监督学习里边的聚类方法对吧?啊,所以大家看这里边就是各种各样的聚类方法啊,大家这个classroomluster tree node,然后这个大家看这个二叉查找的这个camem ins,呃,我们这个下面还有这个LDADA,我们之前给大家讲过是这个,呃呃,影视迪利克克雷分布对吧?啊,所以。
07:39
这个各种各样的东西,其实里边是都有的,然后大家还有一个熟悉的东西给大家看一眼。这个这个大家熟悉吗?Regression对不对啊,这是我们讲过的这个回归监督学习里边的另外一大类,我们当时重点给大家讲过的啊,那大家会想到最基本的应该叫什么?对,是不是linear regression model啊,线性回归最经典的是不是在这里有实现啊?所以另外还有一些比方说这个less of model,我们当时说这个叫什么套索回归对不对?呃,还有一些其他的一些东西,大家如果像这个ranger regression个叫领回归,对吧?大家如果感兴趣的话都可以去看一看。
08:19
呃,像这些东西其实就是如果调库的话,对于我们来说就是知道它API怎么写,是不是直接就搞定了,但是什么样的数据应用什么样的算法,用它来干什么事情,这是我们前面给大家讲的算法里边希望大家能够掌握的一个概念,对吧?诶我们为什么要用用它来做回归呢?为什么要用它来做做分类呢?呃,什么时候做聚类呢?那这些大家应该考虑清楚。即使是里边的这个具体算法大家忘掉的话,我们这里呃调库能能把它搞定,但是大家要想到我们为什么用这个算法,这就是简单的给大家大概看一看,大家看其他的还有很多东西,比方说这个有有tree树结构对不对啊,这里边是不是就有,大家看把这个角色数是不是放到树结构这里来了,树结构这里还有什么呢?是不是还有随机森林啊,呃,这些都都是放在这里边的,所以它是用这种分类方式来做的,呃,好,那么大家这一部分,因为我们不会展开给大家讲这个,也也不会讲这个源码,对吧?然后我们也不涉及到再给大家讲一遍算法的问题,就光是调库的话,其实是没什么意思的,所以大家只要知道这里边有这些内容就可以了啊,当然了,这里我们要用到的主要是这个ars,那ars里边大家如果要是对这个呃,本身它的源码感兴趣,想看它怎么实现的话,可以点进去看,那我们现在主要的时间还不是。
09:47
不是用来做这个对吧,我们先把这一部分先先写完,前面我们是看了这个rating数据,是不是就是u ID m midd score3个数据啊,那其实我们是不是把这三个传进去就完事啊,所以呃,每一个X,哎,那我们是不是就把按照顺序X1 x2 X3传进去转成椎是不是就可以了啊,当然大家看到这里我们稍微有一点啰嗦了啊,是不是在前面直接转完就就没这么复杂了呀,对,所以大家可以把这一步省掉,直接把它放在前面就可以了,我这里边主要是这里是我们的RARDD,这里是我们的training data,对不对?诶这里给大家专门描述一下这个train data。
10:29
好,然后接下来大家会想到我们要去做这个呃,训练了,那训练怎么去训练呢?这一句这个非常简单,我们要得到一个模型,英语一模型model对不对?als.tree一句话搞定对吧?啊,这就是我们之前给大家说过的啊,就是我们学算法的时候学了很久,调库的时候一句搞定,那么这里边我们还是用ML lab里边的这个as对不对?呃,同样的是从这里边去调,那大家看这里报错了,为什么?是不是里边应该有参数啊,大家看里面要传什么呢?诶,一开始第一个参数是不是就是一个,哎,Ratings对吧?R DD rating必须是一个rating rating的RDD对不对?哎,所以我们前面要把它转成RDD啊,那我们这里边的training data塔是不是就完全满足这个条件啊,先把它放进去,然后第二个参数,刚才大家看到了吗?第二个是不是。
11:30
Rank呀,Rank是什么?哎,这就是我们前面给大家说过的那个K,对不对?影特征向量的维度K,我们先把这个rank先放在这儿啊,然后还有第三啊,我们先大家会想到,那前面我们是不是就应该得有一个参数定义啊,比方说这里边有rank,然后后边还有什么呢?IM alive,你去看一眼啊。大家会看到是不是还有ter啊,这是什么啊,迭代次数,哎,大家可能会说as不是那个精确算法吗?怎么也有迭代次数呢?大家记得它是交替最小二乘对不对?那交替最小二乘这个过程是不是还是一个迭代的过程啊,所以你交替我们是固定一个P求一个Q固再反过来固定Q求一个P,这个过程我们是不是相当于也要给它指定一个迭代上限啊,哎,所以。
12:29
这里的ter主要是用作这个事情,好,那大家看到还有一个什么参数啊,Lamda对吧?这个关键参数里边还有一个拉姆DA,拉姆DA是什么呢?对,当然就是正则化系数,所以那后边大家会看到还有这个blocks,还有seed,那大家看这个blocks,呃,那那这个代表的就是说你要把它分解成几个计算计,呃,并行计算单元对不对?然后下边这个CD是什么呢?对,就是random seed for initial metrics啊,Factories model,所以就是说我们盈余模型做这个ars计算的时候,一开始你既然是交替最小二乘,一开始是不是先要固定一个Q算一个P啊,诶,那你一开始怎么拿到最初的这个Q呢?
13:23
大家会想到我们前面说过,你可以自己给指定对不对,更多的应用场景是是不是应该去随机生成啊,那随机生成大家看这里边你就给一个随机随机数种子对吧?呃,然后就可以去随机生成了,当然这里边我们可以不给,即使不给的话啊,它里边应该也有默认值对不对啊,所以它都是随机去选取的,所以我们这里边就直接把那个lada放过来就可不是啊lada。放过来就可以了,那这里边我们就先给一个经验参数吧,比方说前面这个,呃,维度我们给50维啊呃,迭代次数我一开始少一点,因为这个给长了之后,到时候跑跑半天对吧?呃,我就先给五次吧,先看看效果,然后luda,呃这个我可以比方说给一个0.01这样一个系数,大家看后边我是不是就应该有RA,然后ters,然后lada,诶大家看传进去之后是不是就不报错了,那这里边调用的当然它现在这个参数是不是就少一些了啊,就是这个方法对吧?只有这几个参数,呃,我们可以知道,即使是你这里传的参数少,到后边去做train的时候,最后是不是有一个als点数这里啊。
14:43
大家看它会到这里对不对,是不是会到这里来,大家看一眼,那这里边ars.wrong的时候,大家看ars给的参数是不是这个是rank对吧?这个是terration,这个是LA,大家看后面是不是还给了两个参数啊好,我们看一下这个wrong里面它到底有什么东西啊?呃,大家看最后在这个new run里边是不是调用了一个new a.train。
15:12
啊,在这里边去做的一个,这里边是不是该有的东西全有啊,是不是全传进来了,比方说这里边大家会看到最后一列,最后一行是不是还有一个的啊,那这个是什么呢?是不是就是我们大家看基于这个系统时间做的一个随机数种子对不对啊,那所以大家其实知道我们平常用的随机数都是尾随机啊,就是用基于系统时间做一个随机输入种子,然后代入进来就随机生成一串数啊,所以这其实就是ars里边的一个具体的算法,那当然大家如果对它里边的具体的过程感兴趣的话,大家可以把这个源码好好看一看啊,但是这个源码可读性不是那么强,大家如果要是原理已经懂了的话,我觉得也没有必要硬硬啃这个代码对不对啊,大家只要能把它,其实我们把那个原理,大家如果能把那个公式推通的话,这个肯定都是没什么问题的啊好,呃,所以大。
16:13
大家会看到就是尽管我们说这是核心部分,真正关键的是其实是不是就是这么一句搞定了,前面这一句纯叠塔是不是其实我们在上面就可以直接把它做做转换就可以搞定啊,然后这个参数是不是也可以定在前面的配置和这个,哎,我们预设的这个常量里面对不对,所以核心其实就这么一句搞定就没事了。所以就是我们在,但是不代表我们可以不学这个算法,对吧?你要不学的话,你能知道这里面的含义是什么,这个rank是什么意思?呃,完全不知道对不对?呃,那后面为什么要迭代呢?呃,我们也不知道对吧?那后面拉姆达正则化系数又是个什么东西呢?我们可能一点概念都没有,所以前面我们讲那么多理论讲那么多,呃,这个跟算法相关的东西,可能不是说这里边我们要去手写,但是学会那些肯定对我们理解整个的这个过程,理解整个项目有帮助,对吧?好,呃。
我来说两句