首页 > 其他分享 >七月在线公开课笔记-十一-

七月在线公开课笔记-十一-

时间:2024-10-23 18:33:50浏览次数:1  
标签:这个 在线 一个 模型 笔记 公开课 然后 我们 就是

七月在线公开课笔记(十一)

1447-七月在线-机器学习集训营15期 - P14:7-决策树、Boosting模型融合的精髓速讲 - 程序员技术手札 - BV1ASste6EuZ

那这样的话我们就准备开始啊,这个呃按照我们的计划啊,今天呢我们需要讨论的模型呢是决策树模型,通过我们这张图啊,可以看到决策树模型的位置啊,在这个位置上嗯,它是一大类哈,非常重要的这个机器学习的模型。

以数结构啊为这个模型的这种主要结构呃,其中这个决策树的这种嗯算法还有很多啊,比如说今天我们会介绍到,比如像D3C4。5和cut数这三类角色数,那么在此基础上,通过这张图我们也可以看到呃。

通过今天我们关于决策树的介绍呢,其实还有另外一个内容就是关于继承学习boosting,可能哈,一开始会有些同学觉得比较莫名其妙是吧,讲学的书为什么要把boosting放到一块,那么很显然是因为啊。

我们可以通过在决策树上使用集成方法构造哈,另一种所谓的集成决策树模型就是BDT模型,然后呢我们以此作为向前推进的一个基础,在推进到GBDT以及哈看一下课表里面。

我们会介绍到这个charge boost啊,这是我们最核心的一个内容之一啊,最核心的内容之一,这也是啊,就是我们为什么要介绍这张图的原因之一啊,通过这种方式让大家可以看到,我们一直往前序啊。

它的基础是我们今天的这三个基本的数模型,好吧啊,那么在讲决策树之前呢,我们看一类问题啊,结合了我们上一次课讲的内容,因为我上一次课啊,重点介绍的是我们积极学习的,一些基本的术语和概念。

这些内容啊会贯穿于我们整个的课程啊,所以呢我们一块来简单的做个回顾哈,首先我们看一下这张表啊,这是我们从上次介绍到的一张数据表,当然内容发生了明显的变化,那我们看一下这张表,首先我们昨天讲到过啊。

表格里面竖着的一列,我们把它称之为是属性是吧,我们看一下当前这张表格里面有哪些属性,包括年龄属性啊,有工作与否的属性,有没有自己的住房的属性,以及信贷情况的属性啊,这是12344类属性。

那么还有一列呢是非常特殊,它表明了哈我们当前这一章数据,表格当中所记录的数据的一些非常重要的,决定性的或者结果性的因素,比如说这里有个类别啊,这里有俯视的一个取值,那么在我们上一次讲到的学生表里面。

那么有一列称之为是是否为三好学生,那么一列作为我们的标记列是吧,那么在这张表格里面呢,我们拿到的这张数据表,是银行在进行放贷的时候,对我们贷款人的一个资质的考察,的这么一张数据表,那么很显然。

刚才我们可以看到银行会根据贷款人的年龄,是否有工作,是否有房屋以及他的信贷情况来综合决定,我是不是把当前这笔款贷给你,那么结论就是yes和NO啊,这是我们拿到的属性以及标记列,那么我们上次也讲到了。

那么相对应的每一横行,那么记录的成N为一条记录啊,记录的呢就是我们当前这个实体啊,当前这个贷款人在各个属性上的取值,以及它所对应的什么对应的这个标记的情况,比如说当前这个0号啊。

0号它是一个青年没有工作,没有住房信贷情况一般啊,他的结论呢就是否啊,就银行不对他进行放贷,那我们再举一个例子,比如说青年有工作,没有房屋信贷情况是好,所以银行决定向他进行贷款好了。

那么数据上就摆在这个地方,那我们要做的工作是什么,我们做的工作是基于这张表格啊,训练一个模型来进行判断,当有一个新的贷款申请来的时候,我根据新的申请人的这种基本情况啊,来判断我是否对他进行一个放贷。

这就是我们这张数据表格的一个呃数据,所反映的情况以及它的作用,当然我们在呃上次讲课的时候讲到过,以当前这个数据表格为例的话,我们完全可以采用什么模型,还有没有同学有印象,可以通过标记哈。

我们可以看到这个标记里面的取值是是和否啊,适合否,很显然是离散的标记值,我们前面讲到过离散标记值的时候,我们需要进一步的进行一个判断啊,离散标记值的取值的个数,很显然它只能取十个否。

那么我们可以做个判断,就当前这张数据表构建,是一个所谓的二分类问题,二分类问题,两个分类是吧,两个取值的分类问题,那么我们其实可以通过咱们上一次课讲到的,那个什么讲的那个逻辑回归,逻辑回归模型来解决。

当前这个解决当前的问题是吧,没问题,那么我们采用另外一种方式啊,采用另外一种方式来对这个问题加一加以考虑,什么方式呢,就当我们拿到这四个特征的时候啊,就年龄有工作,有房屋和信贷情况。

如果你作为一个银行家啊,当你拿到这张数据表格的时候,如果你要对这四个特征加以这个,重要性的一个排序的话,你会认为我要对当前这个放贷款人进行放贷,你最希望考虑的是哪一个因素啊,你考虑的是年龄因素。

是否有工作,是否有房屋还是信贷情况,那么你认为这四个因素里面哪个最重要,可能会有不同的意见,看看大家的选择,那我先说一下我的认识啊,如果我是作为银行放贷的话,我最希望考虑的当然是我的这个放贷资金的。

这种安全性是吧,就是它的风险是不是可控,那既然考虑到风险呢,我去看一下年龄,有工作和有有房屋和信贷,哪一个特征的取值,会对我的这种风险的降低带来决定性的因素,那么我一般会认为这个房屋是最重要的。

当然这仅仅是我的个人观点啊,就因为他有房屋,有一个资产是吧,大不了我放贷收不回来的时候,我可以把他的房屋进行一个强制拍卖啊,就可以保证我的这个呃资金的一个安全性,这是一种考虑。

那么当然嗯有同学说他的现在情况,对他的历史记录会影响到我对他的一个决策,对吧,嗯如果考虑有的说是有工作,因为他有工作,他也可以持续的进行还款是吧,其实年龄因素呢也是一个非常重要的,那么基于以上四个方面。

你会发现根据不同的人啊,或者根据不同的视角,我们会认为这些特征有一个啊,有一个重要性的一个排序的结果对吧,嗯不同的人当然有不同的一个排序,结果他会首先比如说啊,首先他有一种一种选择是。

比如说我先根据他是否有房子,因为房子这个东西,现在来看还是比较保值的是吧,判断一下是不是有房子,如果你有房子和没房子两种情况,我的处理意见肯定是不一样的,如果你是没房子,那不好意思。

我直接就不贷款给你对吧,那即使你是有房子呢,我也非常小心,我再去看一下你是不是有工作,也就是说你这个房子,因为我们知道房子也分很多种情况,地段啊对吧,年限呀,嗯这个是不是学区房啊。

都会影响这个房屋的这个价值,所以我再看看你是不是有持续的还款能力,你的工作是不是稳定对吧,如果你爱你,你没有工作,那这时候即使有房子,我也我也不带给你,我继续再往下看。

那你有工作还需要看一下你的信贷情况,你的信用是不是良好对吧,你有房子要工作,但是呃贷款这种信诚信记录非常不差,那我很显然也也也也也不带给你,那么再往下我看看你的年龄,当然你会发现哈。

当我进行这样的一种特征或者,属性的排序的时候,我自然会认为房屋的这个这个重要性,要大于工作的重要性,要大于信贷情况的重要性,以及大于年龄的重要性,那么当你换另外一个视角,或者换另外一个这个呃银行的时候。

可能它的排序就会是另外一种规则,那好了,回到我们现在这个问题当中的讨论来,你会发现当我们有了这个数据表格以后,我们是可以通过这张数据表格,构建一个置顶向下的,这么一种基于重要性排序的一个模型。

来对我们的结果加以分析,当我们再有一个人啊,申请人来了以后,根据他的房子,工作诚信以及年龄就可以进行放贷了,当然不同的银行可能会有不同的结果,那基于这种按照我们特征重要性进行排序。

并且依次对特征加特征的情况加以考察,来决定当前一个结果的这种模型呢,我们一般把它称之为数模型或者叫决策树模型,因为它为我们的决策提供了一种依据,而它最终的形成的就是一种啊,一种树的一种结构啊。

当然这棵树啊是倒着长的是吧,这是根,然后向下,这最终是叶子节点啊,最终是叶子节点,所以说啊通过以上的这个啊小例子哈,我们可以看到今天这一类模型呢它的特点啊,它的特点第一点解决的啊,解决的问题啊。

呃可以解决分类问题啊,决策树模型啊,决策树模型一开始的时候,它主要解决的是分类问题,当然我们在分类决策树的基础上对它加以改进,也可以使它来完成所谓的回归问题,一会儿后面我们会介绍怎么去改进啊。

也就是说你先知道决策树模型,基本上我们可以做回归来做分类啊,这是没问题,回归需要稍加改造,这是第一点,第二点他需要对我们的特征来加以排序,来决定我们决策过程当中的一个顺序,就是先对谁进行判断啊。

在刚才例子里面,一种情况是先对房子是不是有住房来加以判断,然后再看另外一种特征,再看一特征,再看一个特征,你会发现它是一次对诸个特征有一个判断的,一个顺序啊,判断的一个依次进行判断啊。

这实际上决策树模型非常重要的两个这个特点,一个就是他做分类问题,另外一个呢需要对特征加以排序啊,或者说特征进行一个顺序性的一个考察,那么这个时候呢就碰到了总结出来就用三步,哪三步呢。

第一步也是非常重要的,既然我们需要对我们的特征加以排序啊,需要有一个谁比谁更好的一个问题,那这个时候,第一个问题就是所谓的特征选择的问题,那为什么你你要把这个住房啊放到第一位啊。

为什么你要把这个有工作放到第一位,为什么你要把这个是不是有这个信贷情况,放到第一位,你需要对特征加以选择,你需要有一个依据啊,这就是第一步,一旦有了这个特征的选择依据以后,那么第二步的决策树的生成。

我觉得就相当的呃自然了,为什么这么说呢,当我们有了绝特征的选择依据呢,按照这个特征的选择,我们把重要的特征往前放,先对它加以考察,然后依次再把剩下的特征依次向下排序,也就构成了当前所谓的决策树模型啊。

这第一个问题啊,顺带着有了以后,第二个问题也就解决了,那第三个问题呢,嗯是需要对我们的决策树进行一个修剪,或者叫做减脂,为什么要这样做,因为上一次课的时候,我们也讲到了。

就是说我当我们进行这个模型生成以后,会发现某些模型会出现所谓的什么现象,过拟合现象是因为当前这个模型太复杂了,我们不得不在模型生成的过程当中,对当前这个模型加以控制,使得它不那么的复杂对吧。

来减少或者避免所谓的过拟合现象,所以说以上三部分啊,三个步骤就是我们在决策树模型当中,非常重要的三步,第一步特征选择,第二步决策树的生成,第三步决策树的修剪,那我们依次啊把这三部分别来进行介绍。

那第一步就是作为特征选择,所谓的特征选择啊,在于选取对于训练数据集具有分类能力的特征,刚才哈大家可以看到了,不同的人对特征的重要性,其实意见是不统一的是吧,根据你不同的生活的经历对吧。

你的认知判断是不一样的,那这个时候我们需要定义一个,大家都能够接受的啊,或者大家都能够普遍理解的这么一个重要性,排序的一个依据,那什么呢,就下面给出一个数学项,数学上的一个工具叫做信息增益。

那么这个概念之前呢需要补充一个基础内容,就是所谓的熵的概念上非常重要,商,呃熵这个概念呢源自于这个热力学第二定律,当然今天我们不是讲物理,那么这个概念呢引入到了信息论当中。

用来表示随机变量的不确定性的一个度量啊,再重复一遍啊,熵这个概念啊,商这个量在信息学里面或者信息论里面,它表示的是随机变量不确定性的一个度量啊,不确定性越大,这个熵就越大,不确定性越小,这个熵就越小啊。

就这么一个物理量,那么它的定义形式是这么来说的,假设X是一个具有有限个值的离散随机变量,X啊是一个具有有限个值的离散随机变量,那么它的概率呢被定义为P,X等于XI的时候的概率值为pi啊,这个时候呢。

我会引出今天这个就是我们课程当中啊,另外一个问题啊,就是我们怎么样去理解一些,数学公式和数学符号的问题啊,那么怎么去理解这里的X这个,离散值的随机变量,那么又怎么去理解,当这个X等于小X的时候。

它的概率等于pi这个含义,这个时候啊,我们可以找一些我们实际生活当中,可参考的一些实例加以一个对应说明啊,比如说现在这个X,你可以把它想象成是一枚骰子啊,一枚具有六个面的骰子,每一个面都有相应的点数。

那么既然是一枚骰子,我们知道抛骰子可能会出现六种不同的情况,根据它的点数的不同来加以区别,那这个时候的小X所对应的就是,每一点朝上的一种情况,我们知道掷骰子吗是吧,你随便一扔六个六个面。

不一定哪个面随机的朝上,那么朝上的那一面的骰子的点数就被定义为xi,那么这个地方的X等于XY,很显然就被我们的实际情况和一种对应,就是我们随机进行骰子,扔出去还扔色子,它等于某一面朝上啊。

就被定义为X等于xi,那这个时候的P代表的是出现当前这种情况的,概率值是多少,我们知道哈,一般的情况,因为正经的骰子是不是叫正经骰子,就是我抛之前那六个面啊,我知道他没有经过任何的处理。

那每一个面朝上的概率都相同,那这个时候它被扔出去之后,所产生的某一面朝上的概率,就被定义为X等于XIPX等于XI,那它等于多少呢,在刚才扔骰子那个例子里面,很显然等于多少,1/6对吧,1/6。

但是呢这是在刚才说过啊,这是在六面每一面朝上的概率相等的情况下,它等于1/6,往往我们也知道,很多的时候嗯会对骰子做一些手脚,使得某些点数出现的概率增大,某些点数出现的概率减小。

那这个时候很显然就这里的pi,那对应的每一个骰子,每一个朝上的那种情况不同的时候,那个概率值可能就会发生变化,对吧,这是所以说你会发现看到这一条数学公式以后,你反应过来的就应该是X是一个随机变量。

它可以取很多的随机值,那么取这个随机值的时候啊,所以取得这个随机值的时候,所对应的那个概率我们用PX等于X来表示,那么这个随机值是多少或者概率值是多少,那么对应对应到式子里面。

就是pi小pi来加以表示啊,这就是所谓的这个随机变量X的概率,分布的问题啊,没问题啊,那么有了随机变量X的概率分布以后,我们定义随机变量X的商,那既然是个随机,那既然是个随机变量,那它就有不确定性对吧。

因为随机变量嘛,它可以在它的取值范围当中任意取值,那它就有不确定性,那么这个不确定性啊,随机变量X的不确定性就用他的商来进行度量,那怎么度量呢,看下面HX随机变量X的商用HX来表示。

也可以用hp来表示啊,这个都可以是形式上的一种变化,那具体的等于什么,具体的等于负的SUMI从一到N,这里的N对应的就是当前这个随机变量,可取的啊,所有的取值情况啊,所有的可能取值情况。

如果是刚才那个那个那个骰子的话,那这里的N就等于什么,N就等于六对吧,N就等于六,那么求和公式里面是pi每一种啊,每一种情况的概率乘以log,pi进行一个累加去赋值,用来表示当前随机变量的商啊。

它的不确定性,那至于这个公式是怎么来的,是在我们的信息论里面有讨论,有兴趣的同学可以去自己看一下,我们今天在这里就不进行推导了啊,你就知道随机变量X,它的商就用后面这个公式来计算。

其中求和的范围是从一到所有的随机变量,可能的取值,然后求和公式里面的P取值为相对应的,每一种情况的概率值,后面是log pi啊,这是它的熵的一个定义,那么商的定义有了商的定义以后呢,我们需要分析一下。

这个商到底是一种什么样的情况,然后呢通过下面的推导啊,我们可以看到这个商的取值范围非常有意思,我们画这么一个坐标系啊,横轴呢是这个呃零到P纵轴呢是零到hp,那么我们知道一个概率的取值范围。

无非就是从10对吧,因为概率的取值嘛,我们只是概率规定就是从01,然后呢这个它的最大值呢我们可以计算出来啊,是logo啊,log我们假设最大值log在这,那么这个时候呢我们可以绘制出哈。

可以绘制出一个曲线,就是关于hp的曲线,大体上是等于这样一种情况啊,大体上等于这么一种情况,那么下面就有一个问题,什么问题呢,我们看看他为什么要长这样啊,为什么是这种状态好吧,那好了,你看一下啊。

取零和一,刚才我们这个例子里面是抛色子,骰子有六个面啊,不太好分析,我们同样把骰子换成硬币啊,硬币就只有两个面了是吧,硬币就只有两个面了,那么如果我们考察一枚硬币的话。

你会发现它无非就是正面朝上或者反面朝上,那么问一下大家,当我们有一枚硬币啊,当我没硬,有一枚硬币,普通硬币随机向外扔的时候,只有两种情况,正面和反面朝上,那这个时候每一面朝上的概率。

大约应该是1/2是吧,大约应该是1/2,但是如果我有这么一枚非常特殊的硬币,什么硬币呢,就这枚硬币它怎么扔,总是正面朝上,怎么扔,总是正正面朝上,那大家想一下这两种情况,不同的硬币他们的商谁大谁小。

哪两种硬币啊,第一种硬币随机扔啊,扔出去以后随机出现正反面,另外一枚硬币呢扔出去以后,每次扔都是正面朝上,那么这个地方如果我们用套用这个熵值,我们不需要进行计算啊,我们不去计算呃,主观的去判断一下。

我们也可以知道,那每每一面都是正面朝上的那枚硬币的商,不要忘了,商是来度量混乱或者度量不确定性的一个值,那么既然它每一面朝上,每一面都是正面朝上,很显然它的熵值应该是最小的啊,商是用来度量不确定性的。

既然你每一面总是正面朝上,那它就是确定的值,所以它的熵值就是零,同样如果这枚骰子或或者这枚硬币怎么扔,都是反面朝上,同样他也是确定的,所以它的伤值也为零,那么这个时候看中间这个值,什么值。

当这枚硬币扔出去以后,我事先是不知道正面还是反面朝上的时候,那这个时候很显然它的不确定性是最大的对吧,你不知道扔出去以后,你才知道扔之前你是完全不知道的,所以这个时候他去到一个最大值啊,商的最大值。

所以说啊我们可以看到这个图总比公式哈,容易理解啊,当我们进行这个随机变量计算的过程当中,你会发现怎么去理解商它是不确定性的,度量好不确定性,什么叫不确定性,就是你扔出去之前对他的认识是怎么样的。

如果这枚硬币你百分之百的可以肯定扔出去,总是正面朝上的,伤值一定是零确定性的,如果你扔之前什么都不对,他完全不了解,那这个时候的熵值就是最大值好了,这是关于熵值的一个介绍哈。

那商还不是最有用的一个这个呃概念,我们下面会介绍另外一个概念,称之为条件上啊,条件上什么叫条件上,我们首先看一下,假设随机变量X和Y两个随机变量了,两个随机变量,他们有联合概率分布啊,有联合概率分布啊。

我们先不管它的联合概率分布值是多少,也就是说意味着这两个随机变量,它们彼此之间是有关联的,那么看下面我们定义这两个随机变量,它的什么随机变量X给定条件之下,随机变量Y的一个所谓的条件上,条件上注意啊。

条件上讲的是两个随机变量,并且是在其中的一个随机变量,X被以知的条件之下,另外一个随机变量的商啊被称之为条件上,它的定义是下面这个形式,SUMI从一到N还是你随机变量可能取值,在各种情况。

然后呢是pi乘以一个三,X等于XI被确定以后,Y的条件上的和pi的里程的一个结果的累加,这就是所谓的条件上呃,条件上是个什么东西啊,首先我们还是举个例子啊,还是举一个例子,你是两个随机变量啊。

你是两个随机变量,是其中的一个随机变量被取,当然因为这两个随机变量是是可以构建,联合概率的,所以这两个随机变量很显然是有关联的,还是有关系的是吧,其中的一个随机变量被确定了以后。

另外一个随机变量的商称之为是条件上啊,举个例子啊,还是那样,比如说迎面走来两个人啊,迎面走过来两个人,你对这两个人完全不认识啊,从来没见过这两个人,那当然你对当前这两个人的不确定性,是非常大的啊。

所以说你会发现这个时候嗯,伤是最大的一种情况,就是两个人你完全不认识是吧,换一种情况,比如说迎面过来两个人,其中一个人你完全不认识啊,你不认识他,第一次见啊,平生第一次见,但是呢你会发现另外一个人啊。

和他紧挨着一块过来的,另外一个人是你的朋友啊,是你的好朋友,铁哥们儿,那这个时候你是不是就天然的,对另外一个人的这种认识就应该是加深了,而加深了这个原因,就是因为两个随机变量当中的另外一个。

你对它是了解的,这就解释了条件上的一个一个一个一个,理解方向,就是你怎么去理解条件上,条件上是在两个有关联的随机变量当中的,其中一个被确定的条件之下,对另外一个随机变量的不确定性的一个度量啊。

这被称之为是条件上,好吧好了,回过头来看一下手头上有两个工具了,一个工具啊,是商商呢度量是一个随机变量的不确定性啊,就是这个这个你就可以认为对面来了一个人啊,陌生人你对他来说完全没概念是吧,然后呢。

哎条件上说的是,迎面过来两个人当中有一个你认识还很熟,那么这个时候呢就被称之为条件上好了,下面变一个魔术,那么大家想一下,由熵值和条件商他们的差值得到的这个结果啊,差值得到的这个结果。

你认为是一个什么样的含义,一个好像是随机变量,就还是那个人啊,第一次来的时候是个陌生人,你完全不认识他啊,就他一个人来了,又走了一会儿呢,哎他和你的朋友一块来了,那这个时候你是不是天生的。

应该对他的判断发生了变化对吧,第一次来的时候,他就是个陌生人嘛,我根本不认识他啊,可能下辈子不见了,那么第二次来的时候,唉他和我哥们一块儿过来的诶,这人嗯,我就应该对它有一个重新的认识和判断是吧。

他八成应该问题不大对吧,那再举个例子啊,比如说啊,比如说这个什么哎你对这个人啊,这个这个这个人完全不了解是吧,第一次见不认识啊,但是呢你发现突然发现哎,这哥们和特朗普是朋友,完了啊。

这这人也也也靠谱不到哪去是吧,他居然和和川普是朋友对吧,也就是说哈当我们发现啊,当我们发现随机变量被另外一个随机变量,确定以后所带来的这个熵值以后,你会发现由原熵值减去这个所谓的条件熵值。

是不是就是因为这个随机变量X的确定以后,所带来的信息的确定性的那一部分,我再重复一遍啊,熵是用来确度量不确定性的啊,一个随机变量的不确定性放在这个地方啊,就是这个单独这个随机变量的不确定性,就放在这。

另外一个呢是在两个随机变量当中的,其中一个被确定以后,随机变量的不确定性的一个度量,那么我们很就直观的会得到这么一个结论,当另外一个随机变量被确定以后啊,随机变量的熵的值应该要比啊。

单独的一个随机变量的熵值要小,因为它毕竟是确定了一些信息,它的不确定性减少了一部分,那这个时候减少了多少,我们就用元随机变量的熵值减去一个条件熵值,那这个时候的这个差值。

就是由这个被确定以后的随机变量啊,它所带来的信息的增加,那这被称之为信息增益,信息增益,这是一个非常重要的概念,看下面那么特征的信息增益啊,我们拿到数据集以后,有若干个特征或者若干个属性。

就像刚才我们那张表格里面是吧,我们有ABCD啊,有若干个属性,那这ABCD若干个属性,对于当前这个数据表格T来说,它所带来的信息有多少,我们用信息增益这个量来加以度量。

那所谓的特征A对训练数据集D的信息增益,就下面这个我们用JDA来表示,其中它的值是先计算整个数据表的熵值啊,先拿到整个数据表,我先计算一下熵值,用整个数据表的熵值减去数据表格当中的。

A这个特征被确定以后,数据表的条件上啊,这是第二部分,然后呢做一个差值,那这个时候就像刚才我们所举的那个例子一样,那这个差值的大小就是由这个特征,A被确定了以后来带来的信息量的一个改变。

我们把它称之为信息的增益,那么当然我们可以计算GDA,同样我们可以计算GDB对吧,B这个特征同样我们还可以计算GDCGDD,当然这里的D不太一样吧,一个是数据表,另外一个特征,有了这些计算结果以后。

我们只需要怎么样,刚才我们回到刚才特征选择那个问题里面,特征选择告诉我们,我们需要确定的是特征的一个排序规则,哪个特征最重要,哪一个特征最重要,我只需要考察一下这个特征。

为当前数据表所带来的信息增益的大小,就可以了,你带来的信息增益大,那你的特征最重要,你的你的信息增益小,你的特征就往后排,所以根据信息增益的大小,我们就可以决定我们特征的重要性,有了特征的重要性以后。

就像刚才那个例子里面,你就可以拿着那个特征,重要性最大的就是信息增益最大的那个特征,作为我的第一个特征选择,然后再用第二个,第三个,第四个依次向下,那么我的决策树是不是也就构建出来了啊。

这就是哈第一个问题,关于特征选择的问题啊,特别是关于这个啊这个这个概念的理解好吧,就是具体的计算,一会我们会给出具体的计算方法,关于这个概念的理解,我希望大家能够现在还能够掌握一下好吧。

信息增益等于熵减去条件熵,熵值是整个数据表上的不确定性,条件熵是在一个特征被确定以后,数据表的不确定性,那差值就是由这个特征所带来的信息的变化,这个信息的变化量称之为是信息增益,如果没有问题的话。

我们就继续往下,那么这个信息增益呢,我们需要把它计算出来对吧,你需要给出一个计算逻辑啊,把这个信息增益计算出来,那么很显然这个信息增益的计算就分三步啊,把大象放冰箱,分几步也分三步,开开冰箱门。

把大象塞进去,关上冰箱门是吧,信息增益的计算也是分三步,哪三步,第一步计算信息计算商啊,计算数据一地的商,第二步计算条件上,第三步算差值就完了,那么很显然我们把它拆成三步,第一步计算商。

第二步计算条件上,第三步算信息增值,那么看下商品谁的商,数据表格D的商啊,数据表格D的商,第二步条件上谁的条件上特征ab确定以后,数据表的条件上啊,数据表的条件上,第三步做差法做做做。

做差值就没什么太大问题了好吧,那么为了计算这三个量,我们需要引入一些符号,这些符号呢可能嗯需要仔细的去分析一下好吧,需要仔细的去分析一下,看第一个我们假设数据集为D啊,数据集为D,这个没什么可说的。

数据及D的模啊,数据及D的模表示为其样本的容量,就是样本的个数啊,就是有多少条记录,有多少条记录,我们加上两个杠啊,它的模来表示,那么看下面是K个类别K啊,注意既然是K的类别CK我问一下,这是对谁说的。

是对我们的标记那一列,他说的是吧,以刚才那个数据表格为例,信贷表格里面我们知道是否放贷,是我们的标记列,那里面有几个类别,有两个类别啊,当然如果是多分类的话,就有多个类别,所以这个地方假设是有K个类别。

是有大K个类别,那么每一个类别呢我们用K来表示啊,在刚才那个例子里面,K等于一,K等于二,因为分两个类别是吧,那么下面看下面,那么CK的绝对值啊,CK的绝对值用来表示属于类别,CK的样本的个数。

我们刚才例子里面有两类啊,Yes or no,贷款还是不贷款,那么很显然这两类啊,每一类元素的个数,我都可以用C1的元素的个数,和C2元素的个数来分别表示两个不同的类别,那看下面。

如果SUK从一到大K啊,那么CK的绝对值就应该等于D,这是显而易见的,因为我们知道我们的标记一共就分两类啊,Yes or no,那如果我们把这两类啊,把根据类别标签分的这两种,不同的类别的元素进行相加。

那么相加之后的结果一定是,等于整个数据表的元素的个数,这是我的表,我们现在只讨论那个标记那一列啊,标记那一列,标记这一列里面有yes,有NO对吧,标记里面有yes有NO,我把零的元素找出来。

加一块再把一的元素找出来加一块,然后再把零和一的加起来找出来加一块,是不是还是就是整个数据表的整个的元素个数,对吧,所以说啊这个式子说的是sum k从一到大K,然后4K的绝对值啊。

或者CK的模就等于D的模好吧,看下面假设特征A注意啊,现在我们的视角放到了特征A上去了,就是那个特征A,在特征A当中有N个不同的特征取值,注意啊,这是那个特征A有N个不同的特征取值,还是要举一个例子。

按照刚才我们所说的,假设这个A2是等于年龄好吧,为什么是选这个年龄这个特征呢,是因为刚才那个例子里面年龄分了青年,老年和中年啊,所以它的取值比较多一些哈,丰富一些,那么很显然它的取值A1就等于青年。

A2就等于中年A3就等于什么老年,所以它是一个A1A2A三的这么一个特征A,那么我们也可以根据A这个特征,将数据及D划分为N个子集对吧,刚才所说的青年青年,青年中年中年中年老年老年老年,那么很显然。

我可以通过特征A也把整个数据集,分成了若干个子集,那么其中DI表示的就是我们每一个取值,所对应的样本的个数,这是青年的,这是中年的,这是老年的,这是刚才说的第一第二第三的模,然后很显然显示什么。

如果I从一到N啊,你A不是有三个特征吗,你的年龄不是有三个取值取值范围吗,那么从我把你的三个取值范围里面,青年的元素的个数加上中年元素的个数,再加上老年元素的个数,一定也等于整个数据表里面元素的个数。

就像刚才我们看的,这是青年的元素个数,这是中年的元素个数,这是最后老年元素个数加一块,肯定还是整个数据表里面元素的个数,注意哈,注意以上这个K啊,这个K是根据我们的标记列来进行分析的,这里的DI啊。

这里的跟A的特征A的不同的,取值是以我特征A的视角来加油,区别的好吧,然后呢分的时候呢当然会有一些要求,什么要求呢,其中的子集DI当中,其中子集DI当中,再根据那个CK的样本集合划分为DIK。

看下面将我们子级DI,比如说我以清我以这个青年为例啊,这以青年为例,根据青年当中再根据那个类别标签啊,根据那个标签列再进一步的划分为DK,什么意思啊,比如说在这里啊,我们以青年为例。

即使是青年这一类特征A的一部分的取值,我们根据它的标签,进一步的还可以把它划分为,青年里面有贷款的和青年里面没有贷款的对吧,这就是根据DI当中属于K的,把它定义为DK,那么青年可以这样做。

中年也可以这样做,那么中年这个人群里面,我也是可以根据中年里面他的标签列,分为中年里面贷款的和中年里面不贷款的,老年也可以这样来做,那么可以看下面DIK等于什么,DIK就等于我是某一个年龄上进行的取值。

并且和我贷款的一种情况的取值的一个交集,比如说刚才那个例子,那么D青年有贷款,说的就是我青年人里面有贷款的那部分数据,那么老年无贷款,就是老年人当中没有贷款的那部分数据啊,用DK来表示。

那么DK的膜就被称之为是DK,这部分数据里面样本的个数,那么看下面啊,这个是看一下sam k sum i,然后是DK等于多少,把这个式子写到一边去,Sam k sami,然后是DK等于多少。

3K意味着我要把所有的类别标签加一个,加对吧,这是放在外面里面呢是SAI,我要根据特征A的不同的取值进行累加,然后呢是DIKDIK是在特征A里面啊,那个年龄里面取得某一种取值。

并且它的放贷情况等于某一种放贷情况以后,所构成的数据子集,然后把所有的这样的数据子集,通通的都加一块儿,那等于什么,等于一不等于一,不应该等于整个数据表里面元素的个数,DIKIKI是什么。

I是我特征A的某一个取值,它可能是青年中年,老年K呢是我们标签的某一个取值,它可以是贷款,也可以是不贷款,DIK说的就是青年里面不贷款的,青年里面贷款的,老年里面不贷款的。

老年里面贷款的中年里面不贷款的,中年里面贷款的,我们把它加一块儿啊,都加起来,应该构成的是我们整个数据集D的元素的个数,注意啊,注意啊,这里是D的模,而不是D是吧,而不是D好了,有了以上的分析以后啊。

作为基础,那我们就可以进行信息增益的计算了,怎么算呢,所有的信息,所有的这个计算都是基于概率上的计算,所以就是一些比值啊,就是一些比值问题,你需要分析清楚到底是谁比谁好吧,看下面信息增益算法啊。

信息增益算法输入的是什么,输入的是数据及D啊,就是那张数据表格,以及你要针对某一个特征来完成,信息增益的计算,因为我们这个信息增益,是要计算后边那个条件商的,条件商是两个随机变量的熵值是吧。

那你需要给你说这两个随机变量,一个是数据1D另外一个特征A那么输出什么,输出一输出的是当特征AB确定以后,训练数据及D的信息增益,就是那个JDA啊,就是就是输出这么个结果,那么三步刚才说过哪三步。

第一步首先计算数据及D的伤啊,首先计算数据及D的商熵值怎么算,看上面熵值的计算在这儿嗯啊这个也可以啊,升值的计算在这,现在呢只不过我现在需要计算的是D的三,D的商呢等于后面这个式子。

在这个式子里面我们需要知道那么几个量,第一个我需要知道这个N的多少啊,嗯在刚才那个呃数据表格里面啊,在数据那个表格里面,我们很显然我们知道我们这个贷款还是不贷款,只有几种情况,只有两种情况。

所以他是从1~2啊,这个没问题了,我还需要知道啊,贷款和不贷款的概率是多少啊,贷款的概率是多少,不贷款的概率是多少,我需要知道,另外呢log pi这个求一下就可以了,所以很显然核心的要点就变成了。

这个pi怎么去求,就是我们无非就是贷款贷款吗,当贷款的时候,这个pi值是多少,当不贷款的时候,这个pi值多少,我只要算出来就可以了,现在问一下大家,那这个怎么去求,不要忘了你现在有那张数据表格了。

那个呃标签那一列你是知道的是吧,你最直接的办法你就去找一下找一下,因为我们知道数据集里面元素的个数,我是知道的,就是D的模,那它当然是分模是吧,当时分母问题是分子是多少,分子也很好啊,你数一下。

你数一下里面,比如说我看一下贷款的百分,贷款的这个呃嗯概率我数一下里面已有多少个,是不是就可以啊,这一个两个三个四个哎,那不就是四比上D的模吗,那么四是从哪儿来的,四不就是属于贷款里面元素的个数吗。

所以说啊你我只需要统计一下,整个数据表格里面,不同的标签里面元素的占比是不是就可以了,看下面,所以数据1D的商HD等于什么,等于负的SUMK,从一到大K,这里的K就是我们的标签的可能的取值范围,标签哈。

标签就是分类啊,你有几个类别,在我们的数据表格里面是两个类别,所以这个地方是小K从1~2啊,你根据你不同的类别,那我如果有大K的类别,那就是从一到大K,然后看下面那个pi不同的类别的那个概率值。

那个pi怎么去算,分母就是我整个数据表格里面元素的个数,所以是D的模啊,这没问题,分母是没问题的,分子是多少,分子就是每一个类别里面元素的个数对吧,我查一下所有表格里面,所有被贷款的人有多少个除以。

整个表格不就是贷款的人的概率值了吗,那不贷款的呢,我查一下不贷款的那个人是不是就可以了啊,然后后面log2啊,后面的这个概率值是相等的相同的,所以说HD的计算,相对来说相对来说是比较容易理解的啊。

容易理解的麻烦麻烦在第二步那个条件上,为什么呢,如果从根据它的定义哈,你会发现你碰到了一个麻烦,什么麻烦呢,首先呃条件上是有两个随机变量,一个是X1个是Y,然后呢这里是I从一到N,当然这里的N也是。

根据我们的类别标签就可以了,所以这个pi还是比较容易去处理的,麻烦就麻烦在后面这一部分,后面这一部分,其实你会发现它在形式上也是一个账户,也是一个条件上,只不过是X等于XI被确定以后。

整个数据集上的调这个商值的计算,那这个时候呢我们就需要换不同的视角啊,就从刚才那个D的那个呃这个呃商的计算,转变成这个条件上的计算,你看下面啊,通过这个公式我们再去理解一下,看看这里哈。

还是那样是在特征ab确定以后,数据集D的条件上等于什么,按照刚才的公式等于sum i从一到N,sum i从一到N进行一个呃求和,然后呢它是一个pi,这里的这个pi啊。

注意这里的pi还是根据我们这个数据集DI,根据那个特征A啊,根据那个特征A的不同的取值,我们刚才说到过A的不同的特征取值有N种,所以呢这里是到N啊,所以这里是到N,然后每一种里面特征A里面的每一个取值。

我需要计算一下它的元素,这个元素个数,比如说青年有多少个,中年有多少个,老年有多少个作为分子分母呢,就是我们元素的总个数啊,元素的总个数这一部分哈理解起来问题还不大,麻烦就麻烦了,后面这个式子。

后面这个式子这个HDI他给的是HD了,HD刚才说过,这是我们整个数据集的商,这个HTI是个什么东西啊,有同学能理解一下吗,如果说HD是整个数据表的商,那么HDI是不是就是数据表格当中。

DI这部分子集的商,为什么是这部分子集呢,我们刚才讲到过,我们现在是以特征A的视角来看条件上的啊,如果说我们的这个熵值就这里的商,我们是以这个标签的视角,那这个条件上我们就是以特征的视角去看。

既然我的特征也可以把我的数据集,分成了不同的部分,那每一部分里面的熵值,是不是就是在特征A被确定了以后,我计算的整个数据表格的上市,而这个特征ab确定了以后的这个熵值,是不是就是这里的什么所谓的条件上。

明白什么意思了吧,所以说这个地方最难理解的啊,就就就在这啊,你怎么去理解这个这个这个HDI啊,HD是整个数据集的差,HDI是在我这个数据集里面特征ab确定了以后,分成的那些特征子集里面的商。

那这部分就可以作为我在Y在X等于小xi以后,被确定以后的那个商值的一个结果,好吧,那理解了这个HDI以后,问题是我需要把这个HDI算出来,HDI它也是个熵值,按照我们的熵值计算是不是就可以了。

按照刚才我们的商值计算,无论是I从一到N,然后呢是分子比上一个分母,然后一个log分子比上一个分母,分母很清楚啊,分母是谁,因为我们现在已经落脚到这个特征ab,确定以后的这个数据子集里面啊。

数据子集里面,所以分母就变成了这个数据子集里面的,元素的个数好吧,然后呢分子是谁,分子就变成了我在这个分子集当中,我再根据我的特征来进行划分的,这个子集里面的元素的个数作为我当前的分子。

所以说啊看一下公式,这个地方呢,从理解到计算都不是特别的容易理解,所以你就要好好看一下公式啊,就放在这儿,首先上面这一步,前面这部分照抄,往下照抄,所以说你会发现这一部分是完全一样的。

那么很显然这一部分在这,因为它是个商值,所以负号在这啊,负号提前了,那么下面这一部分式子我们可以看到啊,下面这部分式子可以看到分子,就像刚才我们说的,因为他计算的是一个数据子集的伤啊,数据子集的商。

所以分母就是零,就是那个数据子集里面的元素个数,所以这个DI的元素个数,分子是谁,分子是在这个数据子集里面,我根据我的特征,我们我根据我的那个标签来统计的,我元素的个数,就像刚才啊,我先在青年人里面。

假设我青年人有十个人啊,那这个十就作为我的分母,在这十个人里面有两个人,我有贷款,有八个人没有贷款,所以这个时候他根据不同的贷款情况,我就得到了在青年人啊,这个年龄特征为青年的这个数据子集里面。

那么它的概率分别是2/10和8/10,能明白什么意思吧,就是说这个条件熵的计算,当我限定了特征A以后,他的那个熵值HDI,要在局部的数据子集里面进行完成,而这个数据子集里面的熵值计算。

其实和整个数据集上的熵值,计算的原理是完全一样的,只不过你的计算的对象不一样了,以前数据集的熵值,是以整个数据集作为你的计算对象,所以你的分母是数据集里面的元素个数,分子是当前这个类别里面元素的总个数。

到了这个数据子集里面,我只看这个数据子集有多少个元素,所以分母是数据子集里面元素的个数,而分子是在这个数据子集里面,再根据标签的值来划分的,那个数据子集的数据子集里面的元素的个数,好吧。

这样的话我们的条件商也就被计算完成了,有了条件商以后,信息增益就比较容易计算了,信息增益直接用熵值减去条件商就可以了,好吧,这一部分的计算呢,呃你需要完成的第一步,对这些符号的理解,怎么理解这一堆符号。

这一堆符号如果你理解完了,后面这个信息增益计算的过程,其实是能够理解的好吧,再给大家说一下,在那边就是李航老师的统计学习方法里面,在这一部分里面有一个例子啊,就是计算的过程怎么去计算熵值。

怎么去计算条件熵值都有例子啊,回去以后非常建议大家把那个例子看一遍,因为有具体的数值,你知道算的过程是怎么样的,好了呃,信息增益呢,可以作为我们这个进行特征选择的一个依据。

然后呢根据不同的这个特征选择依据,我们还可以构建所谓的信息增益比啊,构建所谓的信息增益比,信息增益比呢我们是在信息增益的基础上,你可以看一下它的分子就是我们的信息增益啊,分子就是我们的信息增益。

然后分母呢是在某一个特征下面,我计算整个数据集的上,刚才的信息增益的计算过程里面的这个商,我们是根据标签那一列来完成计算的,所以说你会发现这是sum,可以从1~8K是根据标签那一列来完成的。

在进行信息增益比的计算,分母的那里面那个商是在特征A被确定之后啊,它的整个数据集上的一个商值计算,只是哈在整个的计算过程当中,我们的那个还是那样,我们的视角发生了变化啊,数据集上我们还是以标记啊。

数据集上的商我们还是以标记列来计算的,特征A的特征A上的数据计算的商,我们是以特征A这一列来进行计算的,那这样的话有了这个分母以后,熵值比上啊,条件这个信息增益比上这个商值。

我们构建的就是所谓的信息增益比啊,信息增益和信息增益比,都是可以作为我们特征选择的依据的啊,那好了,有了这两个特征选择依据以后,我们看看第二个问题,怎么去构建生成数啊,生成当前的决策树这个过程啊。

其实就相对比较简单了,看第一步啊,id3算法啊,id3算法,id3算法的输入,首先我们需要数据及D啊,数据集D第二部有特征集合A啊,第二部有特征集合A你得告诉我那个特征是谁,你还需要给我一个阈值啊。

给我个阈值,因为我们在计算过程当中啊,有的时候嗯,可以提前结束我的整个的生成过程啊,达到阈值的时候,我就可以结束算法了啊,你给我阈值,然后输出我们的决策树T啊,输出当前这棵决策树,那么第一步第一步。

若D当中所有的实例都属于同一个类别,什么意思啊,比如说还是我们的那张学生表,还是我们的学生表,哎我们这个班级太优秀了,所有班级同学都是三个学生,既然都是三好学生,那么根据当前这张表格。

学出来的那棵决策树就长什么样,只有一个节点,为什么只有一个节点,因为我这个数据表格里面告诉我们,所有的学生都是三好学生,也就意味着当转过一个新的同学来以后,八成不是八成百分之百,他就是一个什么。

就是一个三好学生对吧,他他没得跑,所以啊这是一种特殊情况,第一步先处理一种特殊情况,如果数据D的D,数据D当中所有的实例都同属于同一个类别,那么这个时候T就为一个单节点数啊,因为所有的情况都是一个啊。

都能就是那一个类别,并将类K作为该节点类别的标记输出就可以了,输出一个一就OK了,你不管你来谁,XYZ随便来,来了以后就多给你个三好学生啊,给你个好人卡啊,因为我的数据集数据集就是这样的,我们没办法啊。

这是一种情况,算法从这个地方就可以结束了,返回T算法就终止了,当然这是一种极端情况,那么继续往下看,第二种情况,若A等于空集,A是什么,A是我们的特征集合,意味着当前这张数据表也很也很特殊,长什么样呢。

它只有标记那一列,没特征,没特征列啊,只有标系列,如果没有标系列,那怎么办,如果没有我们的这个这个属性啊,如果我没有没有我们的属性列怎么办,那么也很好办怎么办,你看看它只有标记,那既然只有标记。

就是只有一堆零幺值呗,我是不是只要从这些零幺值上去学习就可以了,那意味着如果我构建一个新的模型,这个新的模型对新的数据来了,三个同学XYZ是吧,这三个同学到到我班级里来了,那怎么办。

那给不给他这个好人卡,给不给他这个三好学生,我是不是只需要统计一下当前这个班级里面,学生的这个三好学生,非三好学生的一个占比,我只比如说啊当天这个班级里面留有个人,一个同学不是三好学生。

那59个都是三好学生,那很显然大概率上,当前新来的同学也应该是个三好学生,是这样吧,所以说你会发现当我们特征没有的时候啊,当没有特征的时候,那这个时候也是一棵单节点数啊,也是一棵单节点数。

并且将地当中实力最大的那个特征,就刚才我们所说的哦,60人里面59个都是三好学生,那OK那你还是三好学生呗,只是根据这个标记的比例大小来分配,当前这个单节点数的输出,标记同样也返回当前这棵树T。

那这个时候就有同学会疑问什么样的表啊,如果说刚才那种情况啊,标记只有一种啊,标记都有一个值,我还能够忍了是吧,就就就特殊吗,那什么时候这张表格里面没有特征,只有标记啊,这种情况不可能出现,这种时候啊。

是不太可能出现,但是呢是我们算法过程当中生成的一种负结果,一会儿我们再看它好吧,你先知道怎么处理就可以了,就出现这种情况,我只需要统计一下标签里面的占比大的那一列,作为我当前的节点输出就可以了。

至于怎么出现这种情况,一会我们去看看一下第三步,否则那这个时候我们就在集合A当中啊,就在我的特征集合A当中选择一个特征,来计算当前特征下的信息增益,信息登记计算每一个特征啊,如果不是这两种情况。

那意味着我这个表格里面有若干个特征,有A1A2A3A四一直到AG是吧,那么每一个特征都计算一下他的信息增益,那么这些信息增益里面总有一个最大的,我们把它挑出来,跳出这个最大的来以后,你看啊。

我在所有的特征上来计算信息增益,找一下那个最大的信息增益所对应的那个特征,把它找出来,找出来这个特征以后,这个特征对我当前表格里面标签的结果,起到了一个最重要的作用,就像刚才我们那个例子里面。

我们通过信息增益的计算,发现哎确实是有没有房子啊,这个特征它的信息增益最大,那么下面怎么办,那么下面我们就看再判断一下,我得到的这个信息增益的大小,是不是超过了阈值,如果说这个信息增益的大小没有阈值大。

意味着我所有的特征里面,即使是信息增益最大值的那个特征,他的信息增益也远小于我的阈值的话,那这个时候我也没有必要再对我们的决策树加,油生成了,为什么,因为那个信息增益最大的,都已经小于我的一个阈值了。

意味着这个信息增益有,但是呢起的作用并不大,所以这个时候也把当前的数设置为单节点数,并且将D当中,实力量最大的那个K作为当前节点的标记,同样也是一种特殊情况,同样V怎么出现这种情况。

一会儿我们再看再往下再,否则对于AG当中的每一个可能的取值,就像刚才那样,我找到了那个房子作为最信息增益,信息增益最大的特征,并且这个特征的信息增益还大于了我的阈值,那这个时候我根据当前这个特征的。

每一个可能的取值,比如就像刚才那个房子啊,那个房子所有的可能的取值,房子有两种取值,有房子和没房子,根据他的所有取值,依据每一个特征的取值,将我们的数据及D分为不同的子集啊。

就像刚才说开发现房子那一列最重要的特征,根据房子这一列,把所有的没房子的和有房子的分别挑出来,分成两个子集,就是意味着我通过房子分成了两种情况,有和没有是吧,有和没有,怎么办,分成两个子集以后。

将DI当中就是你不就分成两个子集吗,每一个子集里面实力最大的那个类别标记,作为我当前的类别标记输出,你分成了有房子和没房子,有房子里面啊,有房子这个子集里面他的标签的占比最大的。

作为当前有房子的标签输出,没有房子的这个子集里面,根据标签计算出没,有房子里面这个占比最大的啊,标签的情况作为当前节点的输出,大概率上啊,我们可以知道那不是大概率肯定是这样啊,就是有房子里面。

他的这个标签对应的一般就是一没房子,这个一般就是零,因为他的信息增益最大,如果他都不啊,没有这种规律性的话,我觉得这棵树也就不用再生成了是吧,所以说这个时候哎这个时候输出的是一,这里输出的是零,好了。

这样的话你会发现啊,根据这个特征,房子我就把当前的数变成了一个有两个节点的,不同的一种情况,那下面怎么办,对第二个子节点以DI为训练集,以A减AG为特征集,也就是说哈。

我在没有房子和有房子这两个子集当中啊,有房子和没有房子这两个子集当中,再根据A减AG,既然我这个房子特征已经用过了,我就不能再用了是吧,我在其他的特征里面,比如说我在那个年龄工作和信贷里面。

再去分别计算他们的信息增益,再找到一个,比如说是工作在每一个子集里面,再根据工作那个特征进行一个划分,有工作的,没工作的,有工作的,没工作的再进行划分哎,是不是就变成这样了,这个特征就是根据工作。

那这个特征是根据我们的房子那个,然后工作这个也就不能要了,然后再根据什么,比如说在在这两个里面找一个信息增益大的,比如说是那个信贷好吧,有了信贷以后是在每一个子集里面再分,根据信贷那个情况再分成两个。

分成两个,分成两个,分成两个,然后哎,再往下分好了,现在这个特征也不用了,最后剩下的是谁,最后剩下的是那个年龄,那个是吧,剩下年龄那个好了,这个时候你会发现,如果年龄这个也化。

生完了以后就会出现哪种情况,是不是就会出现刚才我们所说的那个特征,没有的情况,这个时候如果还有数据集的话,我就根据刚才所说的,我就只能根据里面元素里面的,标签的占比的多少来加以分类了,好吧。

这就是哈D3的生成算法,我们回过头来再看一下,第一步哈,第一步,如果你只有一个类别,那是最简单的情况对吧,你通通的只有一个类别,那我就把它拉到一个节点里面去,以当前节点类别的输出为整个绝对数的输出。

如果你的特征A是空集,意味着你没有特征,那我只需要根据你的标签里面的占比多少啊,最大占比,那个标签作为当前的类别输出也就可以了,否则的话,那这个时候我需要计算每一个特征的,信息增益啊。

每一个特征在整个数据集上的信息增益,我找那个信息增益最大的作为当前的特征,这个特征如果还小于一直,我也不需要再分裂了啊,不需要再分裂了,我只需要把当前类别最大的,作为当前的决策数输出就可以了。

否则那我根据当前信息增益最大的特征,的不同的取值,把数据集分成若干个数据子集,每一个数据子集以其中类别标记,最大的类别作为当前的类别标记,然后在数据子集当中啊,数据子集当中减去。

或者除去我已经使用过的特征,在此特征集上递归的调用1~5部,产生进一步的产生指数,进一步的产生指数,直到什么时候,直到上述的退出条件里面,某一个条件成立,算法就可以结束了,就是所谓的id3算法。

id3算法的核心,id3算法的核心,是使用信息增益作为特征选择的依据,那么C4。5算法的核心是以信息增益比,看到了吗,是以信息增益比作为特征选择的核心,其他的完全一样啊,D3和C4。5就一点不同。

哪不同,就是他们在进行特征选择的时候的依据不一样,D3是信息增益,C4。5是信息增益比,好吧,其实你会发现这两个算法介绍一个,另外一个就换一下特征选择依据就可以了。

那么大家看看关于这个生成部分有什么问题吗,如果没有问题的话,我们继续啊,那么第三个问题呢,就是所谓的决策树的减脂的过程啊,呃大家体会一下啊,大家体会一下,按照刚才所介绍的决策树的。

啊为什么信息增益用那个log2是吧啊还是那样,这是那个信息论里面的内容,这个我们就不做过多的介绍了好吧,其实呃不是必须的啊,换成自然底数也可以啊,这嗯但是换成自然底数,你需要做相应的处理。

你这个你记住吧,当一个公式把它记住就可以了好吧,如果你有这个就是好奇心,你可以找一本信息论里面的书再看一下,经验伤什么意思,嗯我们前面讲到过啊,就是在我们的嗯就是啊语境里面啊,在我们当前语境里面。

所谓的经验就是数据,所谓的经验上就是在数据集上所学到的商,所以说你会发现就是已知数据集以后,你算的那个熵值的计算过程就是所谓的经验上,所以你会发现它使用的都是一些都是什么,都是那个比值作为我们的概率值。

但是我们知道这个比值作为概率值,只能是在已知数据集的基础上才能完成的对吧,我知道你的问题是在这里好吧,为什么将实例数据啊多数表决吧,这是一种很自然的情况,就是将我们实力最大的类别作为标记。

而不是按比例打标记,因为按照最大类别做标记的话,其实就是按照比例做标记啊,你比如说我当前这个数据子集里面十个人啊,十个数据八个是贷款,两个是不贷款,那贷款那肯定是8/10,不贷款,那肯定是2/10对吧。

我只能是通过这个比值,通过这个频率值来表示它的概率值,当然嗯我们只能这样来做是吧,那么下一步就是我们看一下决策树的减脂过程,那这个时候,我们为了避免产生所谓的过敏和现象,需要对生成的过程当中。

那种嗯生成的这种区域,复杂的模型的这么一种趋势加以限制,那这个时候怎么进行限制,我们看一下,在决策树的,简直上是通过极小化决策树的整体,损失函数或者代价函数来完成的,这其实和我们的策略是一样的。

只不过你需要去定义这里的损失函数,或者代价函数的问题,那么看一下怎么去定义哈,设数T的叶子节点的个数为T的摩尔啊,这是一个很好的一个策略,就在于当我们有了决策树模型以后,怎么去表征当前决策树的复杂程度。

当然我们有多种视角,比如说我可以根据当前决策树的深度,来表示当前决策树的复杂程度,当然我们知道数越深特别复杂对吧,单根节点是最简单的一个决策树,这是一种策略,那么另外一种策略我还可以根据什么。

还可以根据叶子节点的个数,叶子节点的个数越多,当前的模型越复杂,这也是一种方式,那现在呢我们是以啊叶子节点的个数,作为我们当前的这种考察的一个方向,所以他是叶子节点的个数啊,是作为我们树的模。

那么T呢是树T的叶子节点啊,所有的叶子节点,该叶子节点呢我们用NT的样本点来构成啊,该叶子节点当中呢有NT的样本点,其中K类的样本点个数有NTKNTK,注意即使是在叶子节点上啊,即使是在叶子节点上。

也并不意味着当前这个节点里面,所有的样本点都是同一个类别,也会出现有不同类别的情况,最极端的一种情况,刚才我们已经说到过啊,就是什么就是一上来没有特征,只有元素啊,只有标签。

而标签里面很显然并不是只有一种类别,有贷款的,也有不贷款的,那这个时候我们根据当前节点里面啊,不同的标签的情况,再把它们进行划分啊,再进行划分,其中K类的样本点有NTK不同的类别。

标签分别为NT1NT二一直到NTK,注意就是不同的叶子节点里面是用T来表示,叶子节点里面的不同的类别,用K来表示,所以NTK代表的是T和叶子里面,取得标签值为K的元素的个数。

那么其中HTT啊是在叶子节点上的经验商啊,或者叶子节点上的数据商,或者简单点说就是叶子节点上的熵值,那这个时候我们的损失函数计算为C阿尔法T,C阿尔法T为sum t01,从一到大T的绝对值。

刚才我们说过,我们是以叶子节点的视角考察一下,当前这棵决策树里面每一枚叶子啊,每一枚叶子从一那个叶子开始,一直到最后那一片叶子,每一个叶子里面,我都需要计算一下当前叶子上的伤。

再乘以这个叶子里面与元素的个数用来表征的,你你想一下,把这个值加一块,是不是,就很很很类似于我们前面讲到过的,什么经验风险,数据集上的经验风险,你看看N是对应的是一个叶子里面元素的个数,元素越多。

模型越复杂,然后呢再乘以乘以什么,乘以每一个叶子上的熵值啊,越混乱,然后它的熵值就越大是吧,越混乱杀值就越大,那这个时候,我们把它标记为当前的一部分的损失,损失这一部分的损失很明显啊。

很明显会趋于使得我的这个什么,使得我这个模型越来越复杂啊,不管是从叶子节点的个数的角度上,还是从熵值的大小的角度上,都会趋于使得我的模型越来越复杂,这很显然会出现所谓的过拟合现象,那怎么办。

他后面的项刚才我们讨论过啊,刚才我们讨论过,我们可以用数当中,叶子节点的个数来表示当前数的复杂程度,那换句话说,当我们把阿尔法T的模放在这个地方的时候,你会发现,当我在追求所谓的损失最小化的时候。

损失最小化,那意味着我的模型越复杂,因为只有模型越复杂了,我的分类才越准确,分类越准确,才能使我的损失越小,但是当我们的模型越复杂的时候,当我们模型越复杂的时候,那造成的一个情况就在于模型越来越复杂。

这个时候我必须要,我必须要通过我的这个正则化项,来进行一个对抗,模型越来越复杂,那这个时候我们的这个正则画像,起到了对抗的作用,就越来越强,用来限制或者抑制我前面的这一部分的,这种模型,复杂的这种趋势。

所以说啊这个C阿尔法T哈,C阿尔法T就表明了我当前的决策树的损失,那好了,有了这个损失函数以后,有了损失函数以后,下面的工作就是我需要把它计算出来,然后在整个的生成过程当中,使我们的损失最小就可以了。

看下面怎么计算核心哈,这里的这里的核心T的模数一下,这棵树里面一个个数就可以了,NT每一个叶子里面元素的个数也就可以了,麻烦就麻烦这里的HTT啊,每一个叶子上的损,每一个叶子上的伤怎么去算。

看下面HTT呢其实也是一个熵的计算过程啊,就是个商的计算过程,所以是sum k这没什么问题,就还是我们的K的类别,因为我们是在每一个叶子里面,所以它的分子是每一个叶子里面的,不同的类别的元素的个数。

比上当前叶子里面元素的个数,后面log是一样的值啊,这个地方非常类似哈,非常类似,我们在那个条件上的那一部分的计算里面,其实也是一样的,因为你是在当前页的里面,所以你的分子是叶子里面。

每一个类别的标记的元素个数,分母是叶子里面元素的个数,这样的话我们整个的这个呃CT值啊,就可以把它计算出来,怎么去用是个麻烦事啊,怎么去用呃,有按照我们之前的策略,你直接使这个损失函数最小化就可以了。

那这个但是这个时候你会发现,只有牵扯到另外一个问题,什么问题啊,那天我曾经说到过一个观点,什么观点啊,有些模型是没参数的,马上有同学啊,就反应过来呀,还有没参数的模型吗,是有没参数的模型的。

其中最典型的代表啊,我们可以把数模型认为是一种没有参数的模型,至于怎么定义这棵树是最关键的一个问题,特别是后面我们讲到这个xd boss的时候,你会发现他原来真的是一个呃。

在定义形式上是不带参数的一个模型,当然形式是形式,计算是计算是吧,但是你会发现这个时候因为它没有参数,所以你没有办法对参数进行求导啊,因为我们知道损失函数最大的作用就是,有了损失函数。

我只需要求偏导数等于零,找到损失函数有极小值就可以了,但是这个时候呢怎么去用,看一下在进行减脂的过程当中,我们是这样来用的,就是既然我们有了一个损失函数啊,既然我们有了一个损失函数。

那这个损失函数就就就可以作为啊,我来比较两棵决策树的优劣的一个指标啊,哪棵树好,哪棵树不好啊,我看下损失是不是就可以了,损失小的当然就是一个所谓的好数,损失大的当然就是一棵不好的树,那有了这个指标以后。

我们在生成完成以后,我们看一下能不能把一些节点或者某一些呃,不重要的节点在整个决策树上去掉,怎么去看下面树的减值算法,输入一棵树T啊,输入一棵树T意味着当前这棵树已经生成了,然后呢给我一个参数阿尔法。

当然这个参数阿尔法,就和我们前面那个学习率是一样的,一个类似的一个数值,用来决定了你这个正则画像的一个重要性程度,输出的是修剪之后的一个指数啊,T阿尔法在阿尔法的这个已知的条件之下。

第一步计算每一个节点的事啊,你不是有一棵树了吗对吧,不管长什么样吧,反正这棵树你就有了,然后呢你需要计算每一个节点,当然这里每一个节点不只是叶子节点,每一个节点的熵值。

然后呢递归的从树的叶子节点向上回缩,我通过叶子节点加以判断,判断什么呢,设一组叶节点,回缩到其父节点之前与之后的整体数,分别为tb与ta t b啊,是之前的那个数,TA呢是回缩到负节点以后的数。

比如说这是原数T我们呢通过分析会发现,可以把这两个节点回溯到它的父节点当中去啊,就从原数变成了这样的一个新的数,然后呢我我把原数叫做TB,新数呢叫做ta,我分别计算一下。

CTB就是原数的损失函数和心数的损失函数,如果什么,如果原数的损失函数大于了新数的损失函数,意味着什么,意味着原数的损失大,新数的损失小,那你说你要哪个数,当然我要损失小的这棵树嘛,好了。

这样的话我们就从原数进化到这棵树,那有了这棵树以后怎么办,再从所有的叶子节点依次来进行上述的过程,然后比如说哎,我还可以把它回溯到根节点里面去,就只有单根节点的数,我再来比较一下,它就变成了tb。

它就变成了T再计算一下他俩的损失情况,如果还是这样的话,那我就把它剪成这样了,继续剪成这个样子,所以说这就是减脂算法的一个基本策略,它的思路就在于,我需要给出一个损失函数的一个定义,有了损失函数以后。

我只需要从根节点开始,每一个根节点开始依次向上回缩啊,在回缩的过程当中,依次判断新数和呃,心数和元素的损失值的大小,如果出现了原数比比心数的损失要大,那我就进化成一棵新树,反之那我就不用停止。

我就可以停止整个算法,数据很好了好吧,这就是减脂过程,看有什么问题吗,第五步,认证算法的第五步,当然啊这个地方是根据这个特征的,每一个可能的取值对吧,生成过程当中,我比如我选择了这个特征A。

这个特征A的不同的取值,来对我当前的数据集进行一个子集的划分,你当前这个特征A能取三个值,你就把当前的数据集分成三三份,三个子集,如果你特征A能取五个值,那就把当前数据集分成五个子集啊。

这个地方是根据特征A的不同的取值,来进行划分的,Ok,好,那这样的话我就介绍完了id3C4。5的特征,选择决策树生成和数的减值,那么前面我们介绍过这两类数啊,基本上都是做我们的分类问题啊。

解决的都是分类问题,所以说你会发现它的计算,都是以类别标签的频率值,来表示它的概率值是吧,所以一般都是分,就是离散情况下我们才可以这样做,既然是离散情况,它的取值就有限,所以一般都是一个所谓的分类啊。

分类问题,那怎么去解决连续值啊,怎么解决这个回归问题,是我们下边卡的数需要解决的卡的数啊,他名字就是所谓的回归和分类数啊,也就是说卡的数既可以做回归,也可以做分类,当然分类一会儿我们看看它是怎么去做的。

核心我们看看他怎么做回归的啊,在介绍这个回归生成树之前呢,就是非常重要的一个概念啊,就是树的核心到底是什么,就是什么才是一棵树模型啊,什么才是一棵树模型,按照刚才我们的分析。

你会发现我们是不断的从根节点开始,不断的去找特征是吧,从根节点不断的去找特征,找到一个特征进行一个子集划分,找到一个特征进行一个子集划分,直到我们不再进行子集划分为止,如果我们以刚才的数据表格为例。

我们知道一个数据表格,对应的就是一个N维的一个特征空间,里面的一个数据情况,注意啊,因为我们知道每一个记录,它都是一个X11X12。2点,一直到X1N对吧,当然这里是N个特征,那这个时候我们知道哈。

在这个N个特征里面的一条记录,对应的就是我们N维空间里面的一个点,那么这个点一定要落到我们决策树当中的,某一个叶子节点当中去,而这个叶子是怎么来的,而这个叶子是从根节点开始。

根据不同的特征划分落到的一个小区域,换句话说啊,直接说结论,你会发现我们的决策树啊,我们的决策树就是不断的从我们的输入空间,还记得那个花X吗,他是个N维的空间是吧,从那个花X那个N维的空间。

根据每每一个特征的不同的取值,对这个子,对这个输入空间进行一个子空间的划分,你看看根据A这个特征划分成了两个空间对吧,然后再根据B这个特征,比如说划分成三个空间,根据不同的特征,把每一个。

把某一个输入空间划分成了若干个子空间,然后呢,然后到了叶子节点的时候,给出当前这个叶子节点所对应的标签,给出个值就可以了,你你你是个三好学生,就给你个一,你不是个三好学生,就给你个零,所以说简单点说啊。

简单点说决策树模型啊,就是对我们输入空间的一个划分,以及每一个子空间的输出值,这就是决策树,所以说啊你看它的定义形式来看这个样啊,一个回归书上,就是将我们的输入空间划分成若干个单元。

以及每一个单元上都对应的有一个输出值,假设已将我们的输入空间划分成了M个单元,R 1r2,一直到RM并且在每一个单元上啊,每一个单元RM上都有一个固定的输出值cm。

于是回归数可以表示成下面这个形式长什么样,FX啊,就是一棵树,就是一个模型,以后我们我就不再强调了这个模型是吧,只不过这个模型呢被定义为这么一种形状啊,它就是科学的树啊,为什么是科学的数呢。

看一下M从一到大M,你无非就是把你的输入空间划分为了,这M个子空间,我当前X属于哪一个输出,你看你给我一个X,我要给你个输出吗,我这个输出到底是几,我需要遍历一下我当前这M个子空间。

看一下我这个X到底是哪一个子空间,里面的元素,如果我能够判断我这个X属于R1,那我只需要把R1这个子空间所对应的,那个C1作为我当前的输出,是不是就可以了,看一下啊,怎么做的。

你先有X首先需要判断我是属于哪一个子空间,找到它所对应的子空间以后,再去把这个子空间里面的输出找出来,作为我当前输入的输出就OK了,这就是决策树啊啊没有结构了,已经已经我我们已经忽略它的树形结构。

而只是把它还原成它最本质的那一点,就是在整个输入空间上的输出呃,这个输入空间上的划分,以及每一个子空间的输出,这是决策树啊,希望大家能够尽快的能够认识到这个层面上啊,这才是数决策树的最本质的核心。

那为什么下面这个形式注意啊,我们刚才这个过程当中,有一个遍历所有子空间的过程,因为他需要看一下它到底属于哪一个子空间,从R1R2对吧,一直点点点一直到RM,我需要看一下你到底属于哪一个子空间。

那怎么去便利,那这个时候就需要使用到的求和计算,这个地方再强调一点,就说sum求和啊,就是求和过程我们是一个计算过程,1+2加3+4等等等等,一直往下加,所以说在这个求和过程当中,我就可以去判断一下。

当前我这个X是否属于某一个子空间,怎么去判断,根据后面这个东西I,关于这个I我不知道大家还有没有印象,I是什么东西啊,I是一个所谓的指示函数,我们上一次课讲到过,指示函数的作用是如果后面的条件成立。

返回一,否则返回零,看一下后面这个条件,X属于RM,也就意味着如果后面这个条件成立,意味着当前的输入X是2M这个空间里面,那个有一个元素,那么只是函数就返回一返回一,再和前面这个cm cm所对应的。

就是RM空间的输出值,那么返回的是不是就是当前X所属于的,那个子空间的对应输出,有同学就会问你这个sum求和,你不光是需要判断一下是不是属于RM,你还需要判断一下是不是RM11,RM加二。

那这个时候没问题啊,因为我们能够明确的知道X如果属于RM,就一定不会属于其他的子空间,既然不会属于其他的子空间,那么意味着这个条件就不成立,这个条件不成立,只是函数返回的就是零,零乘以任何值都是零。

所以即使是进行了一个累加,也仅仅是在X属于某一个子空间的时候,他的条件成立,返回一对应的返回这个子空间的输出cm,而在其他的空间,因为X不属于对应的其他空间,所以这个条件就不成立。

指数函数返回零零乘以任何值都是零,在累加过程当中不受影响,所以说你会发现这个FX它很技巧性的用到了,这个sum求和这个过程,以及这里的指数函数的判断组合起来,其实就是在整个的子空间序列当中。

一次的进行判断,判断一下是不是X属于某一个子空间,如果是,那输出它对应的输出,如果不是返回零,不影响整个的求和过程,然后当然如果当前这个不是我还求和吗,这个过程还需要看下一个值,再看下一个值。

再看下一个值,因为我们这个X1般,如果是在我们的输入空间里面的话,它一定属于某一个子空间,一旦找到了子空间,返回一下子空间的对应输出就可以了,所以说啊这个最重要啊。

这个东西我觉得在chart boost里面,对于模型的这个理解是非常关键的一个理解,好吧,那好了,有了这个链接以后呢,下面我们需要完成回归操作,那怎么去完成回归操作,如果我们拿到了一个数据及D。

它是X一Y1XNYN,那我们知道这个地方麻烦就麻烦了,他的这个假设数轴啊,它是个连续输出,它是个实质输出,不像我们的离散输出,我们可以把它发生对吧,分成有限个子空间。

那这个时候每一个子空间有一个取值就可以了,麻烦就麻烦,他是个连续空间,那这个时候怎么办,也也也也不是问题啊,我们只需要把这些子空间的这空间大小小一点,就可以了是吧,那怎么办,看下面我们是这样来做的哈。

我们可选择D这个变量,XG以及其取值,S作为切分点和切分变量和切分点,并定义两个区间或者两个区域,你你确实数无非就是子空间的划分,以及每一个空间上给我一个值吗,首先我们先解决这个空间怎么划分的问题。

那怎么划分呢,我试着去找到一个所谓的空间划分啊,所谓的空间划分无非就是特征上的选择,以及特征上的不同的取值来进行空间的划分,比如说我们以特征A为例是吧,比如说我们以年龄为例,年龄分为中年青年,中年老年。

我就可以把特按照特征A划分成三个子集,有同学说那是离散特征,你这里可是连续特征啊,无所谓啊无所谓啊,我因为我们拿到的数据集是有限的,既然你的数据集是有限的,那意味着即使是连续值也是有限。

个连续值其实还是在数据集上加以学习,所以说这个地方,它即使是一个连续值的回归问题,其实因为你拿到的数据集是有限的,所以其实还是一个分类,只不过这个分类的区间,会发的会划分得非常的小而已。

那么怎么去找这个特征以及切分节点,因为我们知道任意一个特征我都可以做选择,任意一个特征里面的任意的取值,我也都可以做选择,那看下面我不管我选择的是哪个特征,也不管我选择的特征是哪个取值,我总可以。

根据某一个特征以及某一个特征的取值,将我们的区域,将我们的输入空间划成两部分,哪两部分小于这个在这个特征值上,小于这个值的,以及在这个特征值上大于这个值的啊,你会发现比如说还有那个例子。

我们以那个什么吧,比如说还是以年龄吧好吧,还是以年龄,比如说青年对吧,我根据青还是年年龄,在年龄这个特征里面,我还是根据他的不同的取值,比如说青年,我可以把青年比青年年龄小的一部分。

比青年年龄大的一部分,是不是可以啊,所以说你会发现我不管是根据哪一个特征,还是根据哪一个特征上的取值,我都可以把输入空间划分成两个部分,有了这两个子空间以后,那怎么办,我就找所有可以把这些空。

把这个空间分成两部分的所有的特征,以及所有的特征可能取值上去找,计算下面这个量哪个量呢,看下面,既然我们把这个按照当前这个特征,把输入空间化成了两部分,那么在这划成了两部分,比如说就像刚才那个数轴。

这是根据那个那个年龄就是青年,那就是大于青年的,这是啊不是,这是大于青年的,这是小于青年的,好吧,那好了,那无非所有的数据都落在这个区间上,不管你是到底是青年,中年还是老年,反正都是在这个区间上。

那这个时候怎么办,我在每一个可能的切分点上我都这样划分,每一个切分点上都这样划分,是不是可以划分完以后怎么办,划分完了以后,我需要把所有左边这些和所有右边这一切的值,累加起来累加,不是把原值累加。

累加的是什么,累加的是每一个值和这个子空间里面的,那个平均值的差值进行累加啊,比如说我的我左边这个子空间的平均值在这,右边这个子空间的平均值在这儿,我把上面这些所有的点距离,这个平均值的距离都计算出来。

并且累加到一块,你看是把平均值的距离进行累加啊,进行累加累加到一块怎么办,我使得这两个P区间里面所有点距离,这个平均值的和尽可能的怎么样小,你说这个怎么尽可能小,因为我们知道,因为我们刚才说过。

我们这个切分点以及切分点上取值,是有是有多个的,你当前这个计算出来以后,当前这种划分我计算出来一个Y1减C1,加上一个Y2减C2,我其他的切分点也可以分别计算,计算出来之后,我尽可能的小,最小的那个。

作为我当前的特征以及特征上的取值,也就是说刚才那个例子里面年龄是一个特征,年龄里面的青年啊也是一个特征里面的取值,根据这个特征以及这个特征取值,我们把整个数据集划分成两部分。

分别计算每一部分的平均值的和的最小值,然后再根据刚才说过那个那个信贷情况,信贷情况良好,中差也可以根据不同的信贷情况的,不同的取值依据,划分成两个空间,来不断地计算。

每一个空间里面的元素和平均值的这个差值,尽可能的小,来比较一下这两个值谁更小谁更小,就找到一个更小的特征以及特征的取值,最小的那个作为我的切分特征以及特征取值,然后呢特征划分完了以后。

我需要根据特征上计算它的输出,特征上的输出就很简单了,当你有了这个区间划分以后,我只需要根据这个特征区间里面所有的元素,求一下平均值,作为我当前空间的出输出就可以了,这就是哈。

其实你可以看到说是解决的回归问题不错,但是在解决回归问题的过程当中,因为你这个里面那个D数据集是有限个元素,所以也是一个便利的过程啊,也是有一个遍历过程,只不过这个遍历过程里面,特别是这个S的选择。

这个S很显然可能是个小数啊,就是个实数啊,小数啊一般是小数,不是实数,实数里面可能无理数,这个地方不会出现啊,所以这个地方比如说以呃身高身高里面一,因为我们知道身高这个特征很显然是个连续值。

在测量过程当中,因为比如说我们班级里面有60个同学啊,可能从1米92对吧,一直到1米68,1米1,1米58是吧,所以这个过程里面即使是连续值,它也是一个若有有,优势数据量的一个连续值。

所以这个时候你会发现我根,即使是根据这个身高,我也可以选择一个其中的某一个位置,作为我两个区域划分的最优的切分位置,好吧,那这样的话完成的就是所谓的,回归问题的一个分析,那么其过程啊,在这个地方。

核心的就是怎么找这个特征以及特征上的分,分类点,其实就是一个便利过程啊,找到这个便利过程就一分为二,那一分为二之后怎么办,那么在剩下的那个子空间分成了两部分,子空间里面。

再一次按照我们刚才的过程依次查找就可以了,OK这是关于这个cut数的回归问题,那cut树的生成怎么做,cut是数字生成一句话卡的数,数字生成的特征,选择使用的是基尼指数作为特征,选择依据基尼指数的计算。

在这它的生成过程和C4。5那个id3算法,是一样的啊,生成过程是完全一样的,就是把D3和C4。5里面的信息增益和,信息增益比,用基于指数来替代,基于指数也是我们信息论里面的一个概念。

它也可以用来表示我们关于这个信息的一个呃,不确定性的一个度量啊,他们其实和那个信息增益啊,是有这个数值上的关系的,这个地方就不展开讲了,你知道就可以了好吧,那这样的话以上啊,以上我们就把。

决策树这一部分的原理部分介绍完了,那么下面呢同样去准备了一个实例,这个实例呢,正好也是我们这个教材里面的那个例子啊,数据集这个地方都已经给大家了啊,感兴趣的同学啊,你可以回去以后做一遍啊。

你可以试一下怎么去计算,当然这个地方也不做过多的要求啊,因为这个呃我后面会讲CK那里面的包的调用,其实参数才是重要的,你怎么去理解那一堆参数啊,有兴趣的同学可以自己看一下,好吧,判这不还有什么问题吗。

那没有问题的话,我们就继续好吧,嗯决策树这部分完成以后呢,我们今天还有下面一个任务,就是关于这个集成方法,看一下,OK嗯集成方法,什么叫集成方法呢,简单点说哦,中国有一句这个俗语叫做三个臭皮匠。

顶个诸葛亮,集成方法就是这么回事儿,当我们构建模型的时候,你会发现模型的性能有的好有的差,那怎么去提升模型的性能,就是一个很关键的问题,那怎么去提升呢,有很多种不同的策略,其中有一种策略呢非常简单。

就是既然某一个模型,它的性能并不是那么的突出,那我是不是可以通过集成若干个模型,来提升集成之后的模型的性能呢,这就是boosting方法最简单的一个思路,那其实是可以的,就是我们通过集成不同的模型啊。

把这些性能可能普遍不好的模型集成起来,使大家能够趋近于性能非常好的那个模型,结果啊,这是boosting方法的最基本的一个思路,那怎么去做两方面,一方面呢就是所谓的加法模型。

第二方面呢就是所谓的前项分布算法,我们分别来看一下,第一步先看一下加法模型,什么是加法模型,加法模型呢是这么一类模型,它的形式呢是这样说的,FX等于sum,从一到大M贝塔m bx伽马M。

分别介绍一下其中每一个符号的含义,其中这里的bx伽马M把它称之为是奇函数啊,基础的意思啊,基奇函数奇函数呢其实就像刚才我们所说的,这里的bx伽马M,就是那一个一个的性能不太好的模型啊。

奇函数或者G模型啊,其中的伽马M呢为G模型或者奇函数的参数啊,嗯之前那些臭皮匠啊,这是那些臭皮匠,然后呢贝塔贝塔M是奇函数的系数,因为这些奇函数各有优劣是吧,有的好有的差。

那么为那些好的你就多做一些贡献,给你一个较大的全职,那些性能差的啊,你就你你又能干点干点不能干算了是吧,所以就给出一个小的贝塔值,所以这里的贝塔为奇函数的系数,为奇函数的系数。

那这样的话每一个奇函数都给你一个系数,然后把这一堆奇函数加起来构成FMFX,这是刚才我们所说的,都是方法最简单的一个思路,非常简单粗暴,把所有的奇函数统统的加一块,就构成了FX,那好了。

加法模型其实很简单,问题在于它的优化过程是比较麻烦的,为什么这么说呢,看下面假设我们有数据集xi一直到YI是吧,这是XN啊,xi i从一到N以及损失函数,我们都已经知道了啊,这里损失函数呢。

八成是可以使用我们的平方损失啊,使用我的平方损失,这个时候我们的学习目标变成了什么呢,变成了在数据集上,我们要分别计算我们的实际输出,YI和我们的模型输出FX的损失进行一个累加,然后当然取不取平均啊。

其实对结果并不影响是吧,这个时候使得我们的经验风险最小的那个模型,作为我当前的最优模型,注意啊,这一坨就是那个FX是吧,这是我们的基本策略,但麻烦就麻烦了,因为它是一个加法模型。

它不是单一的模型的一个优化问题,而是你加起来那一堆模型的整体的优化问题,所以一般情况下呢,这个整体优化呢是比较复杂的,我们一般完成不了,那怎么办,看下面我们就变一个策略,就是所谓的前项分布算法,前线。

前项分布算法,它是求解这一优化问题的一个思路,因为学习的是加法模型啊,因为你学习的是加法模型,我可以从前向后,每一步只学习或者只优化一个奇函数及其系数,逐步逼近我的优化目标。

那这个呢我就可以减少或者简化,我的优化复杂度,那具体的怎么去做,具体的就是我每步只需要优化如下的损失函数,哪个呢,sum从一到N还是在数据集上,然后呢,L我的损失计算是YI还是我的实际输出呃。

我的这个实际输出,我的预测输出不再是这对整个的sum求求优化,因为不太好求,我只求其中的一部sub的一个,其中的一步做优化啊,这就是我们的这个前项分布算法,当然有同学会问,很显然你这个单个基函数的优化。

和你加法模型的优化优化目标是不一样的,那怎么去解决他们两个之间的冲突呢,来看下面好了,前两分布算法呢进一步的解释为,输入是我们的数据集,损失函数以及我们的奇函数的集合,都是已知的啊。

就那一堆臭皮匠先放在那是吧,怎么用,我没有在说,那输出呢就输出我们整个的加法模型,看下面第一步,初始化F0X等于零,还是那个老问题,F0X等于零,也是一个模型,一上来我把所有的输入都映射成零。

虽然这个模型性能很差,差就差了,但是它不妨碍它也是个模型做基础是吧,那继续往下,对于M等于一二,一直到大M我们分别来优化下面这个问题,什么问题呢,看下面SAMI从一到N还是在数据集上。

然后L是我们的损失计算,在损失计算过程当中,YI作为实际输出没问题,看一下预测输出是个什么东西啊,预测输出是FM减1X,那我当前这一步很显然是FMX,我在进行DFMFMX的优化的过程当中。

我需要使用到过FM减1X,也就是说,我需要使用到上一次优化结果的那个函数,有同学说上一次那个优化结果的函数是谁啊,那很显然上一次那个优化结果,那个函数的优化过程我现在不知道,我现在不管他是谁好吧。

那么它的优化过程,很显然使用到了上一个优化函数的,上一个优化函数,那上一个优化函数的上一个优化函数又是谁呢,一直往回找找找找,找到头,找到头是谁,找到头就是这个F0X等于零。

也就是说我从F0X等于零开始,我要这是零啊,我先要计算F1X在F1X优化过程当中,我使用到了那个FM减一,这时候1-1不就等于零了吗,对吧,所以说不要担心那个FM减一在哪,既然你有了F0以后。

FM减一就有了好吧,在我上一次那个优化结果的基础上,再加上一个贝塔b xi伽马,什么意思呢,上一次那个优化目标性能,我不管它是好还是不好啊,不管它性能怎么样,我当前这个优化目标要和它做加法。

意味着我在他的基础上再要学习一个新的模型,这个新的模型和我上一部的那个模型,做融合以后,作为我当前这一步的模型和我的实际输出,做算式计算,使得我的损失尽可能小,以以确定我当前的最优模型,那么大家想一下。

想当然的,我们就可以认为当前学习的这个子模型以后,所构成的那个加法模型,就要比单纯的那个FM减1X的性能,要怎么样就好了,好怎么体现出来的,好就体现在我当前哎往前又增加了一个子模型。

而这个子模型是在原来这个模型的基础上,又使得数据集上的损失极小化,以后所学到的这个子模型,那很显显而易见的是,它比那个FM减一要好,这还没完啊,因为我们知道这是个迭代过程,有了FMX以后。

我在学习的一定是FM加1X,而那个时候我同样是在整个数据集上计算损失,实际嗯嗯喂喂,可以吗,可以了是吗,OK可能是刚才信号不稳定的事情到哪了啊,那我我们把它串一下吧,把它串一下。

可能刚才呃可能会有停顿的地方是吧,哦可可回头看一下加法模型啊,先给加法模型,其实java模型很简单,就是有若干个机模型啊,性能很差,然后呢我我我为每一个机模型呢,再给他一个全职。

然后把这个带全职的机模型呢,一个一个的加起来,就构成了所谓的加法模型,这样的话呢,我们试图通过若干个机模型的性能,来趋近于一个性能更好的模型,那这个时候呢有了这个模型定义以后呢,它的下一个问题就是。

优化过程是一个比较复杂的问题,因为如果你直接对整个加法模型加以优化呢,这个比较困难,因为它这个具体形式是个累加的过程,那这个时候我们做一个所谓的呃,一步一步的去完成它。

这样的话我们采用所谓的前项分布算法啊,就是每一步我只优化其中的一部分啊,这样的话很显然就要比整体的优化,是一个更好的一个策略,那么下面的过程呢看一下,首先呢先给出一个性能很差的F0X等于零。

作为一个基础啊,作为一个极限,有了这个基础以后,每一次我都是在上一次的那个模型基础上,来训练一个得到新的模型,那么怎么体现出来呢,每一次我的学习都是在数据集上进行损失计算。

只不过这次的实际输出和这个预测输出的差值,我是在上一次那个模型的基础上,加上我当前的这个模型来构建一个优化目标,而这个优化目标过程当中需要注意的是,YI是已知的,因为它是数据集里面的值。

FM减1XI也是已知的,有同学说这个FM减1XI怎么是已知的呢,因为你当前优化的是DM是DFMX,在DM部的时候,这个M减1X是上一部的那个模型啊,上一部的模型一定是已知的了,对于当前这一次来说。

所以你会发现在整个的优化目标过程当中,只有这里的贝塔b xi伽马是不知道的,而这就是我们的优化目标,使得这个损失最小的那个贝塔M和伽马M,作为我当前模型的参数和它的系数,这是在DM。

那么同样这个需迭代过程要继续下下去,那么下一步一定是FM加1X,那它的优化目标一定是在同样的逻辑里面,是以FMX,因为上一部FMX已经被学出来的对吧,在FM减1X,在FMX已知的条件之下。

再学一个新的模型加到FM上去,那么这就构成了FM加1X,那么同样的道理,FM加二,FM加三一个F大M,那这个时候你会发现整个的累加完成以后啊,每一步都是学了一个新的子模型。

而学的这些新的子模型的累加的性能,一定要比每一个单个的子模型的性能要好,这是显而易见的,这被称之为是boosting方法啊,boosting方法两部分,加法模型和前项分布算法,加法模型和前线分布算法。

那么你会发现在这个boosting过程里面,关于这里的B就是那个G模型,是没有明确要求的,就是这个机模型啊,只是一个机模型,它到底长什么样,我是不知道的,那这个时候看下面所谓的提升决策树啊。

所谓的提升决策树,就是以决策树作为基模型的提升方法,称之为是提升决策树啊,就是我们把那个G模型啊,以数模型作为基模型,不断的累加决策树模型来构成我们的,据他说这里有个问题,数模型怎么进行累加树啊。

我们知道典型的树形状就就长这样是吧,这些东西怎么能把它加一块,不要忘了这是它的形象啊,或者形式,它的定义是什么呢,看这里,这才是那棵树,还有印象吗,哎不是不是这个多少在哪儿,他在他在这,这才是决策数。

不要忘了我们前面一直在强调什么是决策树,决策树无非就是对输入空间的划分,输入空间的划分以及每一个输入空间上的输出,我把当前的输入空间化成了R这个子集,然后呢每一个子空间上对应有一个输出。

这就构成了一棵决策树,那么这个时候你再想一下,两棵决策树的相加,就变成了两棵决策树的输出,空间的进一步的细分,以及细分之后的输出空间的呃,细分之后的空间的输出对吧,这就是哈怎么去理解决策树的问题啊。

这就是有了决策树的定义形式以后,我们就可以完成,你会发现它是可以进行累加的,那这个时候所谓的提升决策树,就是以决策树作为基模型的加法模型,FM等于sum,从一到大MTX大米M这个时候有同学会问诶。

你前面那个G模型B前面不是还有一个贝塔吗,在这个时候啊,一般情况下,我们认为以决策树啊,以树作为基模型的这个boosting方法,我们就不再对每一棵树给它一个系数了,我们认为所有的决策树都是重要性。

都是相同的,就可以了,省了一个参数的学习啊,省了一个参数的学习,来看下面,既然有了这个以以以树为基模型的这颗嗯,加法模型以后,那下面的一个问题,就是对这个加法模型的一个学习,怎么学习,看下面。

嗯嗯提升觉得数同样采用的也是前两分布算法,其实算法过程是一样的好吧,首先也是确定初始提升数F0X等于零,有同学就会困惑,F0X等于零是怎么是棵树吗,也是一棵树,是一个单根节点的树。

所有的输入都映射成零是吧,那DM部的模型呢是FMX,同样是等于FM减1X,上一部的那个模型加上一棵树啊,加上一棵树,那它的优化目标呢就变成了在数据集上,损失函数的累加,实际输出是YI。

那么模型就变成了FM减1X加上那棵树,作为我DM部的模型这个词,这个时候我们把当前这棵树学出来,就变成了FMX,那么有了FMX,那下一步是FM加一,那这个时候用到的是FMX,所以和加法。

加法模型的前项分布算法过程是完全一样的,只不过它的学习过程里面,把奇函数替换成了我们的数模型而已,那么这个时候你可以看到啊,你可以看到,我们就是给出当前这棵决策树的定义形式,就是输入空间的划分。

以及每一个空间里面的输出,计算过程就是F0X等于零,FMX等于FM减1X加上一个绝对数,通过叠的过程,最终我们学到的是F大MX,把所有的每一步里面的绝对数进行一个累加。

最终得到的就是我们的java模型的结果,这个过程啊我相信应该没有什么太大的问题啊,最后呢有一个非常重要的一个结论,哪个结论呢看这里,因为刚才在学习过程当中,我们一直没有讨论那个损失函数啊。

没有讨论损失函数,我们常用的损失函数啊,就是所谓的平方损失啊,L实际输出是Y,这里呢预测输出是FX等于Y减去FX的平方,Y减FX的平方,然后呢我们按照我们的损失展开,因为刚才我们的损失函数啊。

是LYFM减1X加上一棵树T是吧,加上一棵树T,这个时候呢,我们把这里的L用我们的平方损失代入,就变成了Y减去FM减1X减去那棵决策树,因为减的和把它拆开之后,把所有的分量都需要减掉。

然后再进行一个平方,从这一步到这一步,就是一个平方损失的一个展开啊,这应该没什么太大问题,展开以后啊,你看看展开以后的这三项,我们分析一下,就像刚才我们得到的结论是一样的,YI是已知的。

YM减1X也是已知的,在当前DM部的模型学习过程当中,只有谁不知道,只有这棵决策树是不知道的,因为我们要学习一个新的模型,在这三项当中有两项是已知,一项是不知道,那好我是不是就可以把这两项已知的。

先计算出来,先计算出来,用R来表示,用R来表示,整个式子就变成了什么,你看看就变成了,R减去决策树的平方的形式,那这个是形状,你再和原平方损失对应一下,你会发现哎,这个时候的R是不是就变成了这里的Y。

这里的T是不是就变成了这里的FX,换句话说,在前项分布算法的这个学习过程当中,如果我们以平方损失作为损失函数啊,以平方损失作为损失函数展开,我们的展开以后,你会发现每一次的学习目标。

每一次的学习目标变成了什么呢,只是我要学习一棵树而已,你看看你原来是在外上学习一个FX,现在T就是你的学习目标就是这个FX,不同的是在哪儿,不同的发生的变化在于你的数据集发生了变化。

你不再是在原数据及外上进行一个学习,而是在哪,而是在R上进行一个学习,而是等于什么,看上面,而是等于实际输出Y和上一次那个模型的预测,输出的差值,作为我当前的学习目标R,这其实就解释了。

为什么我们说boosting方法是一个性能,可以趋近于复杂模型的方法的,原因就在于我每一次学习的这个新模型,注意安之类的,T是每一次学习的这个新模型,它学习的对象是非常有针对性的,就是针对于我实际输出。

和我上一次那个模型没学好的那一部分,再去学一个模型,换句话说,我我所有的模型就是在进行X向Y的映射,我在学习过程当中已经有很多的工作,我的钱去工作都已经完成了,或者前序模型都已经做了,都已经完成了。

很好的从一部分X向一部分Y的映射了,我当前要完成的工作,你看我当前这个模型要完成的工作,就是针对我实际输出,和我上一次或者上一轮那个模型没学好的,那部分的学习,所以你会发现它是非常有针对性的。

而我们知道,当我们因为数模型本身的性能其实也不差是吧,只是说他没有那么好而已,如果说你会发现他每一次都是这样去做,其实非常类似于什么,就是我们上学的时候都会有一个错题本,大家都会有印象是吧。

每一次考试的时候,我把那些做错的题目单独拿出来啊,在考试之前做对了的,我就看一眼就可以了,我就有针对性的对那些每一次做错的,或者不对的地方来进一步的加以学习,那你想想,这个时候。

我对你成绩的提升还是有很大帮助的啊,这就是说啊,其实你会发现如果有了这个认识以后,所谓的前项分布算法啊,所谓的前项分布算法就退化成了一个,每一次我只需要学习一个新的决策树的过程,而只是需要做的一点调整。

在于我每一次学习的这棵新的决策树,的数据对象是不一样的,不是每一次都是在外上学习,而是在Y减去我上一轮那个模型之后,没学好的那一部分,作为我的学习目标,每一次我都这样过,每一次上来之后。

我先计算一下Y减去FM减1X剩下的这个差值,没学好的这一步我在学它,然后把学习的一部分的模型,加入到FM减1X里面去,然后再计算Y和FM的差值,我FM加一再针对Y减去FMX的时候的差值,再进行学习。

性能会不断的,你想想那那那那错的部分越来越少,越来越少越来越少,最后不就趋近于性能更好的一个模型了吗,好了这是非常重要的一个结论啊,非常重要的一个结论,而其中这个R被称之为是残差啊。

这里啊当前模型拟合数据的残差被定义为R,就是我们每一次所谓的残差嘛,就剩下的不好的那部分数据,我们每一次学习的仅针对它展开就可以了,GBDT我们放到茶几boss的时候,我们再见,再介绍这一部分呢。

这个和后面有非常强的关联性啊,这个地方先留在这儿啊,其实内容也不多了啊,但是呢也非常重要,我们下次讲到查理boss的时候,我们继续再把它展开好吧,这样的话我们今天的内容,我们就是这些内容呢很多啊。

包括D3C4。5和卡特树的生成啊,特征选择以及呃这个减脂啊,下面呢包括我们的这个boosting的,加法模型和前项分布算法,看这部分还有什么问题吗,决策树的回归问题是决策树的回归问题。

已知是个老大难问题,看看决策树的回归,回归回归回OK啊,我们以身高为例啊,举个例子,身高我们知道是连续值,但是即使是连续值呢,因为你这个地方是数据集,数据集,比如说我们还是这里的N等于60。

我们只有只能采集到60分身高,那参照采集到这里时的身高呢,可能比如说有1。92,我们以米作为单位啊,1米92,然后1米68,1米73呃,1米811米呃,五九好吧,然后1米77,1米66啊等等等等。

虽然说是连续值哈,没问题啊,他带小数点吗,虽然说是连续值,但是你采集到的也就是60分这样的值,你就采集到60分这样的值,那这个时候呢我们以身高这个特征,在所有的这些值上,我就可以进行60次的一个划分。

怎么划分啊,第一次划分为1。92,作为一个划分位置,把它划分成小于1。92的,和大于1。92的啊,简单点说你比如说你看这个极限值,你分到哪吧,比如说你化成小于等于1。92的,然后化为成大于1。92的。

这个时候是一种划分,还可以根据1。68,划分成小于等于1。68的,然后大于1。68的,根据1。73,你也可以划分成小于等于1。73的,大于1。73的,你会发现啊,在这一个特征上,我就可以进行60次划分。

这身高特征,假设我还有一个特征,身高还有体重,体重比如说我们以这个啊公斤啊,公斤的话,比如说呃60kg啊,80kg嗯,72。5kg嗯,100。6kg,然后55kg等等等等等,同样的道理啊,同样的道理。

我们即使是离散值啊,即即使是连续值,因为它是取之集合有限,所以可以根据不同的取值,可以把我们的取值空间进行划分,这就解释了第一个问题,就是关于这里的特征以及特征上的取值的问题,任意一个特征。

即使你是一个连续值,因为它的取值有限,所以就可以把当前的特征化成两部分,一个小雨的,一个大于一个小雨的一个大雨的,一个小雨的一个大雨,这是空间划分的问题,空间划分完了以后。

下面的问题就是空间的输出的问题,就是说比如说我们以身高这个特征为例,比如说我们以1米73这个身高为例,我们就可以把特征划分为小于等于1米73的,和大于1米73的,这里面是若干个取值对吧。

比如说这是1米92,那个1米92在这1米83在这1米77在这,这是那个1米73,那好了,那么既然我们划分成了两个子空间,我们前面讲到过,决策树,无非就是输入空间的划分以及划分空间的输出,问题。

就在于我怎么去确定这个空间的输出的问题,最简单的方法就是我们把落在这个空间里面,所有的值加起来取平均值,假设啊求个平均值是1米7零,那这个时候你会发现我根据身高这个特征,根据1。

73这个这个这个什么这个呃,取值划分成了两个空间,小于1。73的,得到一个1。70,大于1。73的,比如说是1。82,好吧嗯,这个时候我们就有了空间的划分,以及空间所对应的一个输出。

我们身高上课也是这样做,注意啊,这是身高上的一个1米73的位置,我所有的点是不是都可以这样做,然后呢这只是在身高上,我体重上是不是也可以这样来做啊,这样的话你会发现我在所有的身高上啊。

所有的特征上都可以这样,按照每一个特征值来进行两个空间的划分,那好了,既然我可以这样做,我就把这样的所有的情况都考虑出来啊,都做一遍,都做完一遍以后呢,因为我们知道每一个空间都有一个特征,空间取值。

而每一个空间里面又是说看个点,那我再计算一下所有可能情况里面,所有这些空间里面的点距离,这个输出值的差值,差点使得这个差值算出来以后,我去找所有那些差值里面最小的那个。

那么它所对应的特征以及特征上的那个取值,就作为这里的JS,这就是完成了一部啊一部特征的选择,以及特征上的取值的选择,那下面怎么办,其实类似啊,身高做完了以后,下面就是除了身高以后。

在其他的特征上一次再做上述的过程就可以了,回归数哈其实和分类数是一样的啊,只不过呢就是它的这个嗯特征分裂呢,需要遍历所有的数据集,是个挺麻烦的问题啊,其他的也就没什么太大问题,看看还有什么问题吗。

OK那这样的话我们今天的内容就到这吧,如果大家有什么问题的话,我们可以在群里在一块提出来,我们在讨论,好吧如果没有问题,今天我们就到这吧,啊有些人能够理解又不理解,不知道该如何自处,那就是没有理解啊。

这个你放心,不能够期望于你听这么一遍,就能把这些内容能够全部理解,这也是不现实的呃一种预期,所以回去以后啊,方法是什么,就是把这些材料啊,至少把这些材料你需要把它再读几遍。

如果觉得这些材料这个理解不是那么清楚呢,就是李航老师的那本书啊,你拿出来之后再再再再仔细的,其实我们这本其实我们所有的材料内容,基本上都是属于这本书里面的材料啊,只是我们把它做了一些经验。

因为我们的时间有限,所以结合那本书里面的这些样例,可能会对你的理解有所帮助啊,当然还是那样有问题啊,你是因为你,你需要把它内化成你自己的这些东西啊,就是你需要把它不光是自己能够理解你。

还是你还需要试着能够说服别人,让他们也理解你的这些内容,我觉得这样就是理解了好吧。

OK那就这样吧。

1447-七月在线-机器学习集训营15期 - P15:08-NLP-4-智能问答机器人项目的部署、总结 - 程序员技术手札 - BV1ASste6EuZ

啊,今天的话是我们这个智能问答的这个,第四次课啊,第四次课也是我们的这个最后一次课啊。

那我们先来看一下,我们今天要给大家讲的一个内容啊,呃按照我们之前的这个流程来说的话,今天主要是要会涉及到这个闲聊这一块对吧,所以说呢今天首先第一点啊,会带着大家一起来看一下啊。

关于什么是这个sequence sequence这样的一个模型,那我们要做闲聊对吧,我们这个闲聊是生成式的,那生成式的闲聊呢。

都要采用这个所谓这个sequence,sequence这样的一个模型来做,那这样的一个模型到底是什么样的一个结构呢。

所以说第一部分啊,我们要给大家详细讲一下这个sequence,sequence的一个模型,然后第二部分呢我们一起来看一下这个啊,基于GBT这样的一个闲聊模型,那GBT这个模型呢。

虽然和这个sequence sequence不太一样啊,但是他的这个思路大致是一样的,到时候也会和大家简单说一下啊,他的一个区别,然后第三个部分的话,我们来看一下我们整个项目把它整合在一起。

到底是什么样子的,然后最后呢再一起带着大家来看一下啊,我们会怎么去简单的做一个这样的一个部署,然后第四部分的话是我们的这样的一个总结,好吧,项目总结好,那我们就先进入我们的这个第一部分啊。

就关于这个sequence,sequence这个模型。

好那这边呢首先呢给大家罗列了两篇论文啊,那这两篇paper呢其实是sequence,sequence这个模型才提出来之后呢,就去应用在了这个神经那个机器翻译上,那那个时候应用在机器翻译上面呢。

其实取得了一个非常好的这样的一个效果啊,那sequence sequence这样的一个模型,它到底是在做什么呢,它实际上啊是对序列的一个item,在做这样的一个建模,这里大家需要注意一下啊。

是对序列的item建模,举个例子啊,例如我们的这样的一些文本数据,它实际上是由一个一个的这样的一个词,或者说这个啊字组成的对吧,那这里的这个所谓的一个字或者词,就被称为这个所谓的一个这样的一个ITE。

那我们的输出的一个过程,其实也是对应的这样的一个item,我们举个例子啊,假如我现在想去做这个所谓的一个新闻的,这个标题自动生成,那我给定一篇新闻对吧,然后给到咱们这个模型,那输入给模型的。

实际上就是我们的新闻的诊断内容,一个一个的这样的一个字对吧,我们给到了模型,最后我们的模型呢,再一个字一个字的把我们的标题啊,进行这样的一个输出,这就是对我们的这个item来进行一个建模啊。

因为我们下面这里这个动图我们看一下啊,左边是我们的一个输入啊,我们这个输入我们再回退一下,一共是有三个item对吧,一个一个的进行一个输入,然后给到了我们这样一个sequence。

sequence这样的一个模型,最后呢我们这个模型再一个一个的啊,进行这样的一个输出好,这就是我们这样的一个sequence,Sequence,这个模型的一个啊整体的这样的一个结构啊。

这里大家需要注意一点啊,就是咱们这个sequence sequence的模型,并不是说你的输入和输出它是一个等长的,不一定啊,像我们刚才说的这个啊,生成标题的这样的一个情况。

它实际上输入文本肯定是很长的对吧,然后我们的输出文本实际上是很短的啊,那对于我们这个啊动图来说也是啊,你看输入的其实就三个item,那输出的话是四个items对吧,好就是这样的一个形式啊。

好我们继续往后面看啊,那sequence这个sequence这个模型呢,它的内部结构到底是什么样子呢,我们来看一下啊,它的内部结构啊,其实分为了两个部分,例如下面这里这个图。

它这个绿色的这个部分呢被称为这个encoder,那紫色这个部分呢被称为咱们的这个decoder,那这个encoder和decoder是用来干什么的呢,首先呢我们这个encoder是用来处理。

每一个时刻的一个输入序列的,就是说我们会把我们的一个输入值,先给到我们的这个encoder,那encoder经过它一系列的这样的一些特征提取,就会得到一个这样的一个所谓的,上下文的一个context。

这样的一个值,或者说这样的一个vector,那这样的一个vector得到之后呢,我们又会把这个vector,或者说这个context,给到我们紫色这个部分的这个decoder。

那decoder呢在一个接一个生成一些新的,输出的一个序列,我们可以看一下这个动图啊,首先输入值给到我们encoder好,encoder这个时候输出了这样的一个context context。

这个时候呢context再给到我们的decoder,给到decoder,然后decoder再进行这样的一个输出,好这里大家需要注意一下啊,啊这里我们刚刚可以看到啊,这里有这样的一个context对吧。

Context,那这里这个context呢就是咱们输入序列的一个,你可以理解为就是它的一个啊,如果是句子的话,你可以理解为它就是这样的一个具向量,只是说经过了一系列的这样的一些,提取的一些特征。

其实这种趋向量可能不是太合理啊,就是一些啊上下文的一些提取出来的,一些综合特征啊,综合特征,那这个vector或者说这个context,它的一个维度呢就取决于你的encoder输出结果。

它如果你的这个encoder使用的是RN这样的,一个结构,那就会存在一个所谓的hidden state对吧,那这个hidden state它的一个维度啊,就和这个context的维度是一样的啊,一样的。

所以说如果你希望你这个context的维度,是512维,那你的这个encoder部分的一个模型啊,你这个hidden state,你就需要把它设置为512位好吧。

所以说对于这里这个context的一个维度啊,取决于你的这个encoder,他这个啊隐变量的这个,或者说中间输出的这个值,hidden state它的一个维度,好吧好,这是我们的这个啊context。

我们继续往下啊,那对于sequence,sequence这个这样的一个模型来说呢,它实际上啊是属于这样的一个啊,所谓的一个多模态的一个模型啊,多模态的一个模型什么,那什么是一个多模态的模型呢。

啊我们可以给大家简单的解释一下啊,那对于我们的刚才的这个,这里给大家介绍的来说,实际上就是序列到序列,你可以简单的理解为它就是一个text,到站的一个text,那对于这样的一个情况的话。

他是从文本到文本对吧,那如果我们的一个输入是一张image呢,是一张图片呢,然后我的输出是这样的一个text,那这个就变成了什么,从图片信息到了我们的文本信息,也就是说我们的输入内容和输出内容。

实际上是两个方向的,是不同的一个方向,那这样的一个场景,实际上就是咱们那个看图说话对吧,看图说话,这就是我们所谓的一个多模态啊,多模态也就是说我们处理的一个数据,不单单是一种类型的,也可能是多种类型的。

你甚至我可以把这里变成左边,我的输入是这样的一个声音对吧,然后我输出是这样的一个文本,那这个过程实际上就是一个音频识别的一,个过程吧对吧,把语音转换成了一个文字,这就是咱们的一个所谓的一个多模态啊。

多模态,那其实多模态的一个应用场景是比较多的啊,像我刚才这里说的,看图说话啊,还有这个语音转文字啊对吧,还有刚假如我们再把这里反过来啊,如果我们从文本到图片,其实就是啊我给了你一段文本对吧。

给了这样的一段文本的一个描述,让你生成这样的一张图片也是OK的对吧,所以说这种多模态的场景啊,应用还是比较广泛的好,这就是我们的这个所谓的一个多模态模型啊,多模态模型嗯,那接下来我们就来详细看一个啊。

再简简单解释一下啊,我们从一个例子来看一下,那咱们这个这个sequence second,这个模型在训练的一个过程,和咱们那个预测的一个过程,有什么样的一个区别呢,啊我们这边举个例子啊。

就是我们以这个翻译来作为这样的一个例子啊,我们的翻译的话,就是从我们的这个文本到我们的一个文本对吧,那对于SENCESENCE这样的一个模型来说,它到底是在做什么呢,我举个简单的例子啊。

啊首先呢我们这边是有这样的一个中文啊,中文这是我们的一个中文,这个里面呢可能有一个单词,有一个单词啊,假如是你这个单词啊,表示你这个单词,然后呢我们这这个是我们的中文啊。

这个呢是咱们的一个context,这是我们的context啊,那我们首先第一步呢是把我们的这个数据啊,映射到这个context空间当中的某一个分布上对吧,或者说context是个分布的某一个位置当中。

假如我们现在做的是这个中英翻译,那接下来呢我们就会把这个context啊,映射到咱们的英文上啊,英文上,假如我们这边的英英文是U对吧,U那我们就会把这个点啊对应到这里啊,对应到这里。

如果我们现在又有了另外一种语言,比如咱们这边又有一种啊叫日语,好吧,我们这边也有个日语,那日语这边也有一个点,那这个点对应的也是你这个字,那这个sequence sequence会怎么做呢。

它其实就是把这个context啊,映射到日语这个分布当中的这个点上,所以说second second模型啊,实际上啊就会包括了两个部分,第一个部分的话就是咱们刚才说的encoder。

先从我们的原始输入数据,映射到咱们context这个空间,那第二部分的话就是从我们的context啊,在映射到我们的这个目标语言的这个空间对吧,那接下来我们就来啊,详细看一下这个模型。

在训练过程和咱们的这个测试过程,它的一个整体的一个流程大概是什么样子的,嗯我们这边就与这个这个句子啊来举个例子,例如我现在有一个叫做今天天气很好,这个句子啊,我会把它翻译成英文。

那就是today that is good,对吧,假如我们现在的这个encoder,和咱们的一个decoder,都是这样的一个嗯类RN的一个结构,那我们的一个输入是什么样子呢,好这是我们的一个输入啊。

那对于第一部分的话,我们肯定输入就是今天对吧,今天好,给到我们的第一个节点,那第一个节点,经过咱们一系列的一些处理之后呢,然后给到我们的第二个节点,给到我们第二节点,然后继后继续啊,继续就给到了我们的。

咱们的一个第三个节点,给到了咱们的一个第三个节点,那这一个部分呢就是咱们的一个encoder啊,这个部分就是咱们的encoder,那这个encoder最终会得到这样的一个context对吧。

context得到这样的一个context,那我们会把这个context啊,再给到我们的这个decoder,Decoder,好那这个点就是一个比较关键的点了啊。

那首先是我们decoder第一个节点的一个输入值,那我们抵扣的第一个节点到底应该输入什么呢,这就是一个比较关键的问题了对吧,我们并不知道我们第一个节点该输入什么不。

而且我们该如何告诉我们的decoder,这是我们第一个节点呢对吧,这些都是一个问题啊,所以呢通常啊在第一个节点,我们通常都会输入一个所谓的一个,起始符的东西,起始符这个东西就有点像。

我们在第一次课给大家讲的时候,我们需要去构建词典对吧,可能会涉及到一些比较特殊的一些标记位,例如咱们的这个padding补充位,比如我们的这个UNK未知词的这样一个,替代服对吧。

那这里这个S表示就是star啊,star就是开始符,就是告诉我们的这个decoder,哎你现在是第一个位置,是咱们的一个起始符,OK那有了起始符之后呢,我们这边就会进行一个输出啊输出。

那这里输出的实际上就是咱们的today's对吧,Today's,Place place,Ok,那我们继续往下啊,继续往下,对于我们先看我们训练阶段好吧,我们先看训练阶段,那训练阶段的时候。

我们理论上来说就应该有两个输入,第一个输入的话是我们encoder一个输入,第二个输入的话就是我们的decoder的一个输入,最后我们的输出的话就是decoder的输出对吧。

那我们encoder的一个输入,就像刚才说的,首先呢我们会有一个起始符,其次啊我们会把这些值啊按顺序给添加进去,Todays,这里是TODAYS啊,那这里输出的就是weather对吧。

那咱们这里啊输入的就是weather,这里输出的话就是is,我们继续往下啊,那这里输入的是is,那这里输出的话就是咱们的一个good对吧,好到这里的话,实际上我们这边的decoder的一个输出。

已经输出完了,但是啊我们的一个输入实际上还没有输入完嘛,对吧,我们这里还需要去添加进去,这里就是咱们的good,而最终呢,我们输出的就是一个所谓的一个结束符,好吧,结束符好,我们在啊回过头来再看一下啊。

首先是我们的encoder,encoder的话,我们的一个输入是今天天气很好,并且按顺序进行一个输出的和输入的对吧,这是咱们RN的一个结构啊,RN的结构,然后得到我们的context。

那就然后呢是我们的decoder decoder的一个输入,看先看一下输入啊,输入我们需要在我们的原始句子,上面添加一个起始符,一个起始符,然后呢我们在预测的一个过程中啊。

我们起始符预测输出的是today's,然后在下一个节点的时候,我们输入还是today's嘛,然后呢这个时候再来预测我们的weather好,再下个节点输入的是weather,要输出的是is。

直到我们最后一个节点啊,我们输入是good,当我们的模型输出一个and符号的时候,我们整个流程啊就结束了,也就是说我们必须让我们的模型输出,当前是咱们的一个结束符,那在预测的时候呢。

这个啊就是我们的一个label啊,这这个句子,这个句子就是我们的这个label,这就是咱们的一个label,好吧,这个句子就是咱们的一个label,包括我们这里这个起始符。

也是我们最终的一个label啊,那下面这个这是终止符,说错了啊,最终这个终止符也是我们的一个label,那我们的这个起始符加上原始的这句话啊,就是我们的一个输入值,这里各位同学就可以发现一个问题。

我们实际上在训练的一个过程中,我们的输入decoder的输入和输出,实际上啊就等于是差了一个位置对吧,我们这边的这个输出值和输入值,实际上就是相差了一个位置,相差了一个位置啊,咱们这个是输出吗。

这是输入,那输入和输出只是相差了一个位置,那这个位置就等于是填充了一个所谓的一个,起始起始符,让他错开了一个位置呃,最后预测的时候啊,预测的是咱们的这个结束符,结束符,这是咱们的一个训练过程啊。

训练过程,那预测过程又是什么样子呢,预测过程我们考虑一下啊,一开始我们只有encoder部分对吧,然后呢在预测的阶段,我们是没有任何输入的对吧,decoder阶段是没有输入的,那这个时候。

如果我们想让我们decoder进行一个输出,该怎么做呢,还是一样啊,我们先给它一个起始符,这个时候啊模型预测出来today's,接下来需要把这个today's作为输入,给到我们的第二个节点。

我再说一遍啊,第一步我们会给decode一个起始符,并且我们会得到context,这个时候呢我们输出了today's,那到了第二个节点,我们会把输出的这个TODAYS,作为第二个节点的一个输入。

然后来进行预测,得到我们的weather,再把weather作为下一个节点的一个输入,预测出is,再把这里这个is呢作为下一个节点的输入,最后good也是一样啊,作为下一个节点的一个输入。

最终模型如果输出了这个and,那我们整个预测过程就结束了好吧,整个预测过程就结束了,这就是我们整个这个sequence,sequence这样的一个过程啊,这样的一个过程。

好看看这边有大家有没有什么问题啊,看各位同学有没有什么问题,大家有问有问题就及时提出来好吧,有问题就及时提出来,其实这里的难点啊,就在于咱们的这个训练过程,和我们的这个预测过程。

训练过程和我们的这个预测过程,它实际上是不一样的啊,不一样的,这里是非常重要的,大家一定要把这个训练过程和预测过程,给区分开,那训练过程的话,我们是已知有这个输入和输出的对吧,这个是输入。

这个是咱们的一个输出都是已知的,所以呢我们需要错一位,如果不错一位的话,例如我这里直接输入一个TODA,我们在第一个位置就输入TODA,然输出TODA,这个时候实际上模型已经看到TODA了对吧。

那就没有意义嘛,所以呢我们这边训练的过程中啊,需要添加这样的一个起始符,然后输出的时候呢输出值啊,添加一个这样的一个结束符,结束符,以这样一个错开一个位的一个形式,来得到我们的一个输出值,好吧。

这就是我们的一个训练过程,那对于我们的这个预测过程来说啊,就只输入一个起始符,然后把当前节点的一个输出值,作为下一个节点的一个输入值,然后以这样的一个循环的一个方式啊,进行一个预测。

直到我们得到一个这样的一个终止符,那我们整个的这个预测过程啊就结束了好吧,遇到终止符预测过程就结束了就结束了,这就是我们整个这样的一个sequence to sequence,这样的一个结构啊。

那这里的话我是以这样的一个RN的一个结构,来给大家画的啊,那对于LSTM啊,其实也是比较类似的对吧,也是比较类似的,那对于这个啊唯一区,唯一它和这个transformer的一个区别呢。

就在于transformer啊,他这里就不是这样的一个串行的了,他这里是一个这样的一个并行的对吧,那并行的他又是怎么处理呢,待会我们再啊,下面的部分会再给到大家讲,好吧好,这就是我们今天要给大家讲的。

这个第一部分的内容啊,sequence sequence嗯,核心点就是咱们的这个这一块啊,大家一定要注意啊,它是分了encoder和decoder,encoder输出context点到decoder。

然后decode再按顺序进行输出,好吧啊,但是有一点是需要注意的啊,你不管是这个类RN结构,还是transformer的这样的一个结构,在预测阶段还是得这样的一个一个词,一个词的进行一个输入输出好吧。

毕竟预测阶段,transformer也是没有办法达到,你所谓的一个并行的一个处理好吧。

这里大家需要注意一下啊,需要注意一下好,那接下来的话,我们就来进入到我们的这个第二部分啊,就是说使用咱们的这个GBT,来做咱们的这个闲聊啊。

OK那在我们之前课程当中呢,我们给大家讲过了这个transformer,encoder部分对吧,这一个部分啊,它的核心内容就是在这个mari had腾省对吧,Money,I had tention。

那他的decoder和这个encoder它有什么区别呢,它最大的区别就在于这个部分啊,Musket mari had attention,在于这个部分,你看其实这一部分都是一样的嘛,这一部分对吧。

这一部分它都是一样的,只是这一部分啊,多了一个这个所谓的musket muli head tension,那这里这个musket money,i head attention到底又是什么东西呢。

好我们就一起来看一下啊,一起来看一下,嗯我们接下来考虑一下啊,对于我们的transformer来说,它最重要的一个部分实际上就是咱们的一个啊,腾省这里对吧啊腾省,那在attention的时候呢。

我们需要把这个Q和K进行一个相乘对吧,我们会把Q和K进行一个相乘,然后得到这样的一个所谓的一个attention matrix,Attention matrix,那我们考虑一个问题啊。

那对于我们这样的一个序列,生成的一个模型来说,我直接让我们的Q和K进行相乘,举个例子啊,假如我们现在这里这个句子,人工智能我要输出人工智能这个句子,那首先第一步我们输入的是起始符对吧,输入提示符。

然后呢我想输出的是咱们的人这个字,但是啊但是如果按照我们之前的逻辑来说,我们的这个attention,会让我们的这边的Q和K进行一个相乘对吧,那相乘的一个过程中,我们看一下啊,这里的这个人。

这里的这个人实际上啊是可以得到这句话,所有的相关的词的一些权重的,例如这里的起始符,包括这边的人工智能这四个字对吧,对于人这个字来说,它实际上都是可以得到对应的一个权重的对吧,这些权重都是可以得到的。

都是可以得到的,那理论上来说啊,我们的人这个字他只应该拿到起始符S的权重,那对于人工智能来说。

这些权重应该给它为零才对对吧,就像我们刚才的这个sequence。

sequence这边来说,我们的一个模型在decoder阶段,一开始只能看到我们的起始符对吧,看不到其他信息,看不到其他信息,那我们的一个数第一个节点的一个输出值,理论上来说只应该和我们的上文。

和我们的这个起始符有关系啊,你不能让前面这个节点看到,后面节点的这些内容对吧,但是在我们的这个transformer的这个,attention部分啊,attention部分,我这个人字实质上啊。

是可以关注到所有的这些字的,那肯定是不行的嘛对吧,那包括弓这个字,你看我们做腾审的时候,这些地方也是全都可以关注到,理论上来说,对于公这个字啊,它不应,他应该把后面这三个字的一个权重置为零,才对对吧。

如果啊如果我们这些权重都不是零,如果都是有权重的,那就存在了一个所谓的一个标签泄漏的,一个情况了啊,举个例子啊,假如质这个字对吧,我看到质的时候,我应该啊只能看到前面的这个起始符,人和工。

然后让模型来输出质这个字对吧,但是现在我输出质的时候,我已经提前能看到人工智能整句话了,那你输出这个质实际上意义就已经不大了对吧,意义就已经不大了,所以说归根结底啊,就说我们在解码这个过程中啊。

我们只能依赖于当前节点之前的一些内容,不能依赖于之后的一些内容对吧,那如何解决这个问题呢,这就是我们的一个mask mask mask,那既然如此,我们就把这些地方啊权重应该是零的。

这些地方我们搞一个mask把它给遮住嘛,然后把这些地方的一个权重全部置零,也就是右边这个图,我们把紫色这些地方啊,紫色这些地方的权重啊全部改为零就OK了啊,就OK了。

那这个呢就是咱们所谓的一个musket,Musket,Money head attention,好吧,这就是我们的一个mask,这就是我们的一个mask,其实思路还是比较简单的啊,思路还是比较简单的。

只要我们把这个部分全部遮住,也就是说我们只需要生成一个全是零的,这样的一个,然后其他位置是一,我们只需要生成这样的一个矩阵,然后呢我们再把这个矩阵啊。

和我们的这个attention matrix进行对位相乘对吧,相乘之后啊,是零的这些位置的值就全部变成零了吗,是一的位置的这些值,还是原来的这个所谓的一个权重对吧,就以这样的一个形式啊。

来达到了我们的这个,防止我们的所谓的这个标签泄漏的,一个情况发生啊,这就是咱们的这个decoder部分好吧,decoder部分好,那抵扣的部分的话,我们这边呢简单看一下啊。

首先呢抵扣的部分的一个输输入啊,就是咱们的一个啊,你可以假设我们现在在做一个这个翻译啊,从中文翻译到英文,那这个decode一个输入就是咱们的一个英文啊。

把这个英文做咱们的QKV的CALATENTION,然后呢继续往下啊,往下之后这里也有一点点的一个区别啊,那这个时候我们得到的值是V好吧,然后这边呢还有一个Q和K,那这里这个Q和K呢。

实际上啊是从咱们的encoder这部分给过来的,encoder部分给过来的啊,这里是大家需要啊注意一下的,这里是大家需要注意一下的,诶这里好像有点不太对啊,这里有点不太对嗯,我们的这个这个Q和K啊。

这里这个Q和K,首先呢我们QK是去计算这样的一个权重的,对吧,去计算这样的一个权重的,所以呢我们应该把这边写成,把这个写成可以吧,然后把这个写成,也就是说其实这个箭头不应该这么画啊。

啊把这把这个写成T可以,这个写成V这样子会比较合适啊,这样子会比较合适,也就是说我把encoder阶段的这个Q,和咱们decoder阶段的这个K进行相乘,拿到了一个权重对吧。

然后再对我们的这个输入值的V,进行这样的一个加权,然后得到了我们加权之后的这样的一个值,然后继续给到我们的,咱们的这个后面的模型结构啊,进行进一步的这样所谓的一个特征提取,好吧。

这就是我们整个这个decoder阶段,decoder阶段,好看一下啊,有没有什么问题,各位同学看一下有没有问题啊,啊有问题就及时提出来好吧,有问题就及时提出来呃,其实对于这里来说。

可能会理解起来有一定的一个难度啊,这里理解起来可能会有一定的一个难度嗯,也就这个mask,这里mask这部分啊,可能理解起来会有一定的一个难度啊,我这边也简单再重复一遍啊。

因为这个东西其实每次我在讲这部分的时候,都会讲很多遍啊,有些同学会觉得理解起来比较困难啊,比较困难,我们这边再简单重复一遍啊,还是这句话啊,人工智能那,人工智能,我们假设啊我们输出的是人工智能结束符。

我们要输出这句话啊,我们要把这句话进行输出,就是人工智能结束符进行输出,那我们通常该怎么做呢,在我们的sequence sequence模型来说,就是输入一个起始符对吧,输入这样的一个起始符。

OK那输入起始符那行吧,那我就有这样的一个起始符,然后接上人工智能,但是这边是没有终止符的对吧,没有终止符的,那这个东西的话,大家可以简单的看成就是咱们的一个输入啊,这是咱们的一个输出。

OK接下来呢我们考虑一下啊,在我们的这个,transformer当中啊,我们主要的核心是咱们的attention,我们需要把我们的Q和K进行一个相乘对吧,我们可以把这边看成1Q。

这边可以看成咱们的一个K,那Q和K进行相乘的一个过程中的时候,假设我们现在要输出人这个字,那输出人理论上来说只依赖于起始符,不依赖于后面的人工智能,如果输出人的时候,你已经看到了人,然后你来输出人。

那其实意义已经不大了对吧,存在了所谓的一个标签泄漏,标签泄漏,所以呢你就要把相应的人,还有工智能这四个字的一个权重全部置零啊,全部置零,我现在只考虑起始符的一个权重,只考虑起始符的权重。

那对于弓这个字来说也是一样啊,我只考虑我的起始符和人,那对于弓智能这三个字,那我权重不需要智力,那对于质这个字来说也是一样啊,那就考虑前面三个字的权重,后面至零能一样啊,前面四个字的权重考虑进去。

最后一个字的权重指零,那对于结束服务来说,那就是会看到所有内容嘛对吧,看到所有内容,那我们就不需要把权重置零了,我们再回到这边的sequence sequence来看一下,那是不是这样的一个情况呢。

对于预测我们的第一个词对吧,只需要看到起始符,那对应到刚才就说我只要起始符的一个权重,好预测,第二个咱们预测我们的第二个词weather的时候,我实际上只有起始符符和第一个词的一个权重。

也就是骑士服和today's对吧,对于预测is的时候呢,就是起始服,Today's weather,然后最后一个终止符的时候,我们可以看到啊,就可以看到整个句子,包括我们的解释符对吧,好。

这就是我们的这个啊GBT的这个mask的monty head,tension的一个核心内容啊,核心内容实现的话就是生成这样的一个矩阵啊,紫色部分是零,其他部分是一。

然后和咱们的这个attention matrix进行对位相乘,进行对位相乘,就能得到我们最终的这个所谓的被mask过的,这样的一个attention matrix,好吧。

这就是我们的transformer的一个decoder啊,Decoder,啊,那理解了这里这个GBT这样的一,个思想之后呢,或者说理解了咱们transformer的这个。

decoder的一个切思想之后呢,我们就简单来说一下这个GPT这个模型啊,那GBT这个模型,相比于昨天给大家讲的这个BT来说,它最大的区别就在于BT呢。

它实际上是transformer的这个encoder部分对吧,encoder部分,那GBT来说它是什么呢,GBT其实,严谨一点说啊,它应该是它也属于transformer的encoder,但是啊。

但是他的这里这个attention换成了所谓的这个,Musket mari had a tension,好吧,他换成了这个所谓的musket mari had a tention。

那这个GBT这个模型它相比于BT来说,它最大的区别在于什么,BT我们昨天给大家讲过吗,就根据上下文来预测我们被mask这样的一个词,就是完全和我们这里给大家介绍的,是一模一样的了啊。

就是直接按序列啊进行序列的一个输入,输出的一个预测,好简单画一下啊,这是咱们那个BT模型,那我这里可能输入的是X1,这里假设是MAMASK,然后这里输入的是X3,然后这里我们输出mask中的X2。

那对于GBT模型来说呢,GBT模型它输入X1嗯,X2,我应该用起始符表示啊,我这里再加个起始对起始符,那这里呢就输出X1,这里输出X2,这里输出咱们的一个N负,它是以这样的一个思路来的啊。

以这样的一个思路来的,所以说对于GBT模型来说,它实际上它是一个所谓的一个纯正的啊,这样的一个能进行文本生成,这样的一个语言模型,那我只需要给定一个这样的一个起始符对吧,我就能生成这样的一句话。

或者说我给你这样的一句话,你帮我继续进行一个续写啊续写,所以现在啊,市面上很多这样所谓的一个续写小说啊,或者说去对对联啊,很多都可能是用这个基于GBT来做的啊,根据GPT来做的。

好那接下来我们就来一起来看一下啊,那假如我们现在想使用这个GBT这个模型,来生成我们的这个闲聊,我们该怎么做呢,好接下来就给大家简单介绍一下这个dialog,G b t。

dialog b t这篇啊paper啊,他的思路其实也很简单啊,也很简单,就是刚才我们这样的一个输入啊,刚才我们这样的一个思路啊,就我给定这样的一个上文嘛,然后那我不停的输出下一个词。

不停的输出下一个词,只不过我们的输入会稍微变一下啊,那我们看一下它到底是怎么变的啊,首先呢我们呢这边会有一些所谓的一个,历史对话数据啊,历史对话数据我们用S来表示,然后我们用T来表示生成的一个回答。

比如啊这边有个句子叫做今天好点了吗,然后有人回答啊,一天比一天严重,这个时候你就需要生成一句话,那生成这句话就是吃药不管用,去打一针,别拖着对吧,那我们就会把这两句话啊,一起作为输入给到我们的模型。

然后让模型来预测下一句话,就是这样的一个思路啊,就是这样的一个思路,那假如我们现在有很多这样的一些,闲聊的一些语句对吧,那我可能有S1,那一直到SN,那我把这些就作为我们的一个输入对吧。

给到我们的一个WLGBT这个模型,然后最后输出了咱们的这个T也就是这句话啊,这句话,那当我这句话输出之后呢,这个时候呢实际上啊就有了S一一直到SN,然后加上T这个时候用户又会输入菊花对吧。

假如我用这个表示T1啊T1,那这个时候呢用户又会输入一句话,那用户输入的话,假如我们用T2来表示啊,T2表示用户输入这句话之后呢,我们又会把这个整体啊给到我们的GBT,然后GBT来输出咱们的一个T3。

然后呢再把T3啊放到整个句子里,再给到我们的这个啊模型啊,最后呢好这里不对啊,应该是这是T3,这是我们的输出的,那还有一句是用户的对吧,T4然后给到我们的GBT,最后来输出咱们的一个T5。

这就是我们整个模型的一个,预测的这样的一个过程好吧,预测的这样的一个过程好,这就是咱们的这个大家LGBT啊,其实啊,大家只需要理解了GBT这个模型的一个思想,就OK了啊。

那DIOGBT关键就在于它的一个输入和输出,需要做一定的这样的一些优化对吧,一定的些优化,那我们训练过程其实也很简单啊,训练过程,你只需要去找大量的这样一些对话数据,然后把它组合在一起,随机组。

然后给到我们的模型进行一个训练就OK了啊,就OK了,OK这是这就是我们的一个啊DLGBT,DOULGBT好,然后这边呢也给到大家了一些啊,如何方便使用这个DIOGBT的一些方法。

然后这边的话有一个开源的一个项目,哎可能有点慢啊,这个GITHUB有时候会打开的会有点慢啊,我们稍微等一会儿,我们稍微等一会,那对于这个模型来说,在2LGBT来说,如果大家自己去训练的话。

可能资源各方面的话可能有不太够啊,这个东西肯定是需要大家使用GPU来训练,训练的啊,首先呢你需要使用这样的原始的一个GBT,然后呢你要去去寻找大量的这样的一些语料啊,所以说这个过程实际上还是一个比比较。

耗时耗力的一个过程,那还好是网上,实际上是有这样的一些开源的一些模型的啊,开源的一些这样的一些闲聊的一些模型啊,可以看一下啊,有这个的话,就是完全基于这个咱们说的这个DLGBT,来做的这样的一个开源的。

并且呢,他已经在这些他提供出来的这些闲聊语料上啊,已经进行了一轮训练,我们可以看一下啊,他这里有一些例子啊,谢谢你所做的一切,然后机器人回答啊,你开心就好,他又问了一句开心嗯,因为你的心里只有学习。

就是以这样的一个形式啊,就进行一个输出,好这里是一些生成的一些样例啊,生成的一些样例,这些都是一个咱们的一个模型进行生成的啊,模型进行生成的,嗯那我们使用的时候该怎么使用呢,很简单啊,我们使用的时候。

不需要大家直接去训练这样的一个模型,只需要去嗯,大家可以来这里啊,把他的这个模型给下载下来,然后把这个代码啊,首先是要把这个代码给拉下来啊,这个代码给拉下来,然后去把这个他的这个模型这一块啊。

模型这一块给下载下来,然后我们也可以看一下我们这块代码啊。

我们这块代码,实际上已经把他这个模型给集成进去了,我们简单看一下,啊这里就是它的一个代码,我已经把他这个代码给拉下来了啊,已经给他拉下来了,然后大家第一步呢,是需要去把这个模型给下载下来啊。

也就是说他这里有这样的一个链接,大家需要去这个链接当中把模型给下载下来。

然后放到我们的这个目录下,好吧,放到我们这个目录下,啊打,然后这边,到时候大家直接用我这个代码就OK了啊,我这都是帮大家准备好了,大家唯一要做的就是把模型下载下来,然后把模型给放进去好吧。

从这里下载下来,然后把它给放进去啊。

放进去好,那接下来的话要再和大家说一个内容啊,要给大家讲一个内容,那大家有什么问题就打到公屏上好吧,我们这个统一进行解答,好接下来再给大家说另外一个内容,啊啊等这个内容讲完了,我们再来看我们的这个代码。

也就是咱们的一个所谓的一个解码解码,刚才我们的模型就是这样一个一个的词,进行一个输出的对吧,那问题是我在输出的一个过程中,到底是怎么输出的呢,这个东西实际上是需要我们进行一个思考的。

我们这边有一个这样的一个起始符对吧,用模型进行一个输出,然得到了这样的一个这样的一个词,然后给到下一个节点,那下一个节点再进行下一个词的进行一个输出,那这里这个输出到底是怎么输出的呢。

可能各位同学都知道啊,实际上啊,这里就是针对于我们的词典,做了一个所谓的soft max,Soft max,比如我们词典啊,假如有1万个1万个词啊,假如我们这词典有1万个词,那就等于我们在这里啊。

做了一个所谓的1万分类遗忘分类啊,然后呢我们去找这个概率值最高的那个词,然后再把它给输出,这是一种解码方式啊,这种解码方式呢被称为grade search,也就是说我每次输出的时候啊。

我都去找我们的这个概率最大的这个词,但是对于这样的一个解码方式来说,有什么样的一个缺点呢,大家觉得,实际上我们考虑一下啊,如果我们当前这个节点,输出的是咱们的这个W1。

然后我们把we1作为下一个节点的一个输入,然后输出了W2对吧,要得到我们W2W2,再给到下一个节点啊,作为咱们的一个输入,得到W3,但问题来了,这里这个序列啊,我们输出的W1W2W三这个序列。

它最终它的这个是全局最优解吗,这个不好说对吧,因为我们每次考虑的都是当前的这个最优解,那假如我现在这里输出的是W撇一,我把这个W撇一给到我们的第二个节点,可能输出的就不是W2了对吧。

我输出的可能就是W2撇,那可能W2撇会对于整个序列来说,输出序列来说,它可能是更合适的这样的一个解对吧,所以说对bem search这个解码方法来说啊,它并不是比较好的一种方式啊。

并不是比较好的一个方式,他可能没有办法得到一个所谓的一个,全局最优的一个解啊,那这个时候可能有同学就会说啊,既然如此,那我就把所有的一些情况都考虑进去,对吧啊,假如我现在词典有1万个词。

那我先把1万个词的一个概率值,对应的一个概率值对吧,得到好,我再把这1万个词分别给到我们的第二个节点,然后再针对这1万个词,再分别输出这样的一个结果,然后最后再去看我们的全局最优解,哎这样也是OK的。

这样也是OK的啊,但是这样的一个情况呢,就会导致我们的时间复杂度特别高对吧,时间复杂度特别高,这个我们是没有办法接受的啊,时间复杂度实在是太高了啊,太高了,那为了,能尽可能达到我们所谓的一个全局最优。

并且啊我们也要保证我们的速度不会太慢,那这个时候呢,我们就可以尝试使用我们所谓的一个beam search,这样的一个方法,这个beam sir是什么意思呢,就是说我每次在每个节点的时候。

都选择概率值top k的一些词出来,例如在第一个节点,如果是grad search,我选择一个词,如果我要考虑全局的话,我可能要要把1万个词都考虑一遍对吧,那OK啊,我折中一下,我选前K1个词。

例如我选前三个词,然后再把前三个词的一个概率值,给到我们下一个节点,由下一个节点啊,在针对这三个词,再分别输出它的一个概率值对吧,再分别输出这样的一个概率值,好这就是我们的一个beam search啊。

Be search,接下来我们就来详细看一下啊,我们详细看一下这样的一个啊,beam search这样的一个解码,这个过程到底是什么样子的啊,哦我们还是以刚才的那个例子为例,好吧。

就是那个today's weather is good啊,啊那首先是我们的一个输入是起始符嘛对吧,起始符,那我们的起始符的话,假如我们现在beam search有个top k,假如我们让这个K等于三。

好吧,我们让K等于三,OK3的话,也就是说我们在第一个节点,我们会输出三个词啊,我们会输出三个词,我们先啊我随便写啊,随便写,假如我是第一个词,输出的是the呃,第二个输出的是weather。

呃第三个可能输出的是today's,不对吧,pk那,啊我这边再随便写写啊,随便写写,那假如说对于the来说,它可能这边又会输出三个词对吧,我们把这个the给到下一个节点。

那这个对应这个the就会输出其他的三个词,好下面可能又是,Today,然后有可能也是good,那针对于weather这个词来说,它也会生成三个词对吧,可能有good啊,可能有BD。

可能还有些什么其他的today,好那对于最后这个today的话,它也会生成三个词,对应的可能是whether,I go,还有些although,好吧,有可能这样的一些词,OK那接下来我们会怎么做呢。

好啊,我们接下来啊,就来看一下它对应每一个词的,这样的一个概率值啊,概率值啊,我们可以这么做一个计算啊,理论上来说,如果我们要算一个序列,他肯定是是这样子啊,我们假如有X一一直到XN。

那如果我们要算这个序列,这样的一个概率值的话,实际上是需要把每一个词出现的一个概率值,也就是呃PX一一直乘乘到PXN对吧,也就是它是一个累成的一个过程呃,下1PXIPXI是这样的一个过程啊。

这样的一个过程,那实际上我们可以取个log嘛对吧,取个log的话,那最终啊这里这个累乘就变成了这样的一个,累加的一个形式了啊,累加的一个形式就变成这样的一个形式啊,我们可以取个log,取个log。

主log就变成累加的一个形式,那我们就可以把每一个这样的一个概率值啊,我们都取一个log,取个log,取个log,假如啊取完logo之后呢,假如the weather和today's。

它对它就会有一些对应的一些分数值嘛对吧,假如这个是负的1。3,这个是假如负的1。2,然后假如这个是负的一点一好,那我们首先肯定是要去啊,再去算一下好这个词到下一个节点之后,对应的一些分数值。

假如这个是负的0。7,这个是负的0。5,这是负的1。7,哦还有1。7,好这是假的,就是我们的一个分数值,OK那下一步我们会怎么做呢,我们要把这个分数和这个分数给加在一起嘛,对吧。

因为我们取了一个log log之后呢,就取加和就OK了,好那这里就变成了一个二,这是负的2。1,这是负的2。9,我们再看下面啊,哦这里错了,这里错了啊,这是三,这是负的2。9,这是负的2。4,是负的2。

1,然后我们再看一下啊,这个是负的1。9,这是负的2。2,最后这个是负的2。3对吧,2。3,OK那接下来呢我们就应该去找一下啊,哪些分数是最大的对吧,哪些分数是最大的,因为我们是要取概率最大吧。

概率最大好,我们就去找哪些概率是最大的,我们找一下啊,呃首先是这个吧对吧,这个1。9,这个这是第,这是第一大的,这是第一大的啊,然后这是第二大的,然后还有个2。1的啊,这里有两个啊,这里有两个。

那我就随我随我随便选一个好吧,这种情况就随便选一个好,假如这里我们就选出了三个,然后呢我们就会把这三个词,也就是today,这里这个weather,还有这里个weather要继续给到下一个节点啊。

继续给到下一个节点,然后呢下一个节点啊,这是我们的一个输入对吧,下一个节点呢又会针对于这三个词,又会有分别的三个词对吧,又会有分别的三个词,我们再去算这个分数,看哪一个分数是最大的。

再找出我们所谓的这个top k的这个词,再继续往后面进行这样的一个解码啊,继续解码,那最后可能解码下去,然后这里啊这里可能是有一个is对吧,这个is可能又有三个词。

然后这里可能生成了一个这样的一个good,那最终的话我们的一个输出结果就是,Today weather is good,这就是我们整个想要的这样的一个结果啊,好这就是我们的这个beam search。

好吧,我们的一个beam search,呃那been策这一块是需要大家掌握的好吧,因为对于解码这一块啊,我们大部分使用的都会是这样的一个,beam search的一个方法好吧。

那相比于这个啊grad search来说,他可能嗯速度会稍微慢一些,但是效果肯定会比这个grad search稍微好一些,好吧好,这是我们的一个beam search啊。

beam search嗯啊这边简单提一点啊,啊之前是会有同学问啊,就是为什么这里是负数啊,这里大家需要注意一下,咱们那个啊log函数这个样子嘛,这是一对吧,那么概率值是0~1之间嘛,那就是落在这些地方。

那这些地方对应的指的是负数吧对吧,这个大家需要注意啊,注意好,这个是我们的这个beam search啊,Beam search,那除了beam search呢,其实还有一些其他的一些采样的一些方法啊。

例如啊咱们这里一些所谓的一些采样机制,Top k top,那为什么会需要涉及到一些采样呢,最关键的点就在于啊,beam search其实他最大他也有一定的缺点,他的缺点就在于他回答问题的时候。

有时候会会过于严谨啊,这样会出现一些问题,就是特别是对于闲聊领域来说,实际上我们希望模型能回答出一些,花样比较多的一些语句对吧,不希望它太死板,而且每次回答的内容是一样的嘛。

我们beam search永远输出的一个内容是一样的对吧,那对于闲聊来说,我实际上是想要,你每次输出的内容是不一样的啊,并且啊beam search就是由于这样的一个情况。

他可能会容易出现一些所谓的一些,重复的字和词,如果大家做过这样的一个序列生成任务的话,嗯肯定也遇到过这样的情况啊,就是生成一些重复的一些内容,例如啊举个例子,假如我现在生成了X1。

然后理论上来说我应该继续生成X2X3,但是它可能会生成X1X2,X2X2这样一些重复出现的一些字和词好,那就是因为这样的一个原因啊,我们就会采取一些所谓的一些采样机制。

采样机制也就是咱们top k和top p,那这里这个top k是什么意思呢,还是一样啊,就假如我们现在词典是有1万个词,那假如我们这个K是等于假如等于五,也就是说我会把当前节点啊。

当前节点对应的top k也就是top5的词也选出来,那这五个词会对应五个概率值吗,对吧,就分别对应P1P2P3P4P五,它会对应五个这样的一个概率值,那对应这五个概率值呢,我就会先把这五个概率值啊。

去经过一个所谓的一个soft max,再经过一次soft max啊,那经过这个soft max之后呢,那这五个词它的一个概率值相加就是一对吧,然后呢我再从这五个词当中。

去进行这样的一个所谓的一个根据你的,你可以根据你的这个所谓的一个概率大小啊,对吧,你就可以去进行这样的一个抽样啊,抽样那对于概率越大的刺的话,他被抽象拿到的概率就越大嘛,对吧好,然后呢是top p。

Top,top k的话是根据这个数量来决定,我保留多少次来进行抽样,那top p的话是基于这个概率值啊,假如这个我们这个top p设置是0。9,那假如哎我的第一个词概率最大的这个词啊。

他的这个概率可能对应的是一个啊0。6,然后这个对应的是一个0。2,然后这个对应的是0。1,那这里相加起来就是0。9对吧,那就等于说我会把这三个词给保留下来,然后把这三个词对应的一个概率值啊。

再去做一个所谓的一个soft max,再把它进行一个让他把P1P2P三,它的一个概率值相加在一的这个范围内,最后再对这三个词进行这样所谓的一个采样,拿到其中的这样的一个词,作为我们的一个输出结果啊。

好这就是我们的一个采样机制好吧,采样机制其实说白了啊,就是想去增加我们这样的一个啊,回答的一个多样性啊,多样性可变性,那top k的话就是限制数量嘛,top p的话就是我们去限制概率对吧。

我只保留概率最大的这些词,top k的话就是前几个词啊,前几个词好,这就是我们需要给到大家介绍的一些啊,解码的一些机制啊,不管是这里提到的这个beam search,还是这里的这个解码方式。

这个随机采样的嗯,这个采样的这个top k,或者说top p都是非常重要的,解码方式,大家都需要把它给掌握好吧,都需要掌握,好看各位同学有没有什么问题啊,嗯大家有什么问题就提出来好吧。

大家有什么问题就提出来好,那我们就稍微休息一会啊,我们稍微休息5分钟,休息5分钟,然后待会的话我们就一起来看代码这一块好吧,看代码这一块好,我们稍微休息一会,好我们啊,准备继续上课啊,准备继续上课。

哎今天大家都没有什么问题是吧,嗯大家有什么问题就及时提出来好吧,大家有什么问题就及时提出来,呃问题的话还是尽量在这个啊,课程当中就把它解决啊,好吧。

好那我们就先来看我们的这个代码部分啊,代码部分,啊我们的代码主要是这个部分啊,这个部分啊,这边的话会有一个这样的一个cheat chat,这个方法,然后这边呢有一个啊interact这样的一个脚本啊。

这个脚本,然后这个脚本当中呢有一个chat,chat这样的一个方法啊,有这样的一个全方法,那我们就主要是要看一下这个方法当中,是怎么做的啊,怎么做的,其实我们这边已经给大家写了很多注释了啊。

写了很多注释了,那还是简单看一下好吧,来简单看一下啊,因为这个代码比较多啊,比较多,我们这边就不会带着大家这样去写了好吧,主要是看一下这个代码,好我们来看一下这个代码嗯,首先呢是我们的一个输入对吧。

输入的话就是用户的这样的一个问题嘛,那我当用户输入了这样的一个问题的时候,好我们首先呢会去做这样的一个分词对吧,然后把分词这样的一个结果被存储在这个history,这样的一个数组里啊,存在这个数组里。

然后呢这边会去构建这样的一个输入值,那输入的话我们肯定啊,我们会以这个cii is作为这样的一个开头啊,作为这样的一个开头,那我们这里的话就保持与那个BT那一套啊,BT那一套我们就还是以这样的一个。

还是以这几个标志符好吧,这是CIS啊,作为咱们的一个开头,CR作为咱们的开头,Ok,那接下来的话,我们这边就会进行这样的一个便利啊,便利那便利的时候呢,这边其实可以看一下啊。

啊他会去取这个最大的一个历史长度,这个最大的历史长度是什么意思,就是说我要在我的这个history当中,保留多长的这个历史的这个对话数据,因为我们不可能一直保留嘛对吧,你可以去选择一个最大程度啊。

选择一个最大程度的一个历史记录,来进行一个保存好,那接下来的话我们就会把咱们的这个,history的这个值啊给这样进行一个取出来,然后取出来之后呢,啊这是我们的这个这是我们的一个下标啊。

这是我们的这样的一个真实值,对吧好,那我们主要用的是这个真实值啊,这个具体的一个值,就把这个值呢就放到我们的这个input d当中,然后还要把咱们这个SEP给加进去啊,SEP给加进去。

那这个SEP其实在上节课的时候给讲,BT的时候给大家讲过嘛对吧,就是这个符号啊,这个符号就是用来区别两句话的嘛对吧,用来区别两句话的,那也就是说我们这个输入啊,首先呢我们是把这个CLS标记位给放进去了。

做我们的开头嘛对吧,然后呢把历史数据给放进去了,历史数据给放进去了,然后呢我们需要一个分隔符,把两句话给分开嘛对吧,分隔符好,OK了,之后呢,我们再把这个input啊转换成我们这个tensor。

转换成tens,OK我们继续往下,接下来的话就到了,我们的这个迭代的一个过程啊,首先呢对外面也是有一个这样的一个变量啊,啊generated用来记录我们这个生成的一个内容。

然后呢这边会去迭代最大长度次啊,就假如这个最大长度是50,那就我我就会去迭代50次,OK接下来的话我们就把我们的一个输入啊,这个输入给到我们的这个模型,给到我们模型。

那我们这个模型就是咱们的一个GBT嘛对吧,GBT这个模型啊,GBT这个模型好,这个东西我们待会再说啊,我们先继续回到这边模型,我们待会再说好,给到我们的模型,然后拿到我们的一个输出值。

然后呢我们要把我们的这个输出值给取出来啊,取的时候大家这里是需要注意一下啊,我们取的是啊,这边这边是零是什么意思呢,零因为我们这里这个输出值啊,里面会有很多这样的一个内容,我们可以进去看一下啊。

我们简单看一下啊,G b t,好我们可以看一下啊,我们直接看他的for word方法,它的for word方法,这里实际上会输出输出很多内容,对吧啊,有他的一个如果没有lost,如果有lost的话。

他会输出这样的部分啊,没有lost的话,那输出上面这个部分,也就是说它第一个位置输出的,就是每一个词的站对应的个log词对吧,所以呢我们这边就是需要取它的一个零,取它的一个零,然后呢我们这边是他的啊。

一啊,也就是他的最后一个位置啊,因为我们永远取的都是最后一个位置的。

一个值嘛对吧,就像我们的这个模型这边一样,我们取得实际上是这边这个输出值吗,那假如啊我们看最后一个位置啊,最后一个位置的时候,我们是这个位置的一个值对吧,所以我们要拿一的这个结果的一个值啊。

要拿最后一个位置的一个值,前面这些是我们已经输出的嘛。

所以我们要我们要拿最后一个位置的值,所以这也是一表示的是最后一个位置,对吧好,这就是我们最后这就是我们生成的这个token的,这样的一个捞几次啊,老几次,然后这边呢是做了这样的一个小的。

一个trick啊,就是说如果啊,如果这个词它已经啊,就已经在我们的这个生成的一个结果当中了,我们为了防止它重复生成嘛,刚才也有说,我们其实会容易出现这种所谓的一个,重复生成的一个情况对吧。

那我们就会把这个权重啊除以这样的一个值,把他这个LOGIES啊,或者说这个分数值把它变的稍微小一点点啊,变得稍微小一点点,啊就是这样的一个意思啊,就这样的一个意思,啊然后我们继续往下啊。

然后这边呢还有一个对于一些UNK,其实是做了一些处理啊,也就是说我们不希望让我们的模型去输出,这个所谓的一个UNK啊,那我们就把这个咱们的UNK,他的这个概率值,就把它直接改为这样的一个最小的一个值啊。

那这样的话模型实际上就不会去选择到这个,UNK的一个情况好吧,OK接下来呢这边会有一个这样的一个,所谓的一个top k,top p的这样的一个啊采样的一个方法啊。

也就是刚刚给大家介绍的这个top k和top p,那这边的话我们也不再给大家赘述了,好吧,就根据这里可以输入咱们这个top k和top,P站的两个参数啊,就可以去做这样的一个啊采样啊。

就能拿到我们的这个采样之后的,这样的一个结果,那采样之后,我们刚才有说还要去做这样的一个所谓的soft max,对吧,Soft max,那做了这个soft max之后呢,我们会执行这个函数。

那这个函数是干什么的,它表示的是从候选集中不放回地进行抽取,N个这样的一个元素,权重越高,被抽到的概率就越高啊,然后最后返回元素的这样的一个下标,那这边的话实际上我们只需要抽一个嘛对吧。

只需要抽一个关键点在于啊他权重越高,抽到的这个几率就越高啊,就以这样一个形式呢,我们就生成了我们最终的这样的一个词,然后这里的话会有一个小trick啊,就说如果我们生成的这个词,它是SEPSEP的话。

实际上对应到我们这边就是咱们的一个结束符,也就是说如果咱们生成了SEP了对吧,咱们就直接break了break了,然后我们可以再看一下这里这个循环啊,这里这个循环是如果我们循环了最大长度次。

我们也结束了,所以说对于我们生成的过程中,会有两种结束的一个情况啊,第一种情况就是说,达到了我们生成的最大的序列长度,我们就结束了,还有一种是遇到了我们的结束符,我们就结束了,两种情况好吧。

两种情况OK那如果不是结束符呢,那我们就会把这个next token啊,放到我们的这个generated里面,放到generated里面,好最后的话我们再把这个输入的这个input啊,做一个更新。

把当前的这个next token把它给拼接进去嘛,拼接进去对吧,那拼接进去之后呢,这个东西啊在下一轮循环的时候呢,就会作为新的一个输入对吧,你可以看一下啊,这里是一样的,作为新的输入啊。

给到我们的模型在不停的进行这样的一个迭代,的一个循环的一个生成,其实过程就和这里是一样的啊,一样的,只不过这也是GBT嘛对吧,这是GBT好,最后我们再看一下这里啊,那生成完了之后呢。

我们会把咱们生成的一个内容啊,放到我们的history当中,也就是放到我们的这个历史缓存当中啊,放到历史缓存当中,当我们下一次用户再进行询问的时候对吧,我们这个历史记录里面,就会有之前的一些历史数据啊。

历史数据,好这里的话是把我们生成的这句话啊,把它进行了一个转码啊,把咱们从这这个下标的一个形式啊,转换成了一个文本的形式,最后进行这样的一个输出,好吧,我们可以执行一下这个代码啊。

啊这个这个就是咱们整个解码的一个过程,好吧,解码的一个过程,大家可以自己再来看一下啊,这是报了个错啊,我们看一下这里是没有找到那个啊,我们可以从那边啊,这个没关系啊,我们可以从我们的main函数来看。

稍等一下啊,稍等一下,我们简单看一下这个限量的效果啊,啊就假如这边输入了一个晚上好,啊他问你是啊啊我我就是我啊,我是我是,好啊,我这边竖着,晚上好对吧,让他回了一句,你是,然后我说我是一名老师。

他说哦好巧,我也是一个老师,啊我再来给你教什么的,啊他就说他教数学的啊,就这个意思,好他最后又回答了这这样的一句话,这句话其实是回答的就不够理想了,对吧啊,那我们也可以去重复去问这样相同的一些内容。

啊你可以看可以看一下啊,因为这是我们采用的是这样的,一个采样的一个算法对吧,并且呢我们那个输入会有一些history,所以他每次输出的这个结果是不一样的啊,不一样的,你看我们输入一样。

它这个结果也是不一样的啊对吧,不一样啊,这就是我们整个这样的一个闲聊的一个效果啊,闲聊的一个效果,当然各位同学也可以在自己的,你们自己的这个闲聊的一个数据集上面啊,再去进行进一步的这样的一个训练好吧。

进一步的一个训练好,这就是我们整个啊闲聊的一个部分啊,最后说一下模型加载这里啊,那对于模型加载这里的话,我们使用的是这个transformers啊,在之前的课程当昨天的课程当中啊,给大家说过啊。

transformers这个库的话是目前使用预训练语言,模型比较火热的一个库啊,你可以去它可以支持这个PYTORCH,也可以支持这样的一个特色flow啊,特色flow,那使用的过程怎么使用呢,很简单啊。

直接调用它的这个啊from portrait这个方法,然后把这个模型路径给传递进来就OK了,好吧很简单啊,很简单就可以使用它的一个模型了,好这就是我们的模型的使用这一块啊。

模型的使用这一块,OK那接下来我们回到我们的PPT啊。

回到PPT,那接下来第三部分啊,是我们的整个的这个,项目的一个整合和这样的一个步数啊,项目的一个整合和步数,那之前的课程当中呢,啊我们有去把这个分类模型给加进去了,然后匹配模型和闲聊都还没有加进去对吧。

那我们就,哦我们先关了啊,我们从我们这个里面啊去看一下,好这是闲聊,OK我们就直接从这里进行啊,进一步的一个完善好吧,我们把我们整个流程给再完善一下啊,再完善一下,如果这里是闲聊。

那我们就需要去调用我们的这个chat chat方法,对吧,这个里面的cheat chat方法,OK那我们就导入一下啊,啊就from chechat到这interpret import,看下那方法叫啥啊。

这里有一个cheat cheat方法是吧,好,那我们就import一下这个方法啊,import一下这个方法,然后呢检测到这里是闲聊,那我们就把用户的一个数据对吧,给到我们这个chat chat这个方法。

然后这里呢就会返回我们这样的一个question,question啊,然后我们把这个question给打印出来啊,然后呢我们就可以结束我们的方法了,好break我们用break好吧。

我们用break break的话会结束我们的结束我们的,哦我们不用不用,我们不停加break啊,不停加break,我们要继续让我们的这个循环继续下去啊,继续下去,Ok。

那这里的话我们就如果检测到是大于0。5的,那说明这是闲聊对吧,就调用我们闲聊的一些方法,然后把闲聊的答案给打印出来,然后继续走我们下面的一个循环就OK了,然后闲聊这一块我们就集成好了。

接下来我们看一下这个这一块啊,这一块这是我们上节课啊写的这个啊,但我们上节课讲完这个匹配模型之后,并没有把它给集成进去啊,并没有把它集成进去,那我们接下来就看一下,如何去进行这样的一个集成啊。

我们先看一下,这里是去计算我们的一个相似度对吧,简单注释一下计算相似度啊,这里是去找概率的那个最大,找到我们相似度最大的这个值对吧,然后我们这边做了一个判断,如果这个最大的这个相似度它是小于0。8的。

我们就认为他是没有找到这个答案的啊,没有找到这个答案的好,那如果没有找到答案的话,我们就continue好吧,啊也不需要CTRL,他这边不会执行下面的内容,OK我们继续往下啊。

啊这里的话我们可能就需要改一下了啊,我们这里需要稍微改一下,OK那如果相似度是大于0。8的,那首先呢我们就先去对我们的这个,做一个排序啊,我们取个top10好吧,我们取个top10好。

我们可以调用一下啊,有个叫做OXFORT一个方法啊,调用一下OXFOR个方法,然后呢我们把我们的这个相似度给传递进来,传递进来,这个它是从小到大进行排序的啊,我们可以在前面加个负号。

它就会从大到小进行排序嘛对吧,然后我们就取前十大的,我们把top10给取出来啊,也就是前十大,注意啊,这里返回的是这样的一个下标,概率最概率前十的下标,好这是我们的一个下标。

然后呢我们这边就等于会得到这样的一个啊,咱们的一个候选集嘛对吧,咱们那个候选机候选机啊,直接写中,我写中文啊,那这边的话我们就可以把候选区给取出来啊,Question。

然后这边就是top ten option,这样的话,我们就可以把我们的候选集的,十个问题给选出来,选出来,Ok,那接下来我们就去调用我们的这个相似度模型,相似度模型啊,那,导入一下啊。

Similarity,点predict import,看下叫啥嗯,predict方法啊,我们要去调用一下我们的predict方法,好OK接下来的话,首先呢我们要把用户输入的一个问题啊,我们可以这样子啊。

我们可以循环十遍,然后把我们的这个问题给改进去啊,就等于哦我们组成了这样的一个一个BACH嘛,对吧,这个BH这个BH的size是十,然后我们得到我们的这个啊,ESIM这个模型的一个结果啊。

EC这个模型的一个结果,好OK啊,然后接下来呢,我们就可以把这个结果给打印出来看一下啊,我们可以这样子嗯,好我们可以把它给打印出来看一下,好吧啊,我们可以先看一下这个对应的它的一个值是啥。

然后我们再看一下它的这个相似度,相似度是啥,看一下啊,这是真实,下表这是顺序,OK没问题,然后我们再看一下,ESIM输出的一个结果是什么样子的,好好这是我们top ten它这个候选举的一个句子。

然后它的相似度,还有ESIM模型输出的一个相似度对吧,哦我打一下,哎余弦相似度,然后这个输出的是模型相似度好,Ok,啊我们可以这样啊,我们可以这里简单作为一个这样的一个映射啊。

嗯可以再这样输出一下候选题后,选题结果,好我们这边做个简单的这样的一个映射啊,后面方便用,也就是这个是我们的一个顺序的一个下标,对应它的一个真实的一个下标,好吧好。

那接下来的话我们就可以去取我们的那个嗯,arg max啊,Arg max,也就是我们e c in theme的一个,最大的一个下标啊,叫1same index吧,好,这是我们模型的这个对应的。

最大值的一个下标啊,最大值的一个下标,Ok,接下来的话,我们就可以把我们的结果进行一个输出,呃我们可以先把答案输出一下啊,最相似最相似的问题,那这个就是咱们的一个question啊。

里面有一个这样的index,对里面对应的是index对吧,好,咱们1sim的index,1same index,好,我们再把我们的答案输出答案,这就是咱们那个answer要对应的index stick。

这边是ESIM的index,对吧好,下面我们直接就不要了啊,就不要了行,这样的话我们整个这个就写完了啊,写完了我们来执行一下,好啊,我们这边先输入一句,你好,把它检测到,这是闲聊对吧,你好你好我好。

大家好,才是真的好好再来一句啊,晚上好,晚上好啊,他又回了一句晚安,OK那我们在问一点专业领域的一些问题啊,OK我们把那个我们的之前的一个数据集给打开,啊我们先随便找一点原句来问一下好吧,原句。

诶好像有好像有问题啊,这边有问题,我们看一下,我们看一下这个question是啥,我们看一下啊,哦这里是,那么是不是弄错了,我这里应该是answer,这里写错了,啊其实不应该用,应该应该这么讲啊。

他其实把后面那个覆盖了啊,cheat chat chat chat answer啊,我应该这样子啊,因为我这里用question的话,就等于把它覆盖了,那下面就找不到了答案了对吧,可以跑一下。

好还是一样啊,先来一句闲聊,晚上好,好他回了一句,晚上好,OK来一句专业问题,好我们看一下啊,呃我输入这句话之后,它会有一个这样,我们会这里会打印一个候选机的一个结果啊,我们看一下啊。

计算余弦相似度的时候,他和这句话匹配出来余弦相似度是很高的,对吧啊,计算出来是1。0,然后呢其他这些话的话,这些也有一些啊,但是都挺大的,这句话都是0。9的这样的一个相似度对吧,都是0。9的好。

然后呢这边又会算一个模型相似度啊,算出来这个是0。99啊,0。99,他最后返回的是啊这句话的一个答案啊,所以返回最相似的问题就是这个东西对吧,然后答案是这个东西啊,这个东西。

然后我们这边还有一些测试数据啊,我们去找了一些户外拓展,买什么保险好,我们看一下这个啊,好,啊我们这里说的是户外拓展什么保险好对吧,然后他这边首先是去找这个,我们看一下啊。

额首先是我们根据余弦相似度计算出来,是这个比较高啊,这个比较高,这是按顺序来的,然后我们再去看一下模型的一个相似度,模型相似度是0。2017呃,好像也是这个最高对吧,也是这个最高,真因人寿户外保险好吗。

有什么好处啊,他是这个答案,让我们再看一个相似的啊,好我这个问题是四五十岁,有没有什么重疾险推荐啊,然后我们看一下啊,如果使用余弦相似度计算出来的话,第一句话是这个儿童重疾怎么选。

余弦相似度是最高的对吧,是0。8,然后往下的话是越来越低的,然后我们再看一下模型相似度啊,模型相似度的话,第一句话实际上它相似度并不高,是0。04是吧,然后最要高的话是这句话啊。

她是我妈四五十岁有没有合适的重疾产品,然后最后呢啊,我们是根据模型的相似度来选择最高的对吧,所以最后他这边模型找到的最相似的问题是,我妈四五十岁有没有合适的重疾险产品对吧,所以说我们输入这个问题啊。

如果我们使用的是普通的word vector的一弦相似度,那他找到的是这句话,那如果我们再加上了我们的金牌模型之后呢,他实际上找到的是这个问题对吧,那最后答案返回的是这个好,我们这边再看两句啊。

20岁买什么保险,好我们又看一下啊,就是20岁买什么保险,然后余弦相似度最高的是这句话啊,18岁怎么买保险对吧,然后模型计算出来的相似度是0。3,然后模型计算出来相似度最高的,我看啊应该是是这个啊。

23岁买什么保险号,然后最后他匹配到的也是23岁买什么保险,好对吧,可以看到啊,如果加上了我们的这个匹配模型,整体效果的确是会有这样的一个提升的啊,哦这个是原句啊,这是原句。

OK基本上我们整体的一个效果就是这个样子啊,就是这个样子,然后呢我们整个流程完了之后呢,啊其实你也可以再切换过来,去问一些闲聊的问题对吧,例如啊今天天气不错啊,嗯他又说这是闲聊啊,你在干什么。

他就说这样的一些闲聊啊,回复的就是闲聊语句好,这个就是我们整个这样的一个啊,集成进来的一个流程啊,好吧,嗯整体来说我们的整个流程,代码量也是非常小的是吧,就六七十行代码的样子啊,很少很少。

关键还是模型这一块啊,我们需要把我们所有的模型对吧,给串起来,还有这里的这个what vector模型,所以整个项目实际上是用到了四个模型啊,啊一个word vector模型。

一个这个这个金牌的一个模型对吧,文本相似度的金牌模型,然后是一个分类模型,还有一个是这样的一个闲聊模型啊,一共四个模型,四个模型,那我们整个流程跑通了之后呢,我们再来看后面的一个内容啊。

那假如我们现在要进行这样的一个部署。

我们通常会该怎么做呢,我们看一下啊,这边的话,如果大家使用的是这样的一个Python,来进行一个部署的话,我这边啊简单给大家说一下啊,部署这一块我们不会讲特别多,因为每个公司其实部署的方法会很多好吧。

我这边就简单说一下,那比较简单的一个方法的话,就是这个flask加GUI corn,加这个BER这样的一个形式,那flask在做什么呢,flask其实就是Python当中,就是提供这样的一个啊。

服务的这样的一个框架啊,这样一个框架,也就是说我们只需要使用flask,这样的一个框架,我们就可以去构建这样的一个接口,提供出来给到咱们的一个调用方好吧,啊然后是GUI call啊,GOI扣固定扣。

这个主要是用来取这个多进程的,那举个简单的例子啊,那假如我们现在要去做这样的一条问答对吧,他可能耗时是20ms,20ms,然后是20ms,那20ms我们现在这里就有一个服务对吧,一个服务。

那假如现在用户来了一个问题,那你这一个服务啊,你返回需要20ms,那假如这个时候同时来了很多个用户,那你是不是需要进行一个排队,一句一句的来进行返回对吧,那这个时候实际上就会耗时比较高。

那GUI co的作用呢,是我可以去取多个这样的一个进程啊,我可以去取多个这样的一个进程,那用户假设现在有三个用户对吧,那三个用户一起访问的时候,就会分别返回这三个进程,然后分别进行一个返回。

那每个的话都只需要20ms,那如果你只有一个进程的话,那你这边就需要等待,那最后一个用户的话,可能就是需要60ms对吧,才能得到我们最终的一个结果啊,结果这就会变得很慢啊很慢。

所以我们可以使用固定扣来取这样的一个,多进程多进程,OK最后再说一下docker这个东西啊,啊docker这个东西的话怎么说呢,是这样子啊,就假如,你现在有很多台机器对吧。

通常我们这个服务可能会部署在多台,这个机器上面,一台机器可能会撑不住,假如你这个并发很高,我这里可能才三个用户,那假如你同时有100个用户,1000个用户,1万个用户来请求这个接口。

那你一台服务器肯定是顶不住的,你就需要多台这样的一个服务器对吧,多台服务器,那你多台服务器你考虑一个问题啊,我假如说,我现在先在第一台服务器上进行一个部署,那你需要去安装一些依赖包对吧。

PIP安装一堆依赖包很麻烦吗,那可能你第一台机器部署你可能需要10分钟,你第二台机器你部署你又需要20分钟,那就20分钟了,那假设你有十台机器,那你这个是不是就特别麻烦对吧。

那这个时候实际上我们就需要docker,这样的一个东西啊,这个docker是干什么的呢,它实际上就是你可以理解为,他把你所有的这些工程,还有这些依赖包给打包,成了这个所谓的一个镜像的一个东西啊。

这是咱们的一个工程project,我们的工程,然后还有我们的一些相关的一些啊依赖包,依赖包,然后呢我们会把这些工程,然后还有这些依赖包嗯,pip安装的这些依赖包,全部打包到这样的一个镜像当中啊。

镜像当中嗯,这个docker这样的一个镜像当中啊,然后呢再把这个镜像啊,分别放到这三台服务器上面,然后一键启动起来就OK了,你不需要去考虑任何的那些所谓的一些环境啊,或者其他这些乱七八糟的。

这样的话你就能很快速的在多台服务器上面啊,进行这样的一个部署,好吧,这是我们整个这个部署的一个流程啊,那我们这边呢就给大家简单介绍一下flask。

关于这个GUI call和docker更多的一些内容的话,就大家就自己下来去了解一下好吧,然后部署这一块呢,其实并不是啊,所有的算法工程师都会需要去做的,因为有时候得去看你这个公司的一个情况啊。

如果你们公司本身也是一个比较小的公司,那可能你需要考虑的东西比较多,你需要去开发模型,你需要去做这样的一个部署,那如果你是在大公司的话,那可能你会啊,把这个精力全部放在这个开发模型这一方面啊。

要部署这一块的话,肯定会有一些专门的去做这个服务端的,一些同事来帮你做一些相关的一些部署好吧,但是如果你能掌握像这些什么docker啊,green cow啊,flask这些东西。

对于你面试来说肯定是会加分的好吧,然后最后的话这边是这个PYTORCH官方的这个,关于flask的这样的一个使用的一个教程啊。

然后呢,我们这边的话就从我们自己的这个角度啊,带着大家去简单啊,去写一下这样的一个构建这个接口的一个过程,好吧,我们就简单带着大家简单写一下啊,简单写一下好,我们啊快速写一下啊。

首先呢把这个flask给导入啊,然后我们需要实例化一个这样的一个flask,这样的一个等下啊好,那接下来呢,记错了啊,OK接下来呢我们就需要去啊,定义这样的一个接口啊。

你这个函数名你随便取一个就OK了啊,然后呢你就去调用我们的这个方法就OK了,那具体的这个接口,它的一个名字该怎么调用呢,我们就执行一下app到这个root,好然后你给它一个这样的一个路径啊。

假如我们就要QA啊,Q a ok,接下来呢我们就把这个,啊我们可以先这样子啊,我们直接把这里进行一个输出,例如我们就输出一个嗯NLP,好吧好,然后我们这边挤一下啊,我们直接调用一下app到run方法。

OK接下来呢我们就执行一下这个,好他这边的话就会啊把这个地址给打印出来啊。

然后我们把这个启动一下,然后这边有一个我们输入一下QA,输入一下QA哎。

这是弄错了吗,哦这里没有弄错啊,它这里实际上是返回了,打印出了这个NLP了对吧,这里是打印出了NLP了啊,他这里说的是没有返回什么的,没有返回内容啊,没有返回内容,所以这边就是报错了啊。

因为我们没有返回内容任何的一个内容对吧,那我们这边也可以把这个NLP给返回,好我们重新执行一下。

OK然后我们刷新一下啊,我们返回的是访问的是QA这个接口对吧,QA这个接口好,这个时候他就把这个NLP给打印出来了啊,打印出来了好,接下来我们考虑一下啊,那对于我们的问答来说。

实际上我们是需要去接收用户的一个数据的,对吧,我们需要接收用户的一个数据的,那我们该怎么接收呢,它其实有一个这样的一个request,我们可以把用户的一个数据给接收一下啊,就调用这个request。

它有一个哎ox,然后它有一个叫做get的方法,那,我们去获取一下这个text,然后我们再把这个text给返回好吧,好然后我们再重新执行一下这个代码。

然后这边呢我们就可以以这样的一个,get请求的方式啊,例例如我输入N2P,你看就等于是我这里接收到了NLP,就等于接收到了用户的一个输入,然后最后把答案给返回出来,就返回出来了啊。

例如我这里输入的是一个晚上号,好我们这边接收到的就是晚上好,然后最后我们返回的这个就是晚上好。

OK那学会了如何使用之后呢,我们就考虑一下啊,那接下来我们就可以去在我们的这个位置啊,去调用我们这边定义好的这样的一个方法,对吧嗯好我们看一下啊,那我们这边就需要把我们这个东西,进行一个封装啊,封装。

我们把这整个都挪进来啊,挪进来挪到这个地方啊,挪到这个地方,然后这是text好,然后下面这里就直接调用我们的这个QA就行,好但是我们代码就需要改一下啊,因为我们需要有返回值对吧。

那我们这里return一下,好然后嗯这里也return一下return,啊这里也是一样啊,那这里return我们就直接把答案return好吧,我们直接把答案return行,那我们这样的话。

我们就可以从我们的这个地方啊,From m i a i n two,Import q a,方法好,我们在这里就调用一下用户的这个QA,方法好,就能得到我们的answer。

然后我们把answer返回就OK了啊,OK我们再执行一下我们的代码,好稍等一下啊,可能有一点点慢。

要去加载加载这些模型什么的,OK好我们这边就OK了,然后我们再同时执行一下啊,啊我这边十上11闲聊嘛,晚上好对吧,好我又问了一句,晚上好,我再来一遍,我再来一遍,OK接下来啊,我这边输入一个问题,好。

呃户外拓展什么保险好,哎他这个输出了每个保险公司有哪个好与不好。

哎,看一下啊。

哦这个好像不太对对吧好,我们再问另外一个问题啊,这个是需要进行一些调整的,四五十的有什么重极推荐,然后他输出的是这样的一个答案对吧,然后再看下这个,好输出的是这个东西啊,输出这个东西啊。

然后我们再问一个他找不到的一个答案对吧,我们再随便输一个啊,啊如何,如ed如何构建模型。

哎它是哦,它识别为这是闲聊的是吧。

那个,如何学好嗯继续学习。

哎这个又识别成了这样的一个闲聊了啊,又识别成这个闲聊了,那我们去问一句,他答不出来的。

该怎么问呢,如何用模型嗯识别保险方面的问题。

哎这也能答,找到答案吗,看一下啊,哦他这个像素居然达到了0。9是吧,这个应该是会存在一些比较多的,OV的一些词啊,但实际上我们可以看一下啊,这边这个相似度找出来实际上是非常低的啊,非常低的。

哎总之如果这边是出现那种找不到答案的啊,他应该是会返回这句话啊,叫做没有找到答案,其实我们可以把这个调高一点啊,我们调到0。95再试一下,好稍等一下。

刷新一下好。

他对于这种概率比较低的对吧,那0。9啊,低于我们的0。95,它就会返回,没有找到答案好,整个流程就是这样子的啊,就是这样子,OK其实这个服务这一块也是比较简单的对吧,也是比较简单的,好行。

那咱们整个啊项目这一块啊。

基本上也就已经整合完成了,然后对于部署这一块的话,也给大家做了一些简单的介绍好吧,那咱们第三部分基本上就到这里了。

到这里了,然后最后的话我们再来进行一个比较简单的。

这样的一个项目总结好吧,项目总结好,我们先看一下整个流程啊,先看一下整个流程额,这一部分的话我就稍微改一改啊,好,我们简单回顾一下,我们整个项目的这样的一个结构啊,首先呢是来了这样的一个问题对吧。

用户的一个问题来了之后呢,我们会去做这样的一个所谓的一个意图识别啊,啊我把它放到下面,这放到这里更合适一些啊,好用户的问题来了之后呢,我们首先会去采用这样的一个分类模型对吧。

去做一个所谓的这样的一个意图识别啊,意图识别要去判断一下用户的这个问题,他到底是这样的一个闲聊呢,还是这样的一个封闭域的一个问题,那如果是这个闲聊的话,那就会去走,我们今天给大家介绍的这个所谓的一个。

生成式的一个模型,DIOGBT对吧,Dio g b t,然后去采用一些基于采样的一些方式,top k top p来生成这样的闲聊语句,那如果大家平时在使用这个生成模型的时候啊。

如果你是涉及到一些摘要啊之类的一些场景,你不想让你生成的文本随机性这么大的话,那你可以去使用这个beam search好吧,Beam search,然后我们的意图识别啊,如果是封闭域的问题。

也就是说如果是专业领域的问题,例如我们的这个保险行业业的这样的一个问题,对吧,那我们就会先去啊走到这个检索式的模型,那检索式的模型这块呢我们又分两步啊,第一步呢,我们会把我们的数据转换成这样的一个。

word vector的一个形式,然后使用what to vector来计算它的这个余弦相似度,然后召回top k的这样的一个句子对吧,那除了word to vector的话,我昨天也给大家介绍了。

基于BERT这样的一个句子的一个embedding啊,句子的embedding,那基于BT这个embedding,效果,肯定会比这个word vector这一块会更好一些对吧,更好一些好。

那召回完之后呢,例如我们这边召回了十个问题,那我们会把这十个问题啊,再给到我们的这样的一个相似度匹配的ESIM,这样的一个模型,让这个ESIM啊,再来找出咱们的这个相似度最大的,这样的一个问题。

再把对应的这个问题的答案给返回出来啊,这个就是我们的这整个流程啊,整个流程,那在这整个流程当中呢,其实还有很多可以优化的地方对吧,包括我们的这个啊分类模型,分类模型,那你可以去替换成其他的。

那如果在你自己的场景当中,你觉得TXN这个模型有点效果不够理想对吧,那你可以去换成其他的一些分类模型,如果你的文本本身是啊比较长的,你甚至可以用我之前给大家介绍的这个,HN这样的一个模型。

不过对于对话领域来说的话,基本上应该都是短文本对吧,短文本啊,如果你这里意图是意图特别多啊,特别多,那你可能啊就不单单是我这里,这个闲聊和封闭域,你可能还会去做更多的一些优化,那你就可以考虑去上一些。

比这个TAXN效果更加好的一些模型,例如咱们之前提到的LSTM叫tension,或者说你直接把它换成一个bird,这样的一个模型都是OK的好吧,那对于闲聊这一块呢,除了这里介绍的dialog bt。

你也可以去使用一些其他的一些生成模型啊,例如基于完全基于transformer的,这样的一个part啊,或者T5这样的一些模型都是OK的好吧,那对于检索式这一块呢,像word vector。

你可以把它升级成BT的一个具象量对吧,对于相似度模型,我其实也提出了过很多,那大家如果对ECM这个模型觉得想去了解更多,你不想使用ECM这个模型,你觉得太简单了,或者怎么地。

你都可以去再换一个这样的一个匹配模型对吧,甚至你也可以用BT来做咱们的这个啊,相似度匹配的这样的一个计算对吧好,这就是我们整个的这个项目啊,他的一个整体的这样的一个流程。

然后最后的话再和大家简单聊一聊啊,就关于算法工程师这一块,就不管你啊,今后是去从事这个啊这个CV方向,还是去从事这个NLP方向,或者说你就是去做这个机器学习这一块,你去做了一些这样的一些风控领域的。

一些方面的一些啊模型算法都是OK的,但是呢有一点比较重要啊,就是对于一名合格的算法工程师来说,大家一定要具备,就是这个所谓复现一篇论文的一个能力,就可能啊我们可能不需要你去说。

你去自创了什么样的一个比较牛的,一个什么样一个技术,或者说你去发了一篇这样的一个paper,其实这个都是后话了啊,关键点在于如果给你这样的一篇paper,你能否根据这篇paper把这个给复现出来。

这样的一个能力是非常重要的啊,非常重要的,当然啊各位同学可能在初期阶段会啊,会有一定难度啊,觉得复习啊比较困难,那也没关系啊,其实我们也可以啊,站在巨人的肩膀上,大家拿到一些一拼新的一些paper。

你觉得这篇paper有必要去尝试一下,你可以去看一下他这边paper有没有去开源,它的一个源码对吧,你可以去GITHUB上面去找一下,如果开源了的话,你可以把他的代码给拉下来,结合他的这个paper看。

然后再把这个paper里原理看明白了,再去看他的这个代码到底是怎么写的对吧,然后呢,你再去根据你自己的需求去进行一些定制的,一些开发,或者说一些改进都是OK的啊,都是OK的,但是paper这一块呢。

就是尽量啊,大家要去选一些这个比较有名的一些机构,推出的一些paper啊,不然有些paper他可能真的很水,你这可能花了很多时间去复现,最后没有效果也是有可能的好吧。

那AI的技术实际上发展真的是非常快的啊,就大概34年前,我们那个时候还使用的是这个,基于word vector的这样的一个检索式的一个模型,那到目前为止呢,实际上有很多这样的一些优化方法了。

包括咱们刚才提到的这些,基于BT的这样的一些具体具向量对吧,所以说在AI这个领域啊,我们实际上要关注的东西会特别多,因为AI这一块技术发展实在是太快了啊,实在太快了,那我们就需要不停的去关注这些前沿的。

这些技术,然后追踪这些技术,把这些技术应用到我们自己的这个业务场景中,这对于大家来说才是一个比较大的这样的,一个竞争力好吧,然后呢,我也希望各位同学,在今后的一个学习和工作的一个过程中呢。

要持续去保持这样的一颗好奇的心,你要去对这些新的一些内容,新的一些技术要有这样的一些兴趣好吧,一定要掌握这样的一个自主学习的一个能力啊,那对于我们企业来说呢,其实并不是说啊。

只想教会大家去如何使用这些模型,其实更多啊是希望让大家,或者说教会大家一种自主学习的一些能力,这样的话就各位同学啊,从我们7月出去之后呢,你自己才能花一些啊精力啊,自己去实现这样的一些模型,好吧好。

基本上我要说的就是这些内容了啊,那这个的话就是整个我们这样的一个啊,智能问答的一个项目了好吧,最后的话也是祝大家能顺利找到自己,满意的一个工作啊,好那咱们今天的这个直播就到这边了。

如果大家有什么问题的话,到时候再那个群里面去找我好吧,那咱们就这样啊。

1447-七月在线-机器学习集训营15期 - P16:09-推荐-1-商品推荐系统介绍和环境搭建 - 程序员技术手札 - BV1ASste6EuZ

好行,那我们先开始吧,然后我让那个助教老师跟那个群里面问一下,就是问一下同学们进一下直播,我们就先先开始咱们这节这节课,这个项目呢,其实是移动电商的商品推荐算法的实战啊,然后先跟大家介绍一下。

就是什么是额,咱们这个事情要做一个什么样的任务啊,就也就是移动电商的商品推荐,比如说推推荐系统啊,对用户推荐商品的质量好坏啊,可以说是直接影响了巨头们的股价,这里所谓的巨头就是像那个阿里巴巴嗯,京东啊。

拼多多啊,这些电商平台对于他们来说,这种个性化的流量的分发,也其实也就是我们所谓的推荐系统是绝对的啊,公司各大算法团队的一个绝对的一个,核心的一个团队啊,也就是说在那个公司内部呢也是有一个比较啊。

比较有有有优势的这样一个地位,那推荐算法的好坏,直接就会影响到嗯这些消费者,就这些用户会不会在平台里面下单,会不会在平台里面买东西,也就是影影响到了平台的一个总的一个成交额,这样的话也就是说呃。

间接也就是影响到了整个电商平台的一个发展,所以说对于这种电商平台来说,这种推荐算法是非常重要的一件事情,通常会花费啊很大的人力啊,去去做这个推荐算法的模型,整个链路的一些优化,那在咱们这个项目里面呢。

我们是用阿里巴巴,淘宝电商的真实的公开数据集啊,来根据用户在商品全集上的移动端的行为数据,以及百万级别的商品信息,去构建一个推荐模型啊,预估用户接下来一天对商品子集的购买。

就说我们这个项目要做的是什么事情,就是用一个真实的公开的数据集呃,建立一个预估模型啊,根据用户的这些历史行为来去预估,用户在接下来一天他会买嗯,商品子集的哪些东西,就是他第二天他会买什么东西。

这是我们要做的任务,那在我们这个课程里面,可能会涉及到的这些模型,就包括啊协同过滤啊,逻辑回归啊,FM和GBDT以及DNA的神经网络的这种模型啊,这些模型大家如果之前没有啊特别的了解过,也没有关系。

后面会跟大家去啊,一起去回顾一下啊,他的一些啊算法的一些原理,它的公式啊,以及它的一些代码的实现,都会跟大家讲到,嗯在那个在讲那个具体任务之前啊。

嗯再讲哎我看应该只剩一个同学了行。

那就这个同学吧,就说嗯我这里列了三种啊,同学的这种背景情况,一个是呃跨行,还有一个是跨方向,还有一个是啊原来就是做算法工作的,然后无论是做推荐还是做ALP还是做图像,就是你如果原来是嗯原来是跨行的。

就比如说原来是做一些传统行业,然后这次想转到啊,想转到就是互联网啊,这属于跨行啊,第二种呢是跨方向,就是说你原来是做互联网相关的工作,但是说比比如说原来是做啊做那个呃一些,比如说前端或者后台的开发。

然后现在转成算法,这属于跨方向,然后第三种呢,就是你原来就是做一些比如图像处理啊,LP啊相关的一些工作的,这种属于原来原来就是做算法相关的工作的,那这样的话你可以根据自己的情况。

在直播间里面打个一或者打个二,打个三啊,然后我也是了解一下啊。

同学的一个背景。

啊跨行的跨行的其实嗯就要多花点功夫了啊。

这个同学是跨方向的。

但这两个就是同学们,可能我感觉就是一个是跨行,一个是跨方向,其实都是得得在那个基础知识上多做一些,多下一些功夫,就后面的话,比如说你想转成啊,互联网相关的算法工作的话啊,就是包括不管不管是推荐算法。

还是后面是做CV还是做LLP,其实这些基础知识很多情况下都是互相互通的,然后这样的话就是我们后面讲的这个过程啊,会尽量的把节奏稍微放慢一点,就是跟大家一起再去呃,比较详细的去回顾一些基础的知识啊。

这也是跟大家一起去把握一下,这个讲课的节奏啊,行就是特别是这个跨行的同学啊,就是呃就就是自己,比如说你真的是下了决心要去呃,做互联网相关的工作,你还是要多花一些功夫的啊,还是要多花一些功夫的。

好那我们就继续我们的这个项目吧,就是后面讲的过程中会考虑到大家情况,我们会额稍微把节奏放慢一点,然后多讲一些基础的一些相对基础的一些知识,好吧,嗯比如说这里啊列出了我们这节课,就是不如我们这节课吧。

就是这这一个项目里面,这个项目里面可能会用到的模型啊,协同过滤,逻辑回归啊,FM和GBTT啊,大家就是看到这些东西不用担心,就后面都会详细的去展展开去讲一讲,他他们都是用来干嘛的,就不用太担心啊。

行那回到我们呃这个项目本身啊,先这节课呢主要是啊了解一下大家大家的背景,然后跟大家去做一个任务的一个介绍,就是说我们这个项目要做什么任务啊,去做一个比较详细的一个介绍,然后去做一些环境的配置和安装啊。

啊就是第一节课的内容其实还是相对比较啊,比较那个简单的,就是说这节课大家可以稍微轻松一点嗯,然后我们这个整个项目主要包含哪些东西呢,就包含一个就是刚才提到的,我们这个电商的商品推荐任务的介绍。

以及数据集和评估指标的一些介绍啊,然后环境的配置,安装特征的处理,这个特征的处理和特征的构建啊,为什么要做特征的处理和特征构建,其实是后为了后面去做那个模型预估,先做一些数据的预处理。

然后基于规则的啊预估方法,然后基于这种k means逻辑回归,逻辑回归也是LR啊,GBDTGBDT这种树模型的模型的实战啊,这个会大家大家一起去写一写代码啊,然后DNA呢神经网络推荐算法。

就包括啊WDL和NFM啊,这些这些名词呢大家如果是比较陌生,也不用担心,后面我们都会啊详细的去展开,就相信大家,如果是你完整的把这个项目跟下来之后啊,不敢说就是你达到多高的这种算法能力。

至少就是可以算是入了门,就是说对于这种电商的推荐嗯,无论是推荐推荐系统本身,还是电商的领域的那种推荐来说,都会比较熟悉啊,因为我们这里会带着大家一起去看一下代码啊,到代码层面的一些实验。

好这是我们主要内容,然后具体到下下面,我们每一个阶段的一个任务的安排呢,就是说第一阶段我们会啊,主要是跟大家去看一下这个项目的任务书,然后介绍一下,我们嗯用的这个淘宝的app的数据集。

就淘宝他们公开了一部分啊用户的行为数据啊,当然这个数据比较老,而且是加密过的啊,我们就要用这些数据去做我们的商品推荐任务,然后过程中呢,我们需要使用到这个天池大数据比赛平台,这个待会还会跟大家讲一下。

这个平台是做什么的,然后包括我们这个赛题的介绍和评估,指标的一个理解,这是第一阶段,然后第二阶段呢,会主要去和大家一起去做一些啊,这个环境的配置安装,其实在第二阶段之前,大家都应该已经完成了。

也是这节课之后,然后任务对我们这个推荐任务的一个分析,理解啊,然后我们的特征的处理和特征的构建啊,然后训练数据测试样本的一个处理,然后然后基于我们对这种,电商平台的业务的理解。

我们可以做一版基于规则的预估方法嗯,然后在第二节课就开始啊,大家就可以去跑代码,然后去啊在那个天池平台去做一个提交了,这是第二阶段,然后第三阶段呢会会着重给大家介绍嗯,四个算法吧,一个是协同过滤啊。

协同过滤是很经典的啊,推荐系统的算法咳,第二个是k means做聚类和采样,第三个是那个嗯逻辑回归模型的介绍,以及它的代码实现,然后第四个是GBDT啊,这种树模型,树的集成模型的介绍和实战。

然后在第三阶段的时候,就要求大家去做一版基于模型的啊,这种预估结果的一个提交评测了,然后第四阶段呢,就就是呃来到了这种DNA的神经网络的推荐算法,然后这里主要是介绍两种。

一种是WDL就y and deep啊,网络,还有一个是NFM这个对FM的一个升级啊,然后这两个模型呢,也会跟大家一起去去做一做咳,这是我们呃前四节课,然后第五节课呢会跟大家扩展一下,就是推荐系统啊。

本身的一个整体的一个架构啊,从那个工程的角度就给大家看一看,推荐系统的架构,咳咳,然后我在介绍的过程中,都就是大家有什么问题都可以嗯,随时在这个直播间里面来问啊。

就是说包括无论是就是我们课程本身的这些啊,这些那个题目啊,这些任务,这些数据或者说是代码的这个理解啊,还是说你自己本身的个人的一些,比如说职业发展的一些什么问题。

其实我都可以用自己比较有限的这个啊经历吧,可以跟大家做一些分享,就是无论是你什么样的问题,包括你职业发展的一些困惑,其实都可以嗯简单聊一聊,大家就是如果有问题的话,都可以在直播间里面提问。

就是还是希望是可以针对大家本身的这个特点,然后然后跟大家做一些辅导吧,特别是我们现在人比较呃,不是那么多的情况,其实是更其实对大家其实是更好的,就是你可以提出自己更适合自己的这些问题,然后可以。

我可以帮你针对性的去做一个分析好吧,行前面啊,前面就是说去跟大家介绍了我们后面的呃,课程的一个安排,然后到我们具体的这个任务本身,就说我们这节这个项目会使用到哪些数据集,然后我这里列出了很多啊。

就是说前两个其实是同一个啊,一个是数据集,一个是任务介绍,然后第三个,第四个和第五个分别就是另外三个嗯,更大规模的数据集,比如说第四个是那个IJCR16年的啊,这个其实就是一个IJCI。

是我们嗯计算机领域比较好的一个会议啊,然后他经常会也会举办一些比赛,比如说他这里是第四个,其实是他在举办比赛的过程中使用到的啊,淘宝和天猫的一些用户行为数据,然后做了一个公开,然后第五个呢。

3km大家就是也是我们计算机领域比较啊,有名的这种会议啊,学术会议,然后他呢也会举办一些呃举办一些比赛,比如说这里是啊做的这种咳,嗯用户用户兴趣的这种这种建模,其实也是一样的。

跟我们这个我们这届我们这个项目想做的事情,其实一样的,都是根据用户的历史行为据,预估他未来的点击或者购买,这个的话就是嗯我们这节课呢,就我们这次项目呢主要会介绍的是第二个啊,第二个就是前两个。

前两个这个数据,就为什么选择这个天池新人实战赛呢,就因为他这个比赛它是一直在线的,待会儿会和大家一起去看一下,就一直是可以,大家一直是可以提交的,而其他几个它是有时间限制的。

就是说已经嗯基本上都已经结束了,大家都提交不了,不方便大家去评测,所以说我们选择了啊前两个这个数据集去去做,但是呢我们这个过程中产出的这些代码啊,都是可以很方便的,迁移到其他的数据集上面去的。

好我们现在就一起去看一下啊,这里给大家留的这个链接,大家打开之后会发现他是一个天池平台,这个天池平台是个什么东西,其实就是大家如果是了解过算法相关的工作,都会知道。

我们嗯算法工程师除了基本的基础知识之外,有可能会呃做一些能力上的一些扩展,比如说有的同学会去打一些比赛啊,有的同学会发一些学术论文,然后这些呢然后我们看到这个天气平台,它就是一个比赛的一个平台。

就做一些呃做一些数据相关的,或者或数据挖掘相关的,或者说是呃这种推荐啊,CV和NLP这种相关的这些啊比赛,然后这时候的话啊,我们就是使用这个平台,然后方便大家去理解啊,方便大家去理解这些啊,任务。

让大家打开之后,就是后面嗯需要去去下载一下这个数据集,下载一下数据集,然后这个这个下载方法其实很简单,大家首先要注册一下,注册完事之后再回到这个页面去报名参赛,然后当你注册完了,注册登录之后。

然后报名参赛之后,你这些数据集都是可以下载的啦,嗯嗯啧,那我们具体看一下,就是我们这个移动电商推荐的这个任务,主要是在做什么样的事情啊,我们可以看一下他这个啊任务的一个描述。

就说在那个真实的真实的业务场景中啊,也就是比如说淘宝的,或者说是京东的这种电商的推荐任务里面啊,电商的这个平台的商品的推荐里面,我们往往需要对所有的商品的一个子集,去构建一个个性化推荐模型啊。

然后在完成这些任务的过程中,我们不仅需要利用用户在这个商品,子集上的行为数据,往往还需要用利用更丰富的用户行为数据啊,他什么意思呢,就是说比如说今天对这个用户,我们只需要给他推荐一一些商品啊。

然后一些商品这些,但是做推荐的过程中呢,我们不能说比如说我们有啊有1万个商品候选,这时候我们实际我们商品库里面有100万,那这时候呃我们去构建推荐模型的时候,不是说只用用户在这1万个商品上的一。

些行为去做,而是说我们可以利用到啊,全网的商品和全网的用户,他们之间的一些共性关系,来去构建一个推荐模型,帮助啊当前的用户去做预估,比如说这里定义了一些符号呃,U呢就是用户啊。

user i就是商品item,然后这个P呢就是商品的子集,然后这个D就是商用户对商品全集的行为,数据集合,那么我们的目标就是利用D啊,也是用户的行为数据来去构造user uu中的用户。

对P中的商品的推荐模型,这就是我们要做的事情啊,具体当然这个这个描述上比较抽象啊,大家不用担心,就后面我们会看一下,具体就是到底要是要干嘛,然后这里提到了,就是说啊这个任务会提供两份数据啊,两份数据啊。

然后主要是包括了2万个用户的,完整的行为数据,以及百万级别的商品信息啊,然后数据呢就分成两部分,第一部分是用户在商品全集上的,移动端的行为数据啊,然后这个这个这个表名,而这个表的话。

大家在前面这个下载下载解压缩之后,就会啊就会看到这个数据表了,然后这里的话这个数据表,主要是有这么几个字段,第一个字段是啊,user id就是用户的唯一标识,就是标识啊。

你这个用户类似于你QQ号的一个东西,然后这个它是经过了一些抽样和脱敏的,所谓的脱敏,就是说他这里不是直接就是淘宝的用户id,而是做了一些数据的一些映射转换啊,防止就是做一些数据泄密嘛。

所以说做了一些脱敏啊,但是这个呢不影响我们去做我们推荐系统啊,第二个是字段是那个item id,也是商品的标识,就是你这个商品每一个商品,比如说可口可乐,一瓶汽水儿啊,这家店铺卖的这瓶汽水。

然后然后哪个女装店卖了一件女装,每一件商品它都也是有一个id的啊,然后这个的话就是item id商品的标识,然后这个字段呢也同样是啊,经过了脱敏的,第三个字段就是behavior type。

就用户对商品的行为类型,这个就包括啊浏览收藏加购物车购买啊,四种行为分别对应的取值是1234,就什么意思呢,就是说啊这一一条数据,一一条数据可以是,一个用户浏览了啊。

behavior type浏览了某一个商品,也可以是一个用户啊,把一个商品放到了购物车,也可以是一个用户把一个上收藏了一件商品,也可以是一个用户购买了一个商品,也就是说这个数据表它每一行就代表着啊。

我们用户的每一次行为啊,每一个用户的每一次行为,或者说是就是在线在线的引擎给记录下来的,请求日志,请求请求和行为日志啊,这个就是用户的这种行为类型,然后这个行为的话,他具体就跟这个电商平台比较强相关了。

就包括了浏览收藏,加购和购买四种行为嗯,然后再往下是那个用户的空间空间标识啊,用户位置的空间标识可以为空嗯,他说是由那个经纬度通过保密算法生成,这个字段呢就是标识用户的位置的这个字段。

因为他做了啊做了这种加密,然后我们后面去用的时候不是很方便去用,而且是啊空值率很高,所以说这个字段到后面,我们基本上也不会去用的啊,这个大家可以不用去管,然后再往下面是item category啊。

这个就是当前这个商品所属的这个分类,所属的分类,比如说啊比如说可口可乐饮料,它是属于食品的一个分类,那那一件连衣裙它可能是属于女装的分类,然后一个手机它可能是属于啊3C数码。

就是说他这里会给这里的item id啊,他所属的分类,然后也给我们列了出来,那这个的话其实是会帮助我们,后面去做一个推荐的,然后再往下个字段是time,就是行为的时间,就是这个这一条日志啊。

具体发生的时间,然后他这里的数据是精确到小时级别的,精确到小时级别好,我们再回头看一下这些,这个数据表的一些内容啊,就包括了嗯用户的标识,然后商品的标识,这次行为的类型就浏览浏览收藏。

加购和购买四种行为,然后商品所属的分类啊,时间时间是精确到小时级别,然后这个表呢就是用户在商品全集上的,移动端的行为数据表啊,移动端行为数据表,而这个表也是我们后面去做推荐模型中啊。

包括我们去做特征处理和数据集的划分的时候,重点最重点会用到的表,去做用户的建模的时候是最重点会用到的,因为这里就包含了用户和商品的这种交互信息,这是第一个表,第二个表其实就比较简单了。

第二个表其实就是啊商品的子集,其其实也就是一些商品的id,和商品所属的分类啊,可以看一下他这里的字段啊,第一个字段是item id,也是商品的标识,和前面我们提到的那个item id其实是是一个东西。

它是可以相互的关联的啊,第二个字段是item的空间标识啊,位置的空间标识和前面我们提到的一样,他这里是,对这个地理位置做了加密,而且空置率很高,所以说这个空间位置的这一这一个字段,我们后面其实也不会用。

可以不去管它,然后然后下一个是那个item的category,就是商品分类的标识,就是你这个商品所属的类别啊,这个也是和前面的这个item category是可以关联的,那我们要预估的呢。

其实就是啊在第二天啊,也是在最后一天,未来的一天里面,用户啊,某一个用户,他会买这个商品子集里面的哪一件东西,这是我们的预估任务,然后总体来看,这个训练数据就包含了抽象出来的,一定量的用户。

在一个月的时间,也就是11月18号到12月18号之内的啊,移动端的行为数据,然后评分的数据呢,就是这些用户在接下来一一个月之后的一天,也就是12月19号对商品子集的购买啊,大家注意这这段话。

就是说我们要做的事情是什么,就是给你这些用户在一个月之内的,他们的行为啊,就是就是给你这些用户在一个月之内,他们在手机淘宝上,他们做了哪些浏览,做了哪些购买,他们买了什么东西啊,他们收藏了什么东西。

他们把那些东西加到了购物车,给你一个月的这种用户的行为数据,然后去预估啊,每一个用户他们在接下来一天嗯,他会买哪些东西,然后具体的时间呢,就是说会给你11月18号到12月18号。

这一个月的一个月的数据来去预估,12月19号这些用户他会买那些东西,然后回到我们通讯系统,就是说我们为什么要做这么一个任务呢,就是说我们为什么要去预估用户,在12月19号的这个购买啊。

其实这个原因背后的原因也是很简单的,就是说如果我们能准确的预估到用户在啊,12月19号他愿意买什么东西,那我们就把这些东西推荐给他啊,自然而然的就可以提升我们这个手机淘宝。

或者说京东这种电商平台的营收了啊,比如说我知道你想买什么东西,想要什么东西,我就把它给推荐给你,那这样的话肯定是有利于呃消费者的一个购买,有利于这种啊交易的成交的嗯,那我们要做的就是使用这些训练数据。

去构建推荐模型,输出用户在接下来一天,对商品子集的购买的预测结果啊,这就是我们要做的事情,就是需要使用前面提到的这两个数据表,然后去做一个推荐模型,然后去输出用户在12月19号。

他会买这个商品子集的哪些东西嗯,大家有什么问题都可以随时提啊,就包括啊无论是这个载体本身呢,还是说是啊,大家平时遇到的这些问题都可以随时提好,这是呃任务的一个介绍,那对于我们来说,我们产出这个。

比如说我们已经预估知道了,哪个用户会买什么商品的时候啊,我们怎么去提交这个数据呢,提交的话他需要满足一个格式,数据格式啊,分别是两列,第一列是user id,第二列是item id啊。

分别表示表示的含义,这一行数据表示的含义,就是,某一个用户在12月19号会买某一个商品,这是啊我们要提交的数据格式,而这个数据格式的生成到后面啊,我们代码里面啊会跟大家去看一下。

就是怎么去产出这种嗯可以提交的数据,然后我们的评估指标是什么呢,就怎么去评价你的预估结果的好坏,怎么去评价预估结果的好坏,然后这里采用的是经典的精确度。

也是precision召回率record以及F1值,就F1score作为评估指标啊,这三个指标分别是什么意思,大家一定要非常清楚,这是我们啊,大家后面做那个互联网这种算法,相关的工作的时候。

就是最基础的知识啊,就是精确度,召回率和F1值,这个大家一定要知道它是什么含义啊,然后具体的呢就是说precision,precision就是精确度的含义,就是你的prediction set。

就是你的预估集合和你的reference set,其实就是真实的集合之间的交集嗯,交集的数量除以你预估的集合的数量,这个这是公式,是长这样,那我们直观的理解一下,这是什么意思呢。

比如说你现在预估了啊100行数据,然后其中只有十行是猜对的,那你的precision就是10%啊,其实就是你猜对了多少,就你预估准了多少,就是你的精确度是多少,就是说你预估了100个。

然后其中有多少个是对的,那你的比例,你就可以算出来它的一个精确度的一个比例,嗯然后与之相对的就是这个record record,就是召回率,召回率的含义就是你的预估的集合。

同样也是你的预估集合和真实集合的一个交,集的数量除以大家注意他这个分母变了分母,这里变成了真实集合的数量,所以说他这里叫record record,就是说你能召回出来多少真实的集合,真实的数据。

比如说真实的啊,原来比如说我们回到我们这个任务,是预估用户接下来会买哪些东西,比如真实的在12月19号啊,有有1万个东西,有1万个1万次购买,这时候你提交了呃,提交了五千五千个购买。

然后5000个购买里面只有2000个是是猜对了,两间个是预估对了,那这时候你的召回率是多少呢,其实就是他俩之间的交集也要升到2000,然后除以总共的真实的成交数量也就是1万。

所以说你的record就是200010000,然后这个例子呢我们也同样可以算一个precision,precision的话就是啊他俩的交集除以预估的集合,表示2000÷5000。

这是你的precision,然后这两个指标就为什么我们要有两个指标呢,啧就因为大家想一下,你咳如果我们只用精确度去评估你的模型,预估结果的话啊,这个其实是啊非常片面的,就比如说举个最极端的例子。

我可以让我的精确度做到百分百,怎么做到呢,就是说我只估一个,就虽然说有1万个成交,但是我只提交一个,只提交一行,我认为非常非常自信的,而这个呢也恰好就啊猜就预估对了,预估对了之后。

我的精确度就是百分百了啊,精确度百分百,但显然这个啊是是不够的嘛,就是说你虽然精确度百分百,但说你的啊你的召回率啊就非常非常低,就不够,然同样对于召回率也是召回率,比如说现在有1万个成交的真实的成交。

那我想去猜这1万个成真实成交的时候,我提交啊1000万个这种用户和商品的购买,那可能我会覆盖到很多这种真实的啊,就真实的成交的数据,这样的话我可以把我的record做到90%多,也是非常高。

但是说你的precision,就是你提交的这个精确度就会变得非常低,所以说这个精确度和召回率之间,他俩之间是一个try off,就是一个高了,另外一个可能会低,另外一个低了,然后另外一个可能会变高。

就他俩之间会有一个平衡,那怎么去同时去考虑精确度和召回率呢,所以说这里就用F1值这个指标,F1值F1值这个指标它就是用二乘以啊,精确度,再乘以召回率,然后再除以精确度加召回率啊。

这个这个公式大家稍微理解一下,其实就会发现,就是说它对啊精确度和召回率的要求,就是你们两个都不能太低,太低之后,因为他做乘法吗,乘法之后会造成这个分子会变得非常小,也就是你F1值会变得比较小。

只有当你的精确度和召回率啊,都比较好的情况下,你的F1值才会比较高啊,所以说F1值是啊融合了精确度和召回率,所以说对于这个比赛来讲,他们就把这个F1值,F1值作为作为这个评估指标。

那这个公式里面就是说这个prediction set,就是算法预测的购买数据结合,reference set就是真实的答案啊,购买数据集合,然后我们以F1值作为最终的唯一评测标准啊,这是评估指标。

就就你理解了评估指标之后,你才可以针对性的去做这种优化嘛,就是后面嗯后面大家看到这个,这个平台之后,大家登登录之后会看到这里会有一个排行榜,会有一个排行榜,就是每个人可以跟大家一起看一下。

这排行榜里面就会有你的排名,然后参与的人,然后组织你的分值是多少,然后提交日期是多少,可以看到现在已经有1万3000多个队伍,1万3000多个队伍在嗯再提交了,然后这时候的话。

你如果能在这1万多个呃队伍里面,比如说排到前前100名,或者说前200名,其实都是一个很不错的一个成绩啊,然后后面的话我们也会跟大家去介绍,就是说怎么去解他这个推荐任务的这个题。

要是我们的一些代码的一些实现啊,这些东西,然后它这里的score其实就是F1值,F1值它是从高到低去排的啊,从高到低去排的,就说你在这种嗯赛题里面拿到了,比如说前5%,前2%,前1%的这种啊排名。

其实对于你后面的啊简历啊,对你的找工作其实都是呃比较有优势的,比较有优势的,就很多面试官,其他就看你这个东西,好我们再简单回顾一下我们要做的事情,就是他会给给到我们2万个用户的行为数据。

以及百万级别的商品信息啊,然后这里数据就包含了两个数据表,其中一个最重要的数据表就是记录了用户啊,在什么时间,然后是浏览收藏还是加购,还是购买了某一些商品啊,这样一个表,这是这块表里面就记录了啊。

移动用户在商品全集上的移动端类型和数据,我们要做的事情呢,就是根据用户在11月18号到12月18号,一个月内的用户的这种行为数据,来去预估用户在接下来一天,也就是12月19号对这个商品子集的购买。

他会买那些东西,然后我们要使用这个推荐,现在数据去构建一个推荐模型啊,据预估他在这个记下来一天他会买什么东西,然后我们评估的指标就是用F1score,F1值作为唯一的评测标准。

然后这里的F1值就融合融合,考虑了精确度和召回率啊,然后这个F1值,大家这是我们额这个项目里面的,第一个需要大家去牢记的一个概念,就是这个F1值是怎么算的,然后这个精确度和召回率啊是什么含义。

这是一个非常基础的这个概念,好那我们看完我们这个数据集之后,然后我们嗯可以和大家一起去,就是说因为我们这个就是说是一个啊,可以持续提交的,也是这个天池的新13赛就可以持续提交的。

那其实一些更更就是正规的一些比赛,它其实是有一个时间限制,就现在已经提交不了了,其实这些数据集我们去可以啊,一起去看一看他们的数据集就长什么样子,然后和我们可以直接产生一个对比,然后看完之后。

大家可能就会发现,说这些题目其实都大同小异的,就是说大家在我们这个项目里面做的这些代码,做这些特征提取的代码,数据集的划分的代码啊,包括后面模型的代码啊,做完之后呢。

都是可以很容易的用到其他的比赛中去的,比如说我们现在,还这一个这个其实就是也是user behavior,data from淘宝,For recommendation,也是做推荐的。

淘宝的用户行为数据嗯,然后这里的数据呢,同样也是包含了用户的行为数据表,然后它这里是包含了2017年12月,11月25到12月3号啊,这个大概是个一周的时间吧,就是有100万个用户,他这个用户量比较多。

然后主要的包含的数据字段就包括用户的id啊,用户的id,然后商品的id,然后商品的类目的id行为类型,行为类型同样它这里也是包含了啊,浏览也是pv by,也就是购买heart就是加购物车。

five就是呃收藏就是浏览购买,加购和收藏,和我们前面前面我们那个数据集,其实是一样的嘛,然后这里的时间戳,也就是具体这个行为发生的时间啊,嗯所以大家可以看到这个性。

他这个比赛的这个数据和我们啊刚才讲到的,我们那个项目中啊,会首先用到的这个数据其实是几乎是一样的啊,区别在哪里呢,就它这里的数据量啊更大一些,比如这里的用户的数据量达到了百万级别,达到百万级别。

然后商品呢达到了400万级别,就是它这个数据量更大,但是说对于我们算法来说啊,数据量多少啊,当然会影响到我们推荐效果,但是说不影响我们在处理这个任务的,本身的一些嗯,本身的这些基本的特征提取。

然后数据划分和模型训练,这整个流程都是可以共通的啊,这是啊这个数据集啊,这个的话就是后面大家如果我们重要,还是在第二个第二个数据集上去做,包括后面的项目里面,我们用到的这些代码都在第二个数据上去跑。

所以后面如果是大家跑完了之后,发现唉还有一些时间精力,那可以去拿到其他数据上去跑一跑,但是其他数据一样,就不太能去做一个提交了,因为他们已经结束了嗯,比如我们再看这个剩下两个,一个是啊IJCIRE6啊。

这个比赛的一个,啊这样一个数据集,它这个是英文的,咱不不过不用关心,我们直接去看他这个数据表,它这里包含的数据字段也是同样的user id啊,就是淘宝的用户id ser id,然后这个是我们没有的。

这个是卖家的id,就是你这个商品所属的店铺,他这个店铺的卖家是谁,这里这有一个id,然后这个是我们没有的,然后这里同样的有item id,也是商品的id,然后category id就是商品所属的类目啊。

这个我们也是有的,然后online online action id其实就是我们那个呃行为类型,只不过他这里行为只有两种,一个是零,一个是一零,表示点击一表示购买啊,零表示点击一表示购买。

所以说他这里就更纯粹啊,就是做一个啊,就只有点击和购买的数据来去做一个预估,然后我们那边呢是有四种行为,分别是浏览收藏加购和购买四种行为,然后再往下是这个时间戳嗯,这是再往下是时间戳,然后大家可以就。

所以说从这里就可以看到他这里的额,数据表的这个格式啊,也就是我们数据集的这种形式,和我们那个项目其实是大同小异的,额外的这里又多了一个卖家的id,也是塞拉id,好再回到这里。

就我们在看这个CICIKM这个数据集,这个数据集可以看到,他这里是其实是已经结束了,状态是已经结束,就是大家在这儿就提交不了了,这也是我们为什么选择那个还在阵型中,的一个原因啊。

啊他这里这个描述我们就不管它了,我们就直接看他的数据集是个什么样的东西,让大家可以看到它,这里就包含了啊用户的id啊,商品的id行为类型,行为类型也是啊浏览购买啊,加购物车和收藏四种。

然后时间戳呢就是一个行为发生的时间,这个主的这个用户行为为行为,这个数据表和我们那个几乎是一样的,然后他这里额外多了一些什么东西呢,他这里主要多了一些啊用户的信息,用户的信息。

比如说你当前这个用户他的性别是什么啊,他是男的还是女的,她年龄是一个什么样的层级,他的购买力是一个什么样的水平啊,这些用户的属性啊是我们在我们那边是没有的,那对于商品呢也一样。

商品在这里多了一些属性信息,比如说商品所属的类目啊,这个我们是有的,而商品所属的店铺啊,这个是我们没有商品所属的品牌啊,这个也是没有可以看到这个这个啊数据集,它和我们这个前面我们那个项目里面的。

数据集的一个主要区别,就在我们那个项目数据集的基础上,额外扩充了用户的这种信息以及商品的信息啊,其实这个呢其实也是啊,确实就是大家后面在嗯工作的时候,比如你后面做推荐算法的时候啊。

这种用户的信息和商品的信息,也确实是非常重要的,而且比他这个数据集列的还要丰富,比如用户的特征可能有个啊好几十个商品特征,也有好几十个这种,不过呢就是万变不离其宗,就是说整体的这个特征处理啊。

包括数据集划分,包括模型的训练,这些东西就是都是可以很容易地扩展的,都是可以很容易扩展,比如在我们这个项目的数据集上面,做的这些代码啊,也是可以同样的,虽然说它是扩充了一些属性。

但是也是可以很方便地迁移过来的,好吧,行,这样的话其实我们就啊和大家一起去看了一下,我们这个预估任务啊,我们在回顾一下,就是说我们要做的事情就是要去啊,根据用户在11月18号到12月18号。

一个月的行移动端行为数据,来去预估12月19号的购买,这是我们的任务啊,好在这个任务的基础上,也可以去扩充一些其他数据集啊,然后我们的这个项目,主要是以第二个数据集为主,这个话就看到这里。

就给大家留一个课后的一个任务。

就是说把这个数据集下载下来啊,这是我们第一个任务,就你在下节课之前,需要把天之篇天池平台做一个注册,做一个登录,然后把这个数据集下载下来看一看啊,里面的数据表到底是长什么样子好吧,这是我们第一个任务啊。

然后再往下面呢,就是我们的这个项目书里面也是啊,介绍了一些数据集的一些字段啊,啊这些东西,这我们就刚才已经讲过了,就不重复讲了,然后下面就是环境啊,环境环境就是说从下节课开始,我们就要去写一些代码了。

然后这时候的话我们的主要的环境还是用Python啊,还是用Python去做,这个就要求大家去把这个Python的环境给配好,然后再在第四节课会跟大家一起去用TENSORFLOW,去写一些代码啊。

TENSORFLOW写一些代码,这个的话就是我们嗯,就是后面就如果大家安装上,有什么问题都可以提,或者说使用我们那个呃平台已经提供好的,这种环境去直接去用也是OK的,就不用大家再重新去装了。

然后再往下面就是Python的包啊,Python包主要是pandas as,Pandas as,然后Python的包还有那个SKNSKN,就这几个东西大家需要自己去装一装啊,具体怎么装,这个简单啊。

百度一下都能找得着啊,推荐大家去啊,我推荐大家去装这个东西,这叫anna coda,Anna coda,就这个东西它是包含了很多啊,Python相关的科学计算的包。

包括我们现在正在用的这个notebook,其他里面都有,就提前预装了很多东西啊,不用大家自己再去一个个先去装Python,再去装各种包啊,相对比较麻烦一点,大家用直接下这个anaconda啊。

它包含了很多,他已经预预装了很多这种科学计算相关的包,更方便大家去使用,就包括这个pandas as和sk learn,在那刚才提到的那个ANACQUA,那个工具里面其实都已经有了。

然后这个TORFLOW呢可能需要是大家去啊,自己配备啊,这个也比较简单,随便在网上搜一搜都能找到一些教程,如果有什么问题的话,就是大家也可以问啊,可以在直播间里面或者在群里面问都可以。

好这样的话就是啊给大家提的第二个任务,就是说在那个下节课之前,下节课之前,建议大家使用这个anaconda去去装一个环境啊,然后同时把那个TENSORFLOW,如果参ORFLOW配不好也没关系。

参ORFLOW我们照第四节课才会去用的啊,前面几个几节课主要还是用这个pandas,as和sk on用的多一些,然后这个pandas as呢,主要还是做一些科学计算的数据处理。

然后这个SK0呢里面就包含了很多,机器学习的啊工具,继续学习的工具。

好然后我们项项目书继续往下继续往下,就是一些呃参考的一些资料,参考的资料里面,我给大家列了两篇论文,一篇是那个瓦伦蒂普瓦伦蒂普的这个这个论文,这个论文是谷歌,谷歌之前写的一篇比较经典的一个网络。

就是是比较经典的一个神经网络的一篇论文,然后第二个是AFM就neal factory session machines啊,这个也是做那个这种点击预估啊,这推荐系统相关的工作的啊。

这两篇论文呢就说我建议是大家,嗯当然你可以去看那个网上,别人的中文的一些解读的博客也可以,但是说我还是推荐大家如果有能力,还是尽量去读一读,特别是第一篇,第一篇那个弯的deep的这篇论文只有四页纸。

只有四页纸,其实你读起来也没那么难,就如果你后面真的是要做那个,嗯算法相关的工作的时候,这种文献的阅读其实也挺重要的,就是说借这个机会大家可以去读一读这篇论文,然后读这篇论文呢不只是让大家去啊看。

不是让大家去看他这个网络结构,其实他这个网络结构其实比较简单,就弯了,def这个网络结构,然后更重要的是他这篇文章啊列了很多,列了很多啊,推荐系统里面的一些实战,就一些一些比较好的。

就谷歌他们的一些实践嗯,方便大家去更透彻的去理解,这通讯系统大概是什么样子啊。

这是这篇文章,然后所以说这是嗯给大家的第三个小任务吧,就是说尽量去去做。

就如如果有时间有余力可以去做一做,就是把第一篇论文wand deep one and deep learning for recommend,recommender system啊。

就是说这个网络结构的这个原始的这个论文,建议大家去读一读,如果是实在是啊没时间,或者说英语水平,或者说我就是不想读,读不了啊,那么的话你再去选择去网上去搜一搜,别人的博客。

去讲的中文的博客去讲的这篇文章啊,一些论文的解读的一些文章,建议大家还是自己去读一读,因为它只有四页纸哎,相对读起来还是比较简单的,这个说要用GPU才能跑吗,不用我们我们这个数据集的话。

用CPU可以跑起来,包括后面我们去做那个呃,做那个数据处理的时候,我们会做一些数据的分片,就往就是防止大家比如说自己的呃环境,自己的电脑啊,吃不了或者怎么样会做一些分片数据的分片啊。

不会一下子直接把数据集全都搞到内存里面,GPU的话也不也不用,就说后面的话其实跑起来CPU也能跑得起来,然后有好的书推荐吗,好的书的话就推荐那个呃工业机械,工业出版社的一个推荐系统。

这个的话就是大家看书的话怎么说呢,就是嗯这个同学如果是本身就是学计算机的,只不过是换个换个方向的话,就是我建议就是嗯一个是这种拖延系统的,这种书可以去看一看,但是说嗯更多的还是去看一些网上的一些资料。

我觉得网上的资料可能比,比那个看书可能更更容易,就是更容易让你更快速的去成长,因为书的话其实本身比较厚,看起来比较慢,另外一个就是那个啊统计学习方法,就是这个是刚刚还是推荐了一本那个机器学习。

就是那个推荐系统的书嘛,然后还有还有一个就是跟大家推荐一,推荐一本就是统计统计学习方法,这个是那个李航李航老师,李航老师那本就那本就很经典的,就基本上你是做那个算法相关的工作,都是必读的一本书。

就统计学习方法啊,当然这个没有讲那个神经网络那些东西啊,主要讲的还是啊,主要讲的还是那个传统的机器学习,当然对你这个整个知识体系的构建,其实打好这个基础其实是非常重要的,就你看完这本书之后。

你会啊算是真正的就入门了吧,就对于这块东西,然后还有一本是那个西瓜书,西瓜书这本书的话啊,名字好像叫机器学习吧,反正大家都叫他西瓜书,也是一个比较适合大家去入门的,这种机器学习的书。

推荐大家的阅读顺序啊,阅读顺序可能是呃西瓜书,然后到找这个统计学习方法啊,然后到科研系统这样一个阅读顺序,好吧,行,那我们先休息个10分钟,然后10分钟的之后,然后我会跟大家去介绍一下这个推荐系统的啊。

架构啊,以及就是我们在大家去做一个推荐算法,工程师,在日常的工作中会去呃,做什么事情,解决什么问题,好吧好,我们先休息10分钟,好好我们现在继续,我们现在继续啊,嗯上半节课其实我们主要是介绍了啊。

我们这个推荐系统,移动电商推荐这个任务,这个任务呢就是给了用户在,11月18号到12月18号,一个月时间内的移动端的行为数据,来去预估用户在12月19号啊,他会买哪些东西,这是我们的任务。

然后跟大家介绍了这个后面的环境的配置,然后介绍了这个推荐大家读的一个资料,就是那个瓦伦蒂普的这篇论文,然后同样也有同学问了一些啊书的推荐,比如说这里给大家推荐了一个西瓜书啊,西瓜书其实是比较容易懂的。

就是比较简单,大家比较适合入门,然后在西瓜书之后呢,可以看一看统一学习方法,然后推荐系统,好那回到我们这个,这个项目书啊,项目书到这里的话,其实后面是给大家列了一下啊,就是第一篇论文。

也就是one的deep这篇论文里面啊,中间的几个图,然后借着这个图呢可以给大家去介绍一下,通常的公司里面的这个推荐系统啊,他是一个怎么样的一个流程啊,怎么样的一个工作流程,然后跟大家看完之后。

其实大家如果你嗯一直跟着去看的话,其实会发现这些东西啊其实也是比较直观,比较比较简洁的,他并没有啊,刚开始还没有,刚接触这个东西的时候,觉得哎呀这个推荐系统好神秘啊,或者怎么样,后面大家看完之后。

可能会觉得哎这个东西还挺挺直观,挺挺简洁的,然后先是啊这第一张图,其实这第一张图的话是啊,one的deep的这个网络结构啊,这个网络结构,这个网络结构本身,大家现在就之前如果了解过的话。

可能会觉得非常简单,没了解过的话,没关系,就这节课我们也不用去把它搞得,非非常非常懂啊,非常懂,就通常这种啊,这种圆圈和这种线的这种连接的这种方式,通常就是表示这种神经网络啊,比如说这个圆的话。

就表示一个神经元啊,这线的话就是一个神经元之间的连线,然后这个图呢其实是把是分成了三个部分,分别是最左边啊,是这个Y的models,就是宽的模型,中间是弯的,deep models就宽和深的模型啊。

最右边是deep models,就是深的模型,然后这个我们一个看一个个看啊,就是说啊wide models它就比较比较浅,就是它只有一层,大家看一下,就是这个神经元。

它接到直接接到最后的最后的这个圆圈里面,带个啊S型,就是反的这个S的一个黑线的这种啊,这个东西它叫奇偶函数,就是非非线性的激活函数,这个东西呢它其实就是一个最左边,它叫wide models。

所谓的含义就是说他会把这些各个特征啊,排列开来,排的非常宽,然后最后直接接到一层,就直接到最后的这个输出上,它叫wide models,哼其实这个东西也就是什么呢,大家如果之前学习过。

比如说逻辑回归的时候就可以看明白,就是说这个东西它就是逻辑回归,就是逻辑回归就一层的这种线性模型啊,然后这是最最左边,然后我们来看最右边,最右边它叫deep models,也就是DNN模型,DNA模型。

深度神经网络啊,右边其实就是深度神经网络,要是大家之前嗯之前听说过或者怎么样的一些,深度学习的概念,其实就是最右边这个模型结构,而这种模型结构呢它它主要是包含了这么几块,这中间写了一些字。

然后比如说最开始是spars feature,这里所谓的spart feature就是啊,比如说我们刚才的看到我们项目里面,那个数据集里面的啊,用户的id,然后商品的id,商品所属的类别。

这种特征呢啊叫sparts feature,就稀疏特征,稀疏特征,这种稀疏的人之前在这种Y的model,就最左边这种Y的model的时候,或者说在逻辑回归的时候,通常做法是做one heart。

就是独热编码啊,就比如说100啊,100男女的话,他就分别编码成零一和一零啊,然后呃比如说三的话就就就标识成100啊,100,然后四的话就是1000,就是它会你又你的数字是多少,就是你独热编码。

就是你数字是多少,它就会标识啊多少个啊,多少位的这样一个向量,然后其中只有一位是一,其余全是零,这是sport feature,但是呢在这种deep models也是神经网络里面啊,一般不这么去做了。

他一般是把这个spot feature,先做一个dance的embedding,dance的embedding,这个embedding是什么意思呢,大家可以理解成,就是去一张表里面。

去查找了一个四维的一个向量,四维的一个向量啊,相当于做了一个表的一个查找,然后look up出来啊,这样一个四维的向量啊,每一个SPA feature都有自己的四维的向量,当然这个维度可以是四维咳。

可以是八位,可以是16位,这个是可以设置的嗯,这样的话,就是我们就可以把每一维特征都映射到一个,就是稠密的embedding上面去,然后再把这些embedding给拼接到一起,拼到一起。

然后我们再过一个hen li页,黑人来页,其实就是啊全连接网络,就全连接网络,就是大家啊如果了解过就简单了解过,深度学习的话,就是最基础的这个啊网络结构,就是全连接这种结构,然后我们就直接把这种嗯。

直接把这种dance的embedding拼接上,拼接上这个全连接,然后直接最后做一个输出,直接最后做一个输出,这样的话其实就是啊deep model,Deep model,然后最左边是Y的models。

最右边是deep models,然后wide models呢其实就是如果是它的一个特点,就是说他的他的记忆性非常强,但是泛化能力比较弱啊,然后最右边呢就是他的啊分化性比较强。

然后就是这个所谓的泛化性和记忆能力,这个大家可以先不太去深究啊,就大概有这么一个概念就行,然后中间这个弯的deep呢,其实他就比较直观了,他就说啊,我觉得你左边的这个模型有自己的优点,有自己的缺点。

右边这个模型也有自己的优点,有自己的缺点,那我直接把他们两个拼到一起啊,能不能同时去集结合他俩各自的优点,也是各自的,比如说wide models这种记忆性以及deep model的方法性。

来去提高我的模型的预估能力,这就是wider and deep models的一个来由,其实就是把左边和右边拼到了一起,来看这个网络结构,也可以很清楚的看到它其实就是左边那一块啊。

跟这个wide models长得比较像啊,右边这一块跟那个def models长得比较像啊,然后把它们左右两块都拼到一起,变成弯的D谱,然后一个输出啊就就结束了,这呢就是Y的deep models。

这个网络结构是啊,谷歌啊在18年左右的时候提出的吧,然后也是现在在业内还是有很大的,这种影响力的这样一个基础的一个网络结构啊,非常经典啊,大家就是做这个相关领域的工作的时候。

就必然的就不可避免的要去了解这么一个模型,然后这里的话就是跟大家做了一个,简单的介绍啊,就是说等到第四节课的时候啊,第四节课的时候还是还会跟大家再去展开,再去讲。

然后这个同学问说dance embedding具体是怎么做的,具体怎么做的啊,这个其实是嗯就比如说我们这里SPA feature,SPA feature是啊,比如说我们有100个用户。

100个用户的id啊,那对应成spart feature,也就是1100嘛,1110种就100种值嘛,一般这种值相当于我会做一个啊,把每一个每一个用户啊,每一个用户都映射到一个四维的向量里面。

然当然这个四是举个例子就映射到四维的向量,然后怎么映射呢,就会做一个好。

做一个来写一下吧,嗯比如说一一百一百个用户,然后会做一个1004的一个好embedding table,就是说会会做这样一张表,这张表什么意思呢,就是每一行是四个四个四个实数值,比如说是0。10。2。

然后四个实数值可以做一个随机初始化,就100个这个四十一百个四维的向量,100个四维的向量,然后每个用户一个向量啊,这就是dance bing做的事情,其实就是每给每个用户分配一个啊四维的向量。

然后具体分配的过程,其实就是一个look up的一个过程,啊look up,其实所谓的look up也比较简单,就是说呃100个用户啊,每一个都有都有一个下标,比如说是1~100啊,那按照他的下标。

去这个表里面去找到自己的行啊,就叫look up,就是给每个用户分分配一个四维的啊,实数值的向量啊,就是dance embedding。

然后这个同学讲hen liner额都是全连接吗,啊在这里面是的,这里面都是这都是全连接,就全连接网络的话,就是你可以看一下它就是WX加B啊,其实其实写一下,就比如这里的边,这里的边就是权重。

这里边一般就是权重,就是说会用这一个点乘以一个权重啊,这个点乘一个权重,这个点乘一个权重,然后所有点都汇汇集到一起之后,做一个求和,做个求和求和完之后再过一个奇偶函数啊,奇偶函数啊。

基本的一个过程呢就是说啊就是W乘X啊,加上B啊,这个W的话就是white嘛,w e r i g HT white乘一个加上一个bars,这个这个X这个X就是就是那个输输入,X输入啊。

比如说我们这里叫A等于WX加B,然后Z呢就等于嗯SIGMOID的啊A这么一个过程,这是那个全连接的一个一个一个操作嘛,然后这个全连接的话,他这里就是说基本上采用的方法啊,WX加B这一块基本上都是固定的。

就直接啊直接把这个每一个神经元的这种边呢。

连边的权重乘以神经元的值,再加上一个BIOS,然后求个和啊。

这个这个过程基本上是固定的,只不过区别在这个SIGMOID就是这里的激活函数,激活函数有可能会选择,选择西格玛的,A d s simple,有可能会选择啊瑞路啊,P瑞路这不同的机构函数嗯。

这个的话展开就大家如果是后面准备做这个啊,做这个算法工程师相关的工作的时候,无论是你做什么图像还是什么东西,这种激偶函数,这种基础的知识都是必须要掌握的啊。

全连接计算量很大啊,怎么优化,其实这里的话啊对于我们这个嗯,对于我们这个呃,其实对于这个啊这种推荐系统的这种啊,全连接结构来说,计算量怎么说呢,就是说在现有的这种硬件设备下。

它不是一个特别大的一个难题啊,就是说因为我们这个特征的维度啊,他们他们都是过了embedding的,都是过了embedding的最终展开,比如说你有100个特征的话,然后用16维的向量。

那可能只有个1000多维吧,就是这个最开始的输入,然后中间的声音源可能是几百维的,这种这种维度。

那最终你其实你的计算量,你可以想一下计算量发生在哪里,计算量其实还在这个乘法操作啊,就是你这个Y乘以X的这个操作,然而这种矩阵乘法呢在现有的这种设备,硬件设备的情况下。

比如说用那个GPU做并行计算的时候,做这种惩罚本身是啊已经优化的非常好了,已经优化的非常好了,它可以直接并行的去做这种矩阵的相乘啊,速度还是非常快的,就是说一般情况下啊,大家作为这个算法工程师来说。

一般也不用去优化这种东西嗯。

好吧,行那我们继续,这就是跟大家一起,就快速的看了一下这个网络结构,然后再往下呢,就是这张图就是推荐系统的,就overview,overview概览就大概是一个怎么工作的一个流程啊。

我们直接就先不看这个阴影的这部分,就先不看灰色这部分,直接看最左边,最左边是什么意思呢,就是一个query,一个query就一次请求,比如说你现在打开手机淘宝啊,打开京东打开的那一刹那啊。

其实就会给那个服务器发送一次请求啊,这就是我我来了,这时候你要给我推荐一些东西,这一次这个请求就要query,然后query请求完这个啊服务器之后,会返回一系列的推荐结果,比如这里的items哎。

这个items它不是随便给你出的,中间会经过推荐系统给你做一些推荐,然后这个items本身是排好序的,比如说第一个坑出什么,第二个坑位出什么,第三个坑位出什么,是排好序的,嗯然后当你看到这些商品之后啊。

你自然就会做一些行为,比如说你会做一些点击啊,会做一些购买,做一些浏览或者做一些下滑,其实这些这些动作呢,也都会重新再反馈到那个服务器里面去啊,这就是整个流程了,就是整个从从这个用户的角度的一个流程。

那我们回到这个在线的推荐系统里面,他具体是做了什么事情呢,就当一个请求来了之后,他首先会做一个检索啊,会做一个检索,这个检索的话先是从那个全量的商品库里面,然后这个商品库就非常大了。

就在线商品库可能是上亿级别的这个商品库,然后他从中检索出来就是最相关的啊,最相关的一些商品,比如说计算出来100个,捐出来100个商品,然后检索这这所谓的检索,其实也对应于我们常说的推荐系统里面的召回。

召回这样这样一个步骤,然后召回完之后,我们就会对这个召回的这个商品做一个排序,排序啊,排序的话其实也就是打分,按照什么去排序,按照啊按照用户的点击率去排序,或者按照用户的这种购买率,购买的概率去排序。

这是常见的这种做法,然后这个排序怎么排呢,一般是我们会训练一个模型,而这个模型怎么训练呢,就是根据用户之前的action,有之前的用户行为,我们会在啊推荐引擎里面,会给大家记录一些日志。

然后记录下日日日志之后会做一个学习啊,做一个模型的学习,然后这把这个模型用于在线的排序啊,用于在线的打分排序,然后最后把这个打分的排序的top10,这个结果给返回给用户,就是推荐系统在线的这个流程。

其实可以看到他这里的主要步骤,主要步骤其实就两块,一块是这个召回,一块是排序,也是这个这个召回这个排序,然后我们这个项目主要关注点是在哪里呢,其实是在这个ranking。

那就是在这一块就说怎么就下面这几个步骤,就是用户的logs,用户的这个日志,用户的行为日志,我们怎么去构建一个学习器,去学习一个模型来去给给这个商品做一个排序,这个是我们这个项目要做的事情啊,对应起来。

然后刚才讲的是在线的时候有一个呃跟用户,用户的一次请求来了之后,在线怎么去做的一个overview,就推荐系统overview,那那完整的去看这个呃,他因为这个谷歌的这篇文章是做那个应用商店。

就google play的应用商店的app的一个推荐嘛,所以说他这叫apps recommendation pine of view,就是推荐系统的一个PIPINE,一个流程是个什么样子的啊。

比如说我们这里可以叫啊,电商的商品推荐的PUPINE,然后我们先去看啊,就是一般我们拖延系统模型是怎么去构造的啊,我们去看一下,其实它主要分成了三个大的步骤,第一块是data generation。

就是数据的生产,第二步是model training,就模型的训练,第三步是model survey,就在线模型的在线服务,那么一个一个去看,就比如说第一块是数据的生产,所谓的数据生产。

也就是我们比如说我们训练集训练数据的生成,样本的构成,然后包括什么特征和构建,其实都是在这里,比如这里,他就根据用户的数据和这个在线的app的展,现的日志,然后我们就可以构造出来训练数据。

构造出来训练数据,然后下面他还额外过了一个呃词典的一个查找,这个大家可以先忽略啊,就是这里是他这边嗯比较独特的一个地方,咱们可以忽略掉,不管它基本上大便的操作,就是根据用户的数据和。

用和在线的这种展示日志,然后来去构造训练数据,然后这样就完成了啊,数据的一个样本的一个生产,然后在模型训练的时候啊,其实就拿到这个数据产出的训练样本,做一个model trainer,就模型的训练啊。

Model trainer,然后这个模型训练这里有两个细节,大家要注意一下,一个就是previous models,就注意就说啊,这也是大家平时啊看各种博客啊,或者说看各种书的时候。

可能了解不到的一些细节,就为什么要推荐大家去读这篇论文,就一般情况下在线推荐系统啊,不是说像我们项目里面啊,就是在线的时候,在线上服务的时候,可能不像我们项目里面提到的那种。

比如给你一个月的数据去预估啊,接下来一天他会购买什么东西啊,可能不是这种从0~1直接去训练的,而是说因为我们要而是说线上的时候,我们都有前一天,那么这个模型,这个前天的模型。

其实是可以给你当前的模型提供一个啊,比较好的初始化参数的,比较好的初始化参数,所以所以说比如说我们天级别去训练模型,每天训练一个模型的话,那今天我们模型训练的时候,其实就可以把昨天的训练的结果。

训练的模型参数结果直接拿过来,作为我们今天训练的模型的一个起始参数啊,这样的话其实对于我们今天的模拟训练,其实是比较好的,这是第一个细节,就是说啊模型大多数情况下不是从零训练的。

而是从前一天的模型的基础上啊,做一个增量的训练,这是啊,第一个细节就是用previous models做一个增量训练,第二个细节就是当你的模型产出后,并不是直接就推到线上啊,直接去去做在线打分的。

不是这样的,而是中间会经过一个model verifier啊,就是模型的一个校验,这个模型校验是做什么目的呢,它主要是做一个啊质量把控,就说你的模型产出别是训练跑偏了,或者说是模型训练出错了。

会导致你这个模型是有问题的,相当于对模型做一个校验,然后一般是怎么校验呢,就比如说我会嗯,我会随机划分出来一一小部分样本啊,作为验证集,然后看一下模型在这个验证集上的一个打分啊。

他的打分的各项指标是不是正常啊,来作为这个验证,然后只有通过验证之后才会进入到下一步,就是把模型推送到线上,也就是这个model seven的这个过程啊。

model seven这一块的话就是啊会单独部署一个model service,就model模型的一个服务器啊,有在线打分的一个服务器,它和推荐引擎一般是独立开来的,然后推荐引擎会去请求这个模型服务器。

然后返回打分结果去做一些策略的一些推荐啊,这样的话就是啊推荐系统的一个pp i,pp i整体来看就是分成了三个大的模块,分别是数据的生产,然后模型的训练以及模型的服务啊,三个大的步骤,好啊。

其实这个看完之后,大家应该就是说对这种啊推荐系统来说,就是不是那么一头雾水了,就知道至少知道就是说一般这种嗯,公司里面的这种推荐系统一般是怎么工作的,确实是有一个相对比较啊,直观的这个理解了。

这是推荐系统的pipeline,这个大家不用担心,就是说我们现在这里就是带大家,就是有一个这种直观的概览性的认识,然后等到我们后面第四节和第五节课的时候,会给大家更详细的展开。

就是说一般的推荐系统的架构是个什么样子的,一个工业实战,就是在工业生产中一般讲的什么,一般更细节的一些问题,可能会跟大家去做一个介绍好吧,再往下就是one的def models的一个啊。

他这个模型的一个更更详细的一个结构啊,更详细的结构啊,可以看到这里的最下面,一般看这种模型结构都是从下往上看,然后最下面的话就是呃连续值特征,就continuous features。

就连续值特征和category ical features,就是类别类的特征,这个连续值特征就包括什么呢,比如说用户的年龄,用户安装的app的数量啊,这种可比较的可比较的这种啊。

这种数字都是可以称之为连续值特征,然后什么是类别类的特征呢,比如说它的设备类型,它的手机型号,安装的app的列表,这种东西都是啊类别类的特征,然后一般实数值的特征,是直接拼到那个神经网络中去。

而对于这种类别类的特征,要先过一个embedding啊,embedding的方法刚才也跟大家讲了,就怎么去做这种embedding,其实就是一个查表的一个工作。

那把这个所有的啊类别类的embedding啊,和这些实数值的特征啊拼到一起,拼到一起就作为模型的一个输入了,然后模型输入之后,再过一个1024个神经元的啊,以reload作为基础函数的一个全连接。

然后再过一个512个神经元,以re录作为奇偶函数的啊声音这种全连接,然后再过一个256个神经元,以维度作为求函数的全连接,然后最后输出到这个逻辑回归loss啊,逻辑回loss其实就是一个逻辑回归。

再加一个交叉商损失这么一个过程,当然呢包括右边也会做一些啊,这个用户特征之间的一个交叉啊,这个到表示细节的问题了,这是啊相对比较详细的这个网络结构啊,网络结构好吧。

这就是啊这几张图呢就是one and deep,这个文章里面的几张配图,这就是我们不去看这篇文章,就只是看一看这个图,其实大家都可以看到很多这种啊,比较细节的这种东西啊,当然这是。

所以说就推荐大家尽量就有时间去读一读,这篇文章啊,有时间去读一读这篇文章很短,就有时间可以读一读,花个啊半下午一两个小时,其实基本上就能看完了,啧这个读这个论文啊,其实是后面你想在这个算法这个工作上。

想走得更远,其实是一个基础的能力,而这个读论文其实也是有些心得的,就是说你看这个论文一般是越看越快的,就是说你刚开始刚进入这个领域的时候,可能读起来啊比较吃力啊,比如前四五前两三篇文章啊,看的可费劲了。

一一个一一个文章都能看大半天,然后他是越来越快了,到后面你会发现哎他们讲讲这个模型的时候,讲的这些步骤啊,很多东西都是共共用的,基本上就是一篇文章到后面,可能比如说半个小时,20分钟就能就能看完了啊。

它是一个越来越快的一个过程,所以大家要平时要注意这种积累,好这是刚才讲的这个万能DF里面几个配图,然后跟大家大概介绍了一下这种推荐系统的啊,架构,以及它的pipeline是个什么样子的。

然后再往下就是那个两个模型的一个代码,实现的一个参考,大家注意这个是参考的,不是不是我们项目的代码啊,这是参考的,这个呢就是我们的这个项目书的一个,主要内容了啊,主要内容就是这些东西。

那我们这个任务呢刚才也跟大家讲了,我们主要目的还是啊,去根据用户在一个月的运动员行为数据,去预估他的一个购买,然后那我们这个项目本身的一个学习目的,就是通过这个过程,通过这个过程。

因为之前大家多多少少吧都了解过一些基础,机器学习的一些啊基本的一些概念,然后呃包括那个推荐系统吧,多多少少都有所耳闻,那咱们这个项目的目的,就是希望大家可以啊深入到这种代码上。

然后完整的经历这么一个从特征构建,然后到数据集划分,然后到这个什么对这是个业务业务,或者说这个题目的这种理解,然后到模型的啊,预估模型的调参啊,然后到最后的这个结果这个提交。

那大家可以完整的去经历这么一个过程,然后减少就是额减少,就是大家对这个东西的这种陌生感啊,其实就是一个实战的一个目的吧,啊,当然这个过程中,可能不会把各个这种知识点的细节都涉及到。

大家注意到我们做这种做这种实战项目啊,不可能把所有的这种模型结构啊,所有的这种啊这种这种模型之间的这种细节,都涉及到他更多的偏向于啊针对这么一个任务,针对这么一个具体的这么一个任务。

它合适的一个模型的一个结构的选择啊,合适的一个特征的一个构建方法啊,其中它可能只占到你学过的这些基础知识,里面的中间一小部分,单说是可以完整的面向面向这种任务本身啊,可以形成一套啊一套方法。

但是这也就是说,我们这个项目不会说涉及到特别多的基础,基础的知识的这种体系化的这种结构,所以说希望就是大家啊,后面因为因为就是大家后面比如说找工作啊,或者什么东西的这个基础知识还是非常重要的。

就大家希望就是除了我们这个项目之外啊,希望大家可以更多的去啊,多准备一些基础知识,一定要把基础打牢,把基础打牢,把这些机器学习呀,深度学习啊,各种基础知识方方面面的,包括那个特征工程啊,啊。

包括数据集啊这些什么的东西都搞得非常扎实,然后这时候话你后面再去啊,再去面试或者再去工作的过程中啊,都会有比较大的这个收获吧,嗯previous model是不是类似迁移学习,是的是的。

但是说增量学习可能更更贴切一点,其实他也是迁移学习,可以称之为增量学习,就是说在之前一天的模型上啊,再去在新产出的,因为它是一个通讯系统,它是一个每天都在迭代的一个一个模型嘛,就相当于在之前的模型上。

在新产出的样本上做一个增量训练啊,可以叫增量学习,论文翻译用什么工具好啊,我建议啊,我建议你是直接用那个有道的词典,直接去查具体每个单词的意思,最好不要成大段大段的去给他啊。

复制到某个什么翻译软件里面去看,这样就脱离了我们去看他原文的这个初衷了,就你直接去看翻译,就用工具去翻译,不如直接去看那个别人这种解说的这种论文了,不如直接去看别人的博客了,因为你翻译软件必须用。

毕竟是啊,毕竟是那个嗯就是机翻的嘛,还不如那个博主他们给给给写的好,所以说推荐大家就是具体,就是看到不认识的单词可以去查一查,但是完整的句子还是自己去理解,课件发群里会的,这节课结束之后会发到群里。

包括额除了课件之外,也包括我们啊后面后面几次课会用到的代码啊,也会发到群里面的,然后希望大家就是在下次下节课之前。

要要做的三个事情,一个是下载好数据集。

另外一个是把那个环境环境给安装好,另外一个是如果有时间的话,建议大家还是去读一读那个啊,WDL论文可能一开始很费劲,我需要读个大半天才能看完啊,但是这个过程是是循序渐进的,就是说你如果是想在这个啊。

当然你如果是只是来听一听,他们是在做什么事情,那你可以不去读,但是说你如果是想在算法这个领域继续工作,有一个比较比较长的一个职业规划的话,我建议你还是慢慢的去积累,这些能力包括你去啊读论文的这种能力。

还是还是要去做一做的,还是要去做一做。

好下面我们还有一些时间啊。

就是大家有什么问题可以随时问啊,就是说我想简单跟大家展开的去讲一讲,就是对于推荐算法工程师啊,或者说也可以叫算法工程师,所需要的工程能力和算法能力,这也是很多特别是跨方向的一些同学,他很关心的一些问题。

尤其是一些工程的同学转过来,他们经常遇到一个问题,就是哎呀老师,我想呃需要就比如我想做推荐算法,我需要对C加加掌握到什么程度啊,我需要对什么map reduce掌握到什么程度啊,经常会有这种问题啊。

这个的话就是我觉得这个应该去,其实是很多原来做工程这些同学,他的一个固有的一个技术学习路线,的一个被自己给框框住了这么一个问题,就是说对于算法工程师来说,什么是最重要的,什么是最重要的。

先跟大家讲什么是最重要的,对于算法公式来说,最重要的是我这里写的这两点,一点是要对常见的这些算法,和常见的这种网络结构,有时是常见的,这种算法模型可以可以理解成,最新的这种业界的这种这种网络的啊。

模型的这种进展,这种这种了解是你第一个最核心的技术能力,就各种模型结构的理解,各种损失函数的理解,各种基础函数,各种神经,神经网络中间的某些某些这个呃,layer的这种理解啊,这种东西。

包括你对整个的呃,算法相关的知识面的一个扩展啊,这些东西是你更重要的供,更就是最重要的技能啊,技术技术能力是最重要的,是这一块,第二块是业务理解,因为你的算法,你所谓的做算法不是空中楼阁,不是啊。

我不是一般情况下就在公司里面,你做这种业务相关的算法的时候,他不是一个空中楼阁,不是像那个学术界那种定义好的,你就要去解什么样的一个啊图像分类的任务,或者说你就要做一个啊什么哎,就是什么图像分类啊。

什么什么这种那种特别特别规范的这种任务,大多数情况下很多很多这种你做应用算法,很多事,你要做的预估任务,是和你的应用场景是强相关的,而且和其他人也不太一样,就算是做这种点击率预估,你在淘宝做顶级率预估。

你在淘宝的推荐算法中做统计预估,和在淘宝的广告算法中做点击预估,那可能都是不一样的,那你更不用说你在这种电商平台做电预估,和你在什么新闻推荐新闻,比如说字节字节跳动,今日头条这种做顶级预估。

那又是不一样的,那么它们之间的区别,就是因为你所处的业务不一样,比如说你做新闻推荐的话,你要考虑新闻的这种新鲜度,新闻的时效性,这种东西你要考虑到你的模型里面,而在那个电商里面。

你要考虑你的多目标的一个排序,比如说你不仅要考虑点击率,你还要考虑成交额,考虑这种啊,点击收藏架构啊,这种东西就是它是和业务具体相关的,这也就是说我我觉得对于算法工程师来说,最重要的两个能力。

第一个就是你对算法技术本身的,常见的网络结构,常见的算法本身的这个理解,第二个就是对业务的理解,这两个是最重要的,而在这个在这个最重要的事情之外,就是你的工程能力,才是你的工程能力。

所以说有很多同学问什么,C加加掌握到什么程度,这个问题的统一答案就是会用就行,什么叫会用就行,就是你能实现啊,你能你能通过这些工具,其实这些比如说什么MAPREDUCE啊,探测flow啊。

什么这些C加加啊,什么东西,这些东西对于你一个推荐算法工程来说,他们就是工具,就你实现你自己想法的工具,所以说你能实现你的想法就够了就够了啊,能实现你的想法就够了。

不要去纠结于比如MAPREDUCE的底层原理,MAPREDUCE的框架实现什么,HBS的一些框架,实现它的一些技术细节,不用纠结,不用关心,不重要,重要的是你用这些工具去实现你的想法啊。

就当然说你研究更深入了之后,你可以去研究这些东西的一些底层实验,但是说在我们就是大家大家现在在在在听课的,就是这种阶段来说,不应该去花费太多的精力,去研究这种工具本身啊。

建不建议大家去再去跟这个东西去做,思科就是它会耗费你很多精力,而且不是不是你后面面试,还是工作过程中最重要的事情,单说一些基本的能力还是要有的,比如说技术的基础的这种数据处理的能力。

比如说你MAPREDUCE怎么写,AGBS怎么用啊,这些东西包括实时的特征和实时的学习的,这种f link怎么用,大概理解一下,看一看demo就够了啊,不要太去深究,不要太去深究啊。

然后常见的这种深度学习框架,比如TENSORFLOWPYTORCH啊,GBDT这种这种东西也是同样的,你会用就行,比如TORFLOW的分布式,实现他的他的那什么PS结构怎么搞的。

这种东西你不用当你后面研究生了,你可以去学,但是在这个阶段啊,不要太去深究,不要太去深究,不要花费太多精力在这上面,然后第三个就是那个在线服务的时候,可能会用到的。

比如说C加加的一些策略开发模型的一些上限,同样的不需要深究啊,会用就行,会用就行,然后把你的更多的时间精力放在啊基础知识,基础的算法能力啊,基础的网络结构啊,基础的甚至于数学啊。

甚至于你对基础的一些啊概率论啊,基础的一些,比如线性代数,这些东西,都比你前面这些工具本身的代码实现更重要啊,这是我们后面就是大家,大家特别是对一些换方向的一些同学,一定要注意的一个事情。

就是说一定要把握住你要学习的侧重点啊,这是跟大家讲了一下,我们的这个推荐算法工程师,所需要的这种算法能力和工程能力啊,总结成一句话就是关注算法和业务本身,然后对那个这种框架工具和甚至于什么Python。

C加加这种语言的要求,就是会用就行,把你更多的精力放在对算法的研究上,对那个甚至于数学本身的基础的知识的研究上,大家有什么问题都可以在这个里面问。

这个同学说35了,转方向还能找到算法工作吗,这也是我觉得这个同学可能担心的,就是,比如说我在这个某个做后端做了这么多年了,我觉得你如果是就是以你的经验,其实你35岁其实是应该是比较有经验了。

就以你的经验和你的学习能力来讲,去找一个算法工作,其实是没什么问题,我觉得应该是没什么太大问题的,只不过呢就是,就是在这个阶段你要考我认为你要考虑的是啊,怎么样更适合你的发展。

就是你你你转成算法之后会不会得不偿失,就因为你在本身的你自己的方向上,已经积累了很多经验,这时候再转到算法上来来说,是一个是一个,其实是是一个比较嗯比较大的挑战吧,其实就无论是前面有的同学。

也有一些换行的这东西,对你原来你在行业里面已经深耕了好多年,56年七八年了,你这时候你再去突然换一个行业,那其实就相当于从零开始,那这时候的话对你自己来说,你到底啊是怎么打算,怎么考虑的啊。

能不能抛弃掉,就就是你怎么去做这么一个趋势,这是你要更多的考虑的,这东西是不是要降低要求才行,那是肯定的呀,就是你换了一个方向之后,那比如说原来啊原来你是在那个,比如说在前端上面。

或者原来同学是做前端的,那在前端已经做了一个team leader,然后做了呃管理一个团队了,然后这时候你再去突然说要转成算法,转成算法的话,那这时候啊去比如说换工作的时候,那别人对你的这个背景啊。

对你的这个呃很对你的这个呃能力,他可能就不能匹配到你原来的这种层级了,有可能会啊,确实是得降低要求才可以,特别是像咱们这种技术性的这种专业性的,比较强的东西,特别是这种换方向还是嗯自己要考虑好。

考虑好啊,是不是在原来的原来的方向上,是不是真的就没有没有什么太好的发展了,然后必须得换一换,那这时候那确实你得得度过,比如一两年的这种,一两年换方向带来的这种阵痛期吧,呃要换方向的话。

你至少比如说得一两年,你才能真的是深入到这个方向里面啊。

然后我看有的同学现在刚进来啊,就是我啊简单就是回顾一下,就是我们下节课之前就是来的比较晚的,这个同学他需要做的做的事情,第一个就是把那个数据集下载好,把数据集下载好,第二个是把环境配置好。

第三个是可选的,就是说我列了两篇论文,其中一篇是one的deep的论文有四页二啊,建议大家去读一读,当然是在你学有余力的时候,有时间的时候去尽量去读一读,培养自己这种如果你做算法。

就培养这种读论文的这种习惯,好吧,这后面的给大家的啊三点要求,然后后面我会把咱们今天讲的这个笔记,今天讲的这个笔记以及。

我们的项目书,以及我们在后面的几次课中会用到的这些代码,会用到这些代码啊,公认证代码都会给给大家发到群里面去,好吧,这个同学说他是创业失败重新回来找工作啊,那确实是很不容易啊,就是特别是你对。

其实我也认识一些朋友也是创业的,然后就是本身自己做创业跟工作,其实是两种心态,你自己其实挺还是挺辛苦的,要把握好这种心态的平衡,就因为你创业的时候可能相对比较啊,比较那个相对比较那个自自己的啊。

要求上可能会更自由一些,然后跟工作可能在心态上自己一定要调节好,就除了这个本身的这种专业知识之外,好吧行,那我们今天这节课就到这里了,然后后面我会把这个课件之类的发到群里面去。

好吧,谢谢大家。

1447-七月在线-机器学习集训营15期 - P17:9-朴素贝叶斯、SVM模型精髓速讲 - 程序员技术手札 - BV1ASste6EuZ

We used to calling outside your name,See you tonight,So i can keep on going to,I don't know where i。

I get some kind of mazy day,I've been riding this through to find my town tonight。

I'll be due tomorrow,But as both the sun,Cause it's hard for me to lose in my life。

I've found only time d figure out that,We can better,We can do the one night stand in。

And it's hard for me to lose in my life,I've found outside your skin。

Right near the fire that we can b we need change to be alright。

I'm a little used to wit from outside away,You can leave me tomorrow with suits。

You were trying to sa,But i don't know enough,I need somewhere,It leaves the d。

This is how you need to lose in my life,I've found only time will turn out,Taking out。

Can we do the one night stand here,And it's hard for me to lose in my life。

I've found outside your skin,Right,Near the fire baby,We can change and feel lost ri。

Cause it's hard for real losing my life,Have found only time,Will tell you。

I will figure out that baby,We can do the one night stand,And it's hard for me to lose in my life。

I've found outside your skin,Right near the fire that we can baby,We can change and feel alright。

Because it's hard to be lose in my life,I've found only time and the fire on a week。

Can build it qua one night stand,You is this,How you been used to my life。

I've found outside your skin,Right near the fire,I'm a little used to calling outside your name。

I won't see you tonight,So i can keep from going ins,But i don't know when i。

I get some kind of lazy day,I've been riding this through to fight my town,I'll be stewed tomorrow。

I leave us,Both of sur,But i don't know enough,I get some kind of lazy。

Cause it's hard for me to lose in my life,I've found only time,Will d figure out that。

We can we do the way,I stand is,And it's hard for me to lose in my life,I've found outside your skin。

Right near the fire,You better,We need you to be alright,I'm a little used to woman on outside away。

You can leave me tomorrow with suits,You just the same,But i don't know enough,I need somewhere。

It leaves the day,Yeah,This is how you need to lose in my life,I've found only time will turn。

I'll figure out that,We can do you know what i stand here,And it's hard for me to lose in my life。

I've found outside your skin,Right,Near the fire baby,We can change and feel alright。

Cause it's hard for me to lose in my life,I've found only time will tell。

And i will figure out come baby,We can do the one night stand,Yeah。

And it's hard for me to lose in my life,I've found outside your skin,Right。

Near the fire that we can baby,We can change and feel alright。

Because it's hard to be lives in my life,I've found only time will tell,And i will give you all。

And do the one night stand here,And as hard,As you to my life。

I've found outside your skin right here,A little used to calling outside your mind。

I won't see you tonight,So i can keep from going to take,But i don't know what i。

I get some kind of lazy day,I've been raging through the fight my time,I'll be stewed tomorrow。

I don't leave us some important centers,Cause it's hard for me to lose in my life。

I've found only time again,Take it out,And we can do the one night stand here。

And one for me to lose in my,喂喂嗯,如果声音和视频没有问题的话,我们就准备开始好吧,按照我们的安排呢,今天晚上我们和大家一起讨论一下,关于支持向量机的内容,SV呃。

非常重要啊,这个我们先看一下,啊为什么这么说嗯,第一点呢是因为这个支持向量机,是在我们机器学习方面嗯,特别是深度学习之前,这个阶段可以说是最重要的模型之一啊,大家如果有兴趣的话。

可以翻看一下大约十几年20年之前的论文啊,啊各种各样的基于支持向量机的改进模型,非常类似于我们现在深度学习领域,各种各样的人工神经网络的修改啊,各种各样的变形,也就是说哈,就是十几年之前。

SVM的这个地位和现在深度学习当中,神经网络现在的地位,基本上是相同的一个概念啊,从此也可以看到啊,这个工作啊这个的重要性,当然啦因为呃限于啊只是向量机这个工作,这个模型的性能啊。

已经达到了一个相对来说就是瓶颈啊,不会像深度学习那么构建的,复杂的人工神经网络取得那么好的效果,那么为什么在现在这个时间点上,还要向大家做一个介绍,是因为在实际的工作过程当中哈。

我们往往需要对我们的工作的结果,做一个评估啊,就是我们到底做得好还是做的有问题,需要做一个评估,既然要做评估,就要有一个比较的基准或者极限啊,现在呢往往呢我们习惯上可以使用这个SY啊。

现在我们已知的数据集上跑一下SM,看一下结果啊,作为我们一个基线,然后呢在此基础上呢,我们可以构建各种各样的模型啊,包括机器学习模型,也包括深度学习模型嗯,做性能上的改进和优化。

那这样的话我们就有一个评估的一个标准,好吧,嗯这是第二点,第三点呢,就是在我们这个实际的面试过程当中啊,找工作面试的过程当中,往往呢支持向量机,也作为一个非常重要的考察点,来这个和同学们有一个。

就是面试官和你有一个交流啊,所以这个时候呢嗯很很很很显然哈,你需要对它有一定的了解才可以,所以基于以上三点,就是第一点呢就是它本来就很重要啊,第二点呢就是就是第一点它性能很好,本来就很重要,第二点呢。

就是他这个作为现在的一个,工作基础或者工作基线啊,也是需要对他有个了解,第三点呢就是面试的过程当中会考察得到啊,所以基于以上三点,我们还需要把它做一个介绍,那么支持向量机它的前序工作啊。

有兴趣的同学可以看到是感知机模型啊,感知机模型,感知机模型再往前去啊,可能就是我们的线性回归模型啊,感知机模型呢和我们的逻辑回归模型,其实呢非常类似,只是他们的激活函数不一样。

而且他们的这个呃优化策略不太一样,所以呢导致他们产生了,或者导致了两个不同的方向或者结果,嗯从这个角度上也可以看到啊,即使复杂相支持向量机,它的基础模型其实还是线性回归啊。

一会儿我们会介绍到为什么这么说好吧,其实还是在此基础上做了一系列的改进而已啊,今天我们聚焦在这儿啊,聚焦到这嗯,说一下后面的安排,后面我们逐一的安排是要讲到charge boost啊,所以说啊。

这个我们上一次讲到了这个决策树模型的部分,还是希望大家回去以后啊,这个有重点的回顾和学习一下,然后呢我们在周一的时候介绍XGB的时候,你才才才才大约有一个这个基础是吧,这个地方需要注意一下呃。

看看声音和视频,如果没有问题的话,我们就继续,OKOK就要讲倒车相机,OK那先看一下这个主要内容啊,知识向量机的内容其实还是蛮多的啊,很多比如说哈,我们要讲到所谓的线性可分支持向量机。

也被称之为是硬间隔支持向量机,另外一个呢是线性支持向量机,也被称之为是软间隔支持向量机,那第三部分呢是所谓的非线性支持向量机,引入了和技巧以后进行非线性化,第四部分呢就是序列最小最优化和SMO啊。

最后呢当然是个应用嗯,除了应用之外哈,就是我们这一周主要是原理部分,所以我们下一周会介绍详细的应用过程啊,我们聚焦在上面,以上四个部分,在这四部分当中啊,是彼此递进的关系啊,彼此递进的关系。

也就是说线性可分的支持向量机就是硬间隔啊,是最基础的,然后在此基础上进行改进啊,引入所谓的松弛变量,构建所谓的软间隔,然后呢在软结构的基础上,我们引入和技巧,改进成所谓的非线性支持向量机。

可以处理非线性数据,最后呢,我们使用SM对我们以上的最优化的一个函数,进行一个求解,就完成了整个的内容介绍,那么在这四部分当中哈,这个呃最基础啊,大家要把第一部分啊,就是硬间隔这一部分嗯。

搞得非常清楚才可以啊,以适应啊,这个面试过程当中的一些基础性的问题,那么再进一步呢,其实最好还是把123部分啊,就是硬件和软件构架和技巧部分能够搞清楚啊,这样的话啊对于SMSM的原理部分。

应该就问题不是特别大了啊,当然如果还有兴趣的话,你可以把SISMO也跟一下,因为我们最后的这个优化算法实现,是根据SMO来实现的,所以这四部分之间的关系啊,也希望大家能够有一个了解。

那么我们就从最基础的这个硬间隔开始介绍,那么硬间隔支持向量机哈,首先我们把它所需要解决的问题搞清楚,我觉得这是非常重要啊,后面我们会讲方法,就是怎么解决它,但是一开始哈很多的时候嗯。

同学们就是问题都没有搞清楚啊,就是没有带着问题去找解决方法,这个时候就会更大,更加的混乱,好吧,我们看看第一个啊,首先我们看数据集,我们拥有的数据集是T啊,X 1y1 x 2y2,一直到XNYN。

这是我们一个典型的有监督数据的一个数据集,其中呢,xi是属于我们输入空间里面的一个元素啊,这里的xi是我们输入空间里面的元素,很显然因为它的黑体表明它是一个向量,它是等于一个RN空间里面的一个向量啊。

RN的一个向量,N维的向量,其中的YI就是我们的标签数据啊,就是我们的标记,那么YYI呢是我们花外啊,输出空间里面的一个元素,注意它的定义啊,注意它的定义,那么它的输出空间等于什么。

输出空间被定义为正一负一,那么很显然啊,硬间隔支持向量及处理的是所谓的,二分类问题啊,二分类问题,两个类别正一和一,有的人就会有疑问啊,既然是二分类,我定义成零和一,可不可以,比如说我们上次之前介绍。

介绍过那个逻辑回归模型对吧,也是个二分类,但是在逻辑回归模型当中,它的二分类的标签被定义为是零一,在这里啊非常明显的一个区别,支持向量机当中的标签是分为正一和一,代表两个类嗯,能不能换成零一嗯,不可以。

因为后面我们会使用到这两个值的一些技巧啊,这个地方需要注意一下,那么I呢是从一到N1共有N个数据样本,其中xi啊为第二个特征向量的实例啊,下标为I嘛,是第二个数据,YI是DXI的对应的类别标记。

对应的类别标记,当YI等于一的时候,当Y等于正一,我们认为xi称之为是正立或者正样本,当YI等于一的时候,我们称xi为负利或者负样本,那么XIYI呢就被称之为是样本点啊,样本点这里的正负啊。

你会发现xi啊,我们xi的正负是根据它所对应的标记的正负,来进行判断的啊,你是正一,那你就是正立,你是一,那就是你就是一,看下面,那么所谓的线性可分支持向量机,或者叫做硬间隔支持向量机。

就是给定一个线性可分的数据集,这里假设啊,这里假设我的数据1T是线性可分的啊,这是前提条件,那么在线性可分的数据及T上,我们通过所谓的间隔最大化或等价的求解,相应的土耳其规划问题。

那么学到一个所谓的分类超平面,W星X加B星等于零啊,以及它相应的分类决策函数,FX等于sin w星X加B星,这个就被称之为是线性可分的支持向量机,也就是说最终的线性可分向量积就是个FX。

这和我们前面介绍的是相一致的内容对吧,我们一直在强调,所谓的模型就是我们的映射函数,那么这个映射函数呢是通过后面这个算W星,X加B星来构建完成的,里面需要说明的是,W型和B型为直直向量机模型的参数啊。

不是感知机,是SVM模型的参数,W星呢也是一个RN的一个向量,我们把它称之为全职或者全职向量,B型呢是属于R的,很显然是个标量,叫做偏执偏执,W星是X中间我们做的是内积计算啊。

内积计算表示W星和X的内积,注意这里的SN是一个所谓的符号函数,符号函数的含义就是我们只取W星X内积,计算完成之后,加上B星的那个结果的那个符号啊,那个符号我提取出来,把那个符号函数有了以后。

我们把它复制给我们的输出,得到我们最终的当前X输入以后的那个输出值,就可以了啊,这就是所谓的硬间隔支持向量机放在这儿嗯,介绍完以后呢,可能会大家会就是莫名其妙,到底他讲的是个什么事,还是不清楚是吧。

那么这个时候呢,我们需要把这一段的文字描述啊,把这一段文字描述,把它转换为啊我们能够理解的一个图形描述啊,图形描述,那么首先我们先从数据集开始啊,形成数据集开始,这里的数据集。

X1Y1到XNYN是N个样本点嗯,这N个样本点呢X属于RN的,这一段是个N维向量,为了能够我们在图上画清楚,所以这个时候我们令N等于二啊,特指为二,这个时候能够表示清楚,有了这个假设以后。

我们当然就可以构建一个所谓的平面,这里呢是X1,这是X2,那么很显然,平面当中的一个点就作为我们一个X向量,这个X向量很显然就等于X1X2,怎么注意啊,是个转置啊,列向量对吧。

一个点我就可以分别用横坐标和纵坐标,相对应的来表示这一个样本点,那么这只是表明了X的位置啊,表明了X的位置,更重要的是,我们还说到过和X所对应的Y也有规定,怎么规定的呢,如果X如果这里的Y是等于正一。

我们把YI称之为是正立,但问题是在现在这个直角坐标系里面,没有关于Y的,没有Y轴对吧,这是首先肯定的,没有Y轴嗯,既然没有Y轴,我怎么把正一和一分别表示清楚,这个时候我们规定所有输出为正一的正样本。

用圆圈来表示啊,假设这些样本点都是正样本,所有输出标签是为一的,我们用叉号来表示,叉号来表示,那这样就可以,大体上能够把样本在这个平面直角坐标系里面,这样能够表示清楚了啊,这是所有对应为正样本的样本点。

这是对应所有负样本的样本点啊,那么这个时候呢也说明了另外一点,就是刚才所说的,这是在给定的线性可分的数据集的基础上,你很显然这里的正样本和负样本,明显是线性可分的,什么叫线性可分啊。

就是我可以找到一条直线,能够很好的把正负样本能够分开啊,这就是所谓的线性可分,那就会同学就会问,那什么是线性不可分啊,举一个极端例子,比如说这个地方还有一个正样本,那么很显然当前这个样本。

当前这个数据集就是线性不可分的,为什么,因为你找不到任何一条直线对吧,不管你你你你怎么找,你都不能够啊一刀切下去,把正负样本严格分开,因为倒霉在这个地方,它位置太太特殊了是吧。

这就造成了当前整个的数据集是线性不可分的,所以说也就是说硬间隔的基础条件,你必须是线性可分的啊,能够一刀切成两部分啊,这是前提条件,那么有了这个数据集的这个表示以后,你再去看一下。

在给定的线性可分的数据集上,我们通过所谓的间隔最大化或等价的求解,相应的图二次规划问题,不明白什么意思,先放一一放,解决完这个问题以后,我们要得到一个什么东西,我们要得到一个所谓的分离超平面啊。

所谓的分离超平面,那什么是分离超频命令,下边在这是W星X加B星等于零啊,这么一个东西,他又告诉我们,这里的W星被称之为是,全知向量啊,全值向量它呢也是RN的啊,它也是RN的,刚才我们说过。

这里假设N是等于二对吧,假设N是等于二,那么很显然W星就应该是等于W1,W2所组成的一个列向量,然后呢他要和谁呀,他要和X刚才我们说过X等于什么,X等于X1X20向量,这两个向量做内积。

我们知道要做内积计算的话,无非就是对应的分量相乘,然后进行累加,那就是W1乘以X1,加上W2乘以X2,然后加上一个B等于什么,等于零等于零,我们看一下这个式子啊,看下这个解析式,这个解析式哈明显啊。

我们初中的解析几何告诉我们,这个解析式明显就是在坐标轴X1,YX1X二啊,这个平面当中的什么是不是任意一条直线,没问题吧,W1乘以X1加上W2乘以X2加上B对吧,这是我们整个平面。

直角坐标系统里面的任意一条直线好了,既然是任意一条直线,我可以随便画,比如说我可以这样来画,没问题吧,要不你看一下当前这条直线,是不是首先把正负样本分开了啊,这个目的其实是已经达到了。

但是呢因为我们知道,这是我们直这个平面当中的任意一条直线,那么除了这一条直线之外,你看看我是不是,这条直线也可以把正负样本严格分开啊,你比如说再举一个例子,我这样分也没问题,换个角度,换句话说哈。

能够起到将正负样本进行分开的或者分割的,所谓的分离超平面并不唯一,你看看有多条直线,有多条直线都可以把正负样本严格分开,那这个时候就需要回到这里来了,就讨论一下什么叫做所谓的间隔最大化,或等价的求解。

相应的土耳其规划问题呢,那么回到这个图上来,我们分析一下,啊这两条直线好来看看,如果我们选择啊,如果我们选择以当前这条直线作为所谓的分离,超平面来把正负样本分割开,那么大家觉得有没有问题,如果有的话。

有什么问题,啊就是如果以这条线为分离成平面的话,有没有有没有问题,如果有的话,有什么问题,啊有同学说距离不是很近,容易分错是吧,嗯是不是很近吗,你是针对谁来说的。

因为我们现在有正样本和负样本两种数据集啊,你是针对正样本所说的是吧,啊是这样啊,因为这条直线距离正样本非常的近,所以啊举个例子,比如说我现在有一个新的样本来了,我知道他是正样本,但是它的位置在这。

首先我们根据这条分类超平面,你会发现把它分错了啊,这是第一点,但是呢他又是一个正样本,它本身和正样本,这个这这一这一这一,这个分类距离非常非常的近,其实从我们直观上去看,并不应该把它分错。

是因为你这条直线,或者你这个分离超平面性能不太好,就像刚才这位同学说的,你距离这个正样本太近了,好,这是个很好的视角,我们看这条直线,啊不太极端啊,举一个极端的例子,比如说这条直线。

那么同样因为这条直线距离负样本太近,所以同样会出现,比如说唉,这个地方如果有一个新的负样本点的话,按照我们这条分类超平面就把它分错了,也就是说啊,在任意多条能够把正负样本严格分开的分离,超平面当中。

我们是不是应该找到一个折中的直线啊,既离正样本也足够的远,还离负样本也足够的远,才是一个所谓的好的直线或者好的分离超平面,那这就是下面这些这个问题啊,所谓的间隔最大化或等价的求解,相应的托尔斯维化问题。

他其实就是需要要求我们要找到一个,既不离正样本太近,也不离负样本太近的这么一个分离超平面,那么大家想想嗯,大约哈我们凭感觉看一下,大约大约大约是不是,这个虚线的这条直线应该是要比刚才那个正负。

那那那两条啊,离这个正负样本非常近的直线,要稍微好一些是吧,稍微好一些,那它好在哪儿,它就好在就像刚才我们所说的,既距离正样本足够的远,也距离负样本也足够的远啊。

这就是所谓的SVM的一个最突出的一个特点,其实啊,刚才我们找到的那些那些非常极端的分离,超平面啊,可能就是我们在感知机模型当中所确定的模型,也就看到了啊,为什么说SVM是一个性能上更突出的模型呢。

就是因为它在基础模型的基础上,进行了大量的改进啊,就像这样,我要找到一个更好的,那下面问题又来了,怎么才能找到它,好问题我们已经搞清楚了啊,就是要找那个所谓的间隔最大的直线啊。

这个时候呢就带来一系列的问题,看下面,嗯需要引入一些工具啊,同样需要引入一些工具,帮助我们建立一个框架来分析这个问题,第一个呢就是所谓的超平面WB,因为我们刚才说过啊,超平面就是一条直线啊。

那这个时候我们只需要确定它的斜率和截距,就可以了,所以我们用斜率和截距来表示当前这个超平面,超平面W和B关于样本点xi yi的函数间隔啊,我们用函数间隔这么一个概念。

定义为伽马hi等于YI乘以w xi加B,你先把它记住啊,你先把它记住啊,一会我们再会分析它到底是个什么东西啊,一会再分析的到底是个东西,他这样做超平面关于样本点的函数间隔啊,样本点的函数间隔。

那么超平面关超平面WB,关于训练集的函数间隔,注意啊,刚才我们可以看到这里的伽马hi,代入到公式里面去,计算的时候需要xi和YI啊,你给我一个样本点,我就给你一个样本点的所谓的函数间隔啊。

这是关于伽马hi,那么既然每一个xi和YI都可以计算一个伽马H,那我整个数据集T里面,从X1Y一一直到XN和YN,都可以计算N个伽马height,从伽马HT一一直到伽马ht2,最终到那个伽马HN啊。

都可以计算若干个伽马HT,那么超平面WB关于训练集T的函数间隔,注意啊,这是关于整个一数据集的函数间隔,被定义为你那大N个所有的函数间隔,伽马hi里面最小的那个值所作,为我整个数据集的伽马H好吧。

这就是一个计算过程啊,计算过程,那么再回顾一下关于样本点,我可以通过公式来计算出样本点的函数间隔,计算出所有样本点的函数间隔来以后,把其中最小的一个单独拿出来,作为我整个数据集的函数间隔啊。

那这样的话呢,我们的函数间隔就计算出两个结果来,那么再往下看这个,但是有同学就问这个函数间隔干什么用啊,不理解,看下面你就理解了,那么除了函数间隔之外呢,我们再定义两个所谓的几何间隔啊。

几何间隔你看看同样是超平面WB啊,就是我们的那条直线告诉我们了,然后呢关于样本点还是关于一个一个样本点,xi和YI的所谓的几何间隔为伽马I啊,没有那个小帽子了,没有那个hat了啊,伽马I伽马I等于什么。

伽马I等于YI乘以w xi加B,比上一个W的二范数啊,是这么个东西嗯,这个式子放在这儿,有同学马上也会很困惑,这个式子他也不知道什么意思,但是呢我们通过名称上,可以给我们一个很重要的启示。

这里的伽马I啊,这里的伽马I是一个所谓的几何间隔的概念,几何间隔的概念有什么叫几何间隔,把间隔换成距离,它的学名叫几何间隔,但是不好理解,你把它改成几何距离,你看看你能不能理解。

那几何距离是个什么东西呢,干脆把几何也不要了,干脆把几何也不要了,那它就是个距离,什么意思呢,我们再看一下超平面,WB就是对应的那条直线,以及样本点X和YI的距离,一个样本点一条直线点到直线的距离。

就是这里的伽马I,你有同学不大就有疑问啊,或者有困惑困惑在哪呢,这后面不是个距离公式啊,标准的距离公式应该等于什么,你应该等于WX加B的绝对值,比上一个W的二范数,这才是我们标准的点到直线的距离是吧。

初中解析几何告诉我们的,但是呢你又说这个式子又是所谓的距离,那很显然这两个式子应该相等啊,那你看看分析一下这两个式子是不是相等,这两个式子是相等的啊,为什么这么说呢。

首先我们可以看一下这两个式子的区别在哪啊,一个很重要的区别,就是我们知道距离是个非负值,大于等于零,但是呢你会发现诶,这个地方怎么没有那个绝对值号了,绝对值号没有了是吧,那这个时候就有就有问题啊。

既然你把绝对值号去掉了是不行的,为什么呢,因为你不能保证所有的样本点,代入到WIWXI加B当中,都是大于等于零的值,因为很显然,有些样本点是出现在这条直线的下侧,那这个时候带入到直线方程里面去。

是小于零的一个呃结果啊,所以那就不能是距离了,但是除了这个绝对值去掉了以外,你会发现前面多了个YI是这样吗,多了YI回想一下我们关于那个YI的取值,它是属于什么,它是属于正一负一的,那好了。

我们分两种情况来讨论一下,如果你这个YI是等于一,你这个YI等于一,意味着所谓的负样本,负样本就出现了,我们分类超平面的下面是吧,分类超频的下面竟然出现了,下面代入到w xi加B这个方程里面去。

我们得到的是小于零的值,注意这个时候的YI是个一,而你这个时候恰好得到的是个小于零的值,一乘以小于零的值是不是应该是非负值啊,没问题吧,非复制,所以你会发现哎如果是一的时候,我们得到的是个非负值。

那么如果是正一呢,如果你是个正一,那意味着你当前是个正样本,正样本带入到直线方程里面去,得到的就是大于零,哎你看正一大于零又是一个非负值,那么很显然就和我们的距离的含义,就对应起来了,换句话说。

这个地方之所以可以把绝对值号去掉,使用的一个技巧,也就在这个地方的YI的一个定义形式,这也就解释了刚才哈为什么一直在强调,Y的取值正样本是正一,负样本是一的一个很重要的原因,好吧好了。

回过头来我们再看一下,通过以上分析,我们得到一个结论,什么结论呢,就是这里的伽马伽马I就是我们样本点距离,分离超平面的几何距离,那这个时候啊嗯我们再回顾一下刚才那个图,刚才那个图就是那个X1。

这是那个X2,这是正样本,好吧,这是正样本正样本啊,假设啊分这条路线是这条直线,那这个时候每一个样本点,每一个样本点,每一个样本点都有一个所谓的假设,这是伽马一,这是伽马二,这是伽马三距离啊。

距离距离距离,那么负样本负样本负样本同样,伽马四马五马六好吧,那有了这个所谓的样本点的几何间隔以后,同样的道理啊,我们看一下超平面当中关于训练集的几何间隔,一样哈。

因为每一个样本点我们都可以计算几何间隔,那这样的话,N个样本点里面,最小的那个几何间隔被拿出来啊,作为我整个数据集的几何间隔好吧,那这样的话我们就有了另外两个伽马值,分别是伽马I和伽马。

那么我们回过头来比较一下这四个伽马值,这个地方的函数间隔和这里的几何间隔很小,很明显啊,有一个有关系,什么关系呢,你会发现哎这部分和这一部分是不是相同,很明显是相同的是吧,很明显是相同的。

这也就是函数间隔和几何间隔之间,最大的一个关系,就是在于几何间隔的分子部分,其实我们重新把它定义成了另外一个名称,叫函数间隔而已啊,那么很显然我们这里建立了这个关系以后,我们得到下面这两组公式看一下。

就像刚才我所说的,我们把几何间隔的分子部分,重新用另外一个符号,就是函数间隔来定义一下啊,称之为是伽马height i,那么在整个数据集上也有类似的关系,因为最小值是同一个是吧。

所以这个地方的几何数据集上的几何间隔,就是使用我们数据集上的函数间隔作为分子,比上一个W的二范数就OK了,那介绍这个工具以后,我们再回过头来看我们的问题,看看怎么表述是X1,这是X2正样本正样本。

正样本,负样本,负样本负样本,这是我们要那条所谓的最好的分条命名,那么你现在想想,我们假设啊,假设这个点是我们距离分类超平面,最近的一个正样本,这个点是距离我们分离超平面,最近的一个负样本。

那么大家想一下最朴素的一个想法,就像刚才我们的要求一样,要找到一个所谓的最优的分离超平面,是不是就是尽量的使这个直线哎呀,在这两者之间有一个很剧烈的一个对抗,对抗对抗对抗对抗。

最终最终得到了一个非常平衡的一个位置,使得它距离正样本和负样本都已经,尽可能的怎么样了,远了它就是所谓的最优的,那怎么样把这种状态表示出来呢,那么大家想一下,我是不是只需要使这条分类超平面。

尽可能的距离,离他最近的那些样本点尽可能的怎么样远,是不是就可以了,那么刚才我们以,其实啊已经找到了那些所谓的距离,分离超平面最近的样本点了,是这样吗,因为前面我们的定义是这么来定义的。

是所有几何间隔当中,是数据集里面所有的几何间隔当中,最小的那个较弱的伽马,那么下面我们的目标是不是,就是只需要使这个几何距离最小的这个伽马,尽可能的怎么样,尽可能的大,最近的你都离得最远了。

那么是不是就保证了再远的也就更远了,是不是也就保证了这个分离超平面,能够很好地去完成对正负样本的分割了对吧,所以说啊就是怎么得到的,这个所谓的max伽马是最关键的一个问题啊,他是最小的那个距离。

我使最小的距离尽可能的大,那这个伽马就是最好的伽马啊,这个伽马所对应的W和B就是最好的W和B,好吧,那这个问题解决了以后,看下面这个条件还必须要带着什么条件,刚才我们一直在强调你这里所有的集合距离啊。

你这里样本点的所有的集合距离,都要大于整个数据集上的几何距离,因为你数据集上是最小的那一个,所以我样本点里面的任意一个都要大于等于它,才可以,这是一个约束条件是不能丢的,所以刚才哈我们所说的两点。

第一点就是所谓的间隔最大化,就是说的是这里最近的样本点都尽可能的远,就达到了所谓的间隔最大化的要求,那么它所对应的,它或者说它所等价的那个所谓的凸,二次规划问题,就是是。

就是刚才我们所定义的这个带优化条件的,最优化问题,使得最近的几何距离尽可能大的啊,那个分离超平面作为我的最优分离超平面,当然约束条件是所有的几何距离,都要大于等于砝码,好吧,到此为止,到此为止。

我们其实就解决了一个问题,是一个什么问题,就是我们要干什么的问题啊,我们就要干什么,就要干这个事儿,这个事儿嗯,怎么理解,我们引入了所谓的函数间隔和几何间隔的概念,通过使我们的几何间隔尽可能的大。

找到那个最优的分离超平面,好吧,看看这一部分有什么问题吗,如果没有问题,我们就继续好了,下面呢可以说是啊,这个问题就是目标找到以后啊,下面就是求解的问题了,其实说说到这儿啊。

后面的工作其实就交给我们数学的同学,就可以了啊,你就你只需要告诉他同学,你把这个数学问题给我解出来啊,找到我的最优解就OK了,我这个事就解决完了,但是当然不能这样做是吧。

那么怎么去求解这个带约束条件的最优化问题,我们做一系列的转化,把问题进一步的呃进一步的化简,继续往下等价的,我们把上面这个问题转化到下面这个问题,那么既然我们是要使得我们的几何距离,尽可能的大。

而我们知道我们的几何距离,可以表示成函数距离比上W的二范数的形式,那这样的话这个转这个转换是显而易见的是吧,就是把伽马替换成伽马heat比上W2反数,那么条件呢相应的也需要变化一下。

因为这个时候如果我要保证几何距离啊,几何距离大于等于伽马,其实我只需要要求我的分子部分大于伽马,HT就可以了,因为我们知道W2范数嘛,那个东西嗯,它作为分母就放在那个地方,是任意样本点的几何距离。

它都是那个W的函数,所以我只需要要求它的分子部分大于等,于这个伽马heat就可以,所以啊从这一步到这一步的转化,是比较容易理解的,难理解的是哪一步呢,是这一步怎么从上一步变成这一步,是比较难理解的。

就先看一下形式上,形式上呢你会发现上面是有一个伽马heat,而在这个地方伽马HT变成了数值一,变成了数值一,这是嗯最不太容易理解的一点啊,不太容易理解在哪呢,怎么你就把伽马HT变成了一好了。

回到我们这个图当中来啊,回到这个图当中来,你会发现其实为什么要引入这个几何间隔啊,其实一直很多同学就有困惑,为什么呢,因为很自然的我们想到的是使用不,为什么要引入这个函数间隔,是一直同学有个困惑。

因为很自然的是,我们这个地方有一个标准的几何距离是吧,你定义点到直线的几何距离时,这个几何距离足够小不就完了吗,你为什么还要搞一个函数距离呢是吧,为什么要搞函数距离的一个原因哈,其实是这样。

我们把这个几何距离是个绝对量,几何距离啊,是个绝对量,你算出来那个数值它是几,就是几是不变的,但是呢这个函数距离啊,你可以把它通过缩放,把它缩放成一个相对量,什么叫缩放成一个相对量呢。

从形式上或者说从这个图示上,你可以这样来理解,我可以把距离分离,超平面最近的那个样本点的几何距离,我不管它数值上就是绝对量到底是几,我可以把它定义为,这里的一单位长度的含义啊。

我就以这个距离作为一个单位长度,用这个一和最短的这个距离,相对于其他距离的这个比值来表示其他的距离,是不是也可以啊,比如说举个例子啊,比如说我们考试啊,每一个同学都知道满分100分,你考了98分。

他考了37分是吧,这很正常,那么除了这种方式之外呢,我们还可以怎么做,我们还可以以比如说我们最高分作为满分状态,你和那个最高分的百分比进行比较,是不是也可以啊,比如说这分这份卷子很难啊。

最高就是最优秀的那个同学,他考了个87分啊,这个时候你会发现,整个班级的成绩其实都非常低,就是因为这个卷子本身太难了,那这个时候怎么办,我可以规定那个最高分啊,即使他只有87分啊,也是一个一标准单位。

一你相对于它的一个百分比作为你的分值,就他考100分,就算他考100分了是吧,就他考了个满分,你相对他的百分比作为你的一个分支,是不是也是一个策略,其实是非常类似啊,非常类似。

就是这个地方为什么我们可以把啊,为什么我们可以把这里的伽马height用E来替换,的一个原因也在这,当然啊这只是形象的一个描述,那么在形式化就是我们在这种嗯数学表示上呢,我们还可以这样来理解。

我们前面一直讲到过,这里的WX加B等于零啊,代表的是我们这个平面当中的任意一条直线,因为这里的W和B都不确定是吧,任意一条直线既然是任意一条直线呢,我们举个例子,比如说2X加三等于零啊,这里的X啊。

我们是这个向量啊,所以这个地方比如说是2X1加,2X230是吧,那这个时候呢你看一下下面一条直线,叫做3X13X5,三X4X260,那这个时候你问一下大家哈,这两条直线啊,这两条直线什么关系。

一个是2X12X230,另外一个是4X加4X260,这两条直线什么关系,还有同学有印象吗,这两条直线是同一条直线,一条直线,因为它是通过等比例缩放吗,只是他们你会发现这条直线乘以二啊,前面提出一个二来。

然后除过去,因为右边是个零,所以还是个零,所以说这两条直线啊,看看对啊,同一条直线很好好,既然我们说过,既然他俩是同一条直线啊,位置是不发生变化,就在就在那,但是你会发现它们的系数是不是发生变化了。

这里是223,这里变成了446,没问题吧,或者说我只需要等比例缩放系数,就可以得到同一条直线的多种表示形式,那好了,回头来看这个,看这里的伽马height,伽马heat啊。

它的定义形式你会发现哎在上面啊,你会发现哎它就是存在这么一种方式,我可以通过等比例的缩放,这里的W和B来改变这里的伽马HT值,没问题吧,那既然可以改变这里的伽马HT值。

那我是不是就可以通过一种嗯显然是存在,但是我不关心它到底是多少的一个值,能够把这里的伽马HT缩放成几,缩放成数值一,就像刚才我们举的那个例子是一样的是吧,我就规定你最近的那个同学就是一啊。

你就是考满分啊,其他的所有的其他的门点相对于你的百分比,作为你的距离就OK了,因为这个地方函数严格啊,不是个绝对量啊,不是个绝对量,它是个相对量,所以说啊这一点希望大家能够理解,能够理解。

不管是从这个数值上还是从他这个形象上啊,你能够把这一步,从这一步的这个问题能够很好的就是伽马HT,为什么能把替换成一,能够好好的理解一下,好了嗯,嗯这样的话我们就这个问题到这儿,这个问题到这。

然后看下面这个问题继续往下,还没完啊,这个条件也需要发生变化一下,因为这个地方我们已经把伽马hi缩放成了一,所以约束条件变成了YI乘乘以WXI,A加B是大于等于一的啊,大于等于一的,那么继续往下看。

那么从这一步到这一步呢,问题其实就相对比较好理解一下,因为这个地方我们求的是分这个分式的最大,分式的最大,我们知道求分式的最大,我们只需要使分子怎么样啊,分母怎么样,使分母尽可能的小是不是就可以了。

所以这个地方是求的是W2范数的最小值啊,W的二范数的最小值,分母如果尽可能小了,你这个式子是分式,是不是尽可能大的,那么这外边这些是什么意思,那么我们分别看一下啊,既然是求了W2范数的最小值。

平方向是不影响最小值求解的,那么1/2也不影响最小值求解啊,这个你可以这个自己想象一下啊,我们一个变量啊,一个变量我要求它的最小值啊,它的最小值的那个位置上啊,平方之后还是他1/2之后也不影响。

为什么要说这个处理呢,是因为后面我们要求导这个时候的导数一求二,往前一提和1/2就约掉了,所以最后剩下的是W的二范数,只是为了数学上的一个求解方便好吧,然后呢约束条件呢也发生一些变化。

把这里的右边的正一移项到左边去,变成YIWXI加B减一大于等于零就可以了,那么下面的问题呢就拔啊,成功的把我们的这个一系列的转化,转化成最终的求解目标啊,就是求解这么一个带约束条件的最优化问题。

我们再往下看,正式的啊,给出最大间隔算法,那么首先输入条件就是我们的数据集T啊,线性可分的数据及T,那么输出的就是所谓的最大间隔,分离超平面和我们的分类决策函数,其实最核心的就是找到那条分类超平面。

第一步就是构建带约束优化条件的最优化问题,如果我们能够把这个问题求解出来,得到所谓的最优的斜率和最优的结局,那所谓的最优的分离超平面,就是W星X加B型等于零,那么有了这个分离超平面以后。

分离角色函数就变成了W星X加B星啊,取负号,然后得到FX的输出,那么这个时候很显然这三部啊,有些我们前面提到这个经常提到的那个笑话,是哪个笑话,把大象装冰箱里分几步是吧,拢共分三步,打开冰箱。

把大象装进去,然后把冰箱门盖上,但问题在于你怎么把大象装进去,换句话说,在这里的核心,第一步你怎么把这个问题求解出来,其实你并没有给出答案来,是这样吗,也就是说后面我们把问题还是聚焦在,还是聚焦在。

求解这个带约束条件的最优化问题上啊,一旦你求出来了,分离超平面就有了,一旦你分离超平面,有了你的角色函数也就有了啊,最核心的还是在这,那么在求解那个问题之前呢,我们看看我假设已经把它找出来了。

已经把那个分类超平面找出来了,就像刚才那个例子里面一样,正样本正样本,正样本,负样本,负样本负样本,假设我已经把它找出来了,你看看这条分离超平面,它应该具有什么样的一些特性,什么特性呢。

首先这个特性是W星X加B星等于零,我找出来了好吧,他既离这正样本,也离这负样本都足够的远啊,都足够的远,那么首先我们可以看一下,首先第一个这个样本点距离,分离超平面的这个距离,它的函数距离是几。

函数距离很显然是一,就像刚才我们所说的,你最近的那个样本点距离,分离超平面的函数距离,通过缩放就缩成了什么一样,你这个最近的负样本距离,分离超平面的距离也是一啊,当然这个一个单位一的含义是吧好了。

那这个时候啊,我们过正样本,这个点做平行于分离超平面的一条直线,那么我们得到这么一条直线啊,直线啊,直线这个这个这个手写就画不出来,怎么停,你自己理解就可以了,那么同样我们也可以做过这个负样本。

这个样本点做平行于分离超平面的一条直线,这条直线,那么大家想象一下,那么很显然这两条直线彼此应该就是平行的啊,彼此应该是平行的,那么这两条直线的距离,如果我们还有函数距离这个概念的话,应该等于几。

应该等于一,加一,应该等于二,这并不重要,重要的是什么,你看一下在这两条直线中间的区域,会不会有样本点存在,不管你是正样本还是负样本,会还是不会,一定是不会的,为什么,因为我们制作这两条直线的标准啊。

就是以最近的样本点平行于分离超平面,来做个平行线,那么既然已经是最近的样本点,都在这个直线上了,那么这两条直线中间是一定不会存在样本点的,这是非常重要的一个结论好吧,那么这两条直线啊。

这两条直线分别把它们称之为是间隔边界,间隔边界,这个呢我们一般称之为是H1,这个是H2,那么在间隔边界,H1和H2中间所构成的这个区域,是没有任何一个样本点的,换句话说你用样本点的都跑外边去了啊。

都不在外边才可以好了,有了这个概念以后呢,我们继续往下看,就真的需要把最优化问题求解一下,了解一下怎么求动用的,就是所谓的拉格朗日乘子法啊,这个拉格朗日乘子法呢,在我们这个附录A部分有介绍。

有兴趣的同学呢,你可以查一下那个课本的附录A,这个地方呢我们直接使用这个方法好吧,直接使用这个方法,这个方法是这么说的,首先第一步引入所谓的拉格朗日乘子,构建拉格朗日函数,这里的拉格朗日乘子呢。

就是看一下你的整个的约束优化问题,有多少个约束约束条件,你就必须要构建多少个拉格朗日乘子,回顾一下刚才那个约束目标问题在哪儿呢,在这儿在这儿,这是最优化目标,这是约束条件,注意哈,约束条件说的是。

所有的xi和YI都必须要满足,大于等于零的这个要求,我们知道整个样本点里面有多少个元素,有大N个元素,所以每一个元素所对应的这个约束条件,都必须要有一个相对应的拉格朗日乘子,所以拉格朗日乘子从阿尔法一。

阿尔法二一直到阿尔法N啊,比如说第一步哈,这里的拉格朗日承德有N个阿尔法,I是大于等于零的啊,每一个拉格朗日乘子都是非负的,那么这里的I是从一到N,为每一个样本点所对应的每一个约束条件。

构建一个拉格朗橙子,然后呢构建拉格朗日函数,拉格朗日函数的构建呢其实就分两部分,哪两部分,第一部分,原优化目标,就是那个二分之1W的二范数的平方,我们的原优化目标是第一部分。

那么第二部分第二部分是将所有的约束条件啊,是将所有的约束条件乘以它所对应的,拉格朗日乘子,然后把这个乘积全部进行累加,就是拉格朗日函数的第二部分,首先我们可以看一下这里的约束条件。

约束条件是YIWXI加B减一,是大于等于零的啊,为什么后面那个里面有一个负号呢,所有的约束条件都改写成小于等于零的形式啊,不要问为什么啊,就是这么来定义的,或者来使用的啊。

那么如果写成小于等于零时的形式,很显然需要变一下号,所以形式上就变成了负的yi w xi加B加一是吧,这是约束条件,约束条件乘以它所对应的拉格朗日乘子,阿尔法I啊,这是一个约束条件。

乘以它所对应的一个拉格朗日乘子,这样的乘积有多少个,有从一到大N个,因为我们刚才说到过有N个约束条件,那这样的话我的拉格朗日函数就构造完成了,稍微调整一下,就得到下面这个式子,这是第一步。

引入拉格朗日乘子,构建拉格朗日函数,那么第二步,第二步求拉格朗日函数的极小啊,求拉格朗日函数的极小,那么求极小呢有一个非常一般性的策略啊,求技巧,非常一般性的策略就是。

我们只需要使得当前这个拉格朗日函数,对你的优化目标啊,求偏导,让这个偏导值等于零,那个位置就是所谓的极小值所定的位置,所以这个时候我们使用拉格朗日函数,分别对我们的W和B啊求一下偏导,看一下这个式子。

让它等于零就可以,首先呢我们对W求偏导啊,就上面这个式子对W求偏导,这个时候就体现出刚才那个优化目标函数的,这个设计了啊,二分之1W的二范数一求偏导一求偏导之后,二往前一提和这里的二分之一一乘。

就变成了系数一,那么得到的就是W,注意这里W是个向量啊,W是个向量,向量的偏导怎么求,其实也是对应维度上求偏导就可以了好吧,那W求完了以后看后面这个式子,在后面这个式子里面,我们同样是要对W求偏导。

那么很显然这里的SUI,从一到N每一项里面都有一个W是吧,然后呢是阿尔法I系数往前放没问题,然后是负的YI往前放也没问题,然后在这个式子里面对W求偏导,得到的是xi后面都不再包含W。

所以得到的是sum i,从一到N阿尔法IYIXI,注意把那个负号提前变在这个地方,让这个式子等于零,得到这么一个关系式,得到这个关系式,同样我们对偏置B求偏导,偏置B求偏导,这一项没有B。

后面这一项里面只有这一项是带着B的,所以得到的是SUMI,从一到N,然后呢,就是阿尔法IYI往前提一个负值变成负的,SI从一到N阿尔法IYI是等于零,也就是说第二部里面。

我们对拉格朗日函数求极小值的时候,分别对W和B求偏导之后,得到上述两个式子,得到上述这两个式子,那这两个式子呢我们需要看一下,调整一下,我们得到下面这个式子,W等于sum i从一到NRFIYXI。

然后第二个式子是SUMI,从一到NRFY是等于零,首先第一个式子就非常重要,重要在哪重要,在你会发现我们室友为了求W,这个时候我们得到一个关于W的一个表达式,而在这个关于W的表达式里面。

xi和YI都是已知的,就是我们的数据集,而在其中只有谁不知道,只有阿尔法哈不易不知道,换句话说,我只需要确定这里的拉格朗日乘子,把拉格朗日乘子带入到这个表达式里面,就可以得到我们的一个目标W好吧。

那这个时候我们把这个式子放在这,也就是说我们现在的目标和核心目标就对,就聚焦在这里的R发上了啊,R方上了,那得到这个式子之后怎么办,我们需要把这里的关于W的表达式,带回到原拉格朗日函数带回去。

带回去的过程当中,首先看这个式子啊,二分之1W的二范数的平方,那么W的二范数呢变成了这个式子,那换句话说它应该是等于SUG,从一到N阿尔法GYGXG,没问题吧,就是W乘以W吗,W的平方不是W乘以W。

你W1个在这,你后面再乘一个W是不是就可以了,就这个式子,这个时候呢就有同学有问题,有什么问题呢,你前面这个W是用的I,后面这个W为什么就不用I,而变成另外一个循环变量了啊,这是个细节部分啊。

很显然是需要变的,为什么要变,因为这里的W乘以W,你可以把它想象成是什么笛卡尔基,由于这个就类似啊,比较一下笛卡尔机,你前面是一个循环,你后面是一个循环,这两个循环是要交叉相乘的,明白什么意思吧。

如果你使用同一个循环变量,那这里是I从一到N阿尔法YXI乘以sum i,从如果还是I等于一到N阿尔法i yi xi,那只能是从一一直乘到什么N,就没有交叉相乘的关系,而在这个地方。

W2范数的平方横线是交叉相乘的关系,所以这个地方的循环变量要发生变化,所以你得到的式子是下面那个式子,可以看到是二分之1SY,从一到NSUG,从一到N阿尔法IYI阿尔法。

阿尔法GYIYG乘以XI乘以XD好吧,这个地方特别需要注意一点,然后呢再把这个W带入到这个部分啊,代入到这个位置上,你看把这里的把W换成这个表达式就可以了,就下面这个式子,下面这个式子呢稍加整理哈。

稍加整理就得到最终这个表达式,注意一点的是,在中间你会得到一个局部的计算,结果是这个结果,而我们知道这个结果是等于零的啊,这个结果等于零的,所以最后剩下的这个表达式这些这些部分啊。

回去以后建议大家好好的,你找一张白纸,找个笔啊,然后你把它过一遍啊,仔细一点啊就可以了,就得到下面这个表达式,稍加一下整理啊,得到第二步的最小化,结果是等于负的1/2,SMI从一到N,Sm g。

从一到N阿尔法阿尔法GYYGXIXG,加上一个SM从一到N阿尔法I这第二步就完了,第三步,第三步是在第二部极小化的基础上求极大化啊,求极大化极大化就变成了max啊,求极小化之后的最大值约束条件是I。

从一到N阿尔法IY等于零,这里的阿尔法I就是我们的拉格朗日乘子,是大于等于零的,那么第三步的求解啊,第三步的求解,有同学说哎这个求极大和求积小,就是换个换个方向吧,我们同样求一下偏导等于零。

是不是就可以了,呃不是那么的简单啊,问这个就不是那么的变简单了,关于极大的求导,我们使用的就是所谓的SM,就是那个序列最小的优化算法来求解它,因为效率更高一些,效率更高一些,那么SM呢是在后面的内容。

所以到此为止,到此为止,我们可以看一下,关于带约束条件的最优化的求解啊,就是带约束条件的最优化求解的三步,第一步构建拉格朗日乘子啊,怎么构建的,刚才已经介绍了,第二步,求极小,就是求偏导等于零。

得到结果回带回拉格朗日函数,第三步调整一下,求极大求极大的,我们是用后面的SMO来解决,所以就放在这,所以后面我们看一下所谓的硬间隔,学习算法发生了变化,我们发生了什么变化呢,输入和输出没有问题。

通过上述的一些转化,我们构建并求解带约束的,在约束条件的最优化问题发生了变化,变成了最优的,最后的啊,最后的这个极大化过程,有的说哎不是极大化吗,因为是负值的极大化。

所以我们更习惯更习惯写成最小化问题啊,就是刚才那个约束条件问题变成了这个问题,当这个问题如果能够把这里的阿尔法解出来,就是拉格朗乘子解出来以后,我们可以知道刚才带入到那个表达式里面。

就得到所谓的最优的W型啊,得到最优的W型B型怎么办,D型呢我们往下找找,看看有没有关于含有B的表达式啊,在这儿有一个在这个式子里面啊,在这个式子里面,我们看一下XI和Y都是已知的。

刚才那个W星是不是也已经被求出来了,也已经被求出来了,那这个时候就剩下一个一个B,那这个时候我们是不是可以,把所有的这些已经得到的值,都扔到表达式的右边去啊,都扔到表达式的右边去,得到关于B的表达式。

来看一下这个B的表达式是什么,好在这你YI减去SY送一的N阿尔法I星,YI乘以XI乘以XG,而我们知道这里的xi和XJ以及YI,都是已知的这个阿尔法,与同时这里的FI我不知道啊。

阿尔法I上一步其实已经求出来了是吧,你你求W星的时候,这里的阿尔法也已经知道了,其实这个地方其实就是W好吧,那这个时候W星也就已经知道了,有了W星,有了B星,那这个时候我们的分类超平面就已经知道了。

那么带回到我们的决策函数里面去也就知道了,那么好了,很显然哈,问题又聚焦到一个没有解决的一个,最优化问题上,但是不要这个时候就不要气馁,因为后面我们一定有解决方案,就是那个SM好吧。

这是关于硬间隔部分的介绍,看看大家有什么问题吗,一定间隔,就是现在我们已经走到了这一步了是吧,如果没有问题的话,我们就继续好吧,嗯硬间隔支持向量机有一个最大的问题,就在于它的前提条件。

要求我们的数据集必须是线性可分的啊,这是一个非常严苛的条件,换一个思路,如果数据集不满足线性可分的条件,就像刚才我们所说,唉如果数据跑又跑这来了,那这个时候硬件隔着向量机,就解决不了这个问题了啊。

不能就解决不了了,那怎么办,就看第二步,第二步呢这个软间隔支持向量机,软间隔支持向量机,是在硬间隔支持向量机的基础上,做了一点条件的放松啊,作为这个条件的放松,使得它在一定程度上能够处理一部分。

所谓的线性不可分的情况,但是呢解决的并不彻底,为什么这么说呢,我们先看问,先看一下这个定义哈,线性直线转机也被称之为软间隔直线机,看这里,首先它是给定的是线性不可分的训练数据集啊,一上来就告诉你。

你之前那个强的线性可分的要求,这里就不需要了啊,既然数据是线性不可分的,那就必须要处理那种所谓的很麻烦的情况,看他怎么处理的,即使是一个线性不可分的数据集,它也是通过所谓的间隔最大化的策略。

来进行解决的,那么同样啊,同样也是对我们的二次图优化问题,进行一个求解,但是这个地方的,求这个地方的二次图优化问题发生了一点变化,变化在哪,首先我们看形式上,他的这个求解目标就不一样了,哪不一样了呢。

除了我们原来的求解目标,二分之1W的二范数之外,还加了一个CB的SUMI,从一到NCI嗯,N个COC是吧,进行一个累加和,然后再乘一个C,作为一个求解的优化目标的一部分约束条件。

YIWXI加B原来只是要求大于等于一,现在是要求大于等于一减去COCI啊,另外一个条件就是所有的cos都是大于等于零的,嗯这里呢很显然多了一个变量,就是这里的COCI的问题,那怎么去理解这里的COCL。

就是一个很重要的一点,我们核心上就分析一下这个约束条件,这里的约束条件说的是YIWXI加B,是我们刚才所介绍的那个函数,距离在原始的那个硬间隔当中,他要求是大于等于一,严格的大于等于一。

想想这个一的含义啊,还记得这个一的含义是什么吗,正样本正样本负样本,负样本负样本,这里的一说的是最近的那个样本点距离,分分隔超平面的那个距离是那个单位一是吧,那个单位一。

所以呢我要求的是你看最近的都只能是等于一,那么这些远的就只能是怎么样,是不是就只能是大于一大于一啊,这是原来的那个硬间隔的要求,但是现在呢我现在是要求大于等于一个一减巨,可CI。

而这里的可CI居然是个大于等于零的值,一减去COCI,1-1个COCI,而我们知道COCI本身就是个大于等于零的,那么这个式子很显然应该是小于等于一,没问题吧,换句话说,我居然允许允许什么。

允许某些样本点比这个之前所谓的,最近的那些样本点,距离这个分类超平面的距离还要近,你看原来这个原来是硬件格里面最近的点距离,分离超平面就是那个一,现在呢我要求的是一减cos2,而cos是个正值啊。

至少是个非负的,那么意味着我允许某些样本点距离,这个分离超平面的点是一减去,cos i居然比这个谁的最近的还要近一些,那这时候很显然核心问题就出现在这里,玩cos i的问题,我们如果再仔细分析一下。

因为这里的cos i只要求大于等于零啊,是个是个是个是个非负的,如果现在这里的cos还是等于一,你想想出现一种什么情况,这个可C还是等于一,很显然这个条件是满足的,大于等于零吗。

那么上面这个式子变成了什么,1-1变成等于几,1-1变成了零,1-1变成零,意味着我的函数距离啊,我的函数距离居然是等于零的,函数距离距离等于零意味着什么,这里的样,这个时候的样本点跑哪去了。

是不是跑到分离超平面上去了,还没完啊,同学们,如果可增加对二呢,cos i等于二意味着跑哪去了,是不是跑到这儿来了,跑到了分类超平面的另外一侧啊,你原来是正样本,一一开始,硬间隔里面严格要求。

你必须在那个分割边界H1上,现在你通过一个CCI的引入,居然允许他跑到了那个分隔边界里面去了,甚至允许他跑到分隔边界上去了,甚至还允许跑到另外一侧去了,不要忘了,这里只要求cos要求cos大于零。

如果这里cos等于七,你现在跑哪去了,跑这来举个例子啊,举个例子,那这个时候你再来看看整个的数据集,意味着什么,整个的数据集就变成了所谓的非线性,可分的数据集,换句话说,软件和支持向量机来处理现象。

不可分的一种策略,就是对我们的分隔边界,那个移植进行了适当的放松,允许某些样本点啊,允许某些样本点不再严格的遵从,我到分类超平面的那个距离是一这么一个条件,也就是说,我允许某些样本点跑到分类间隔当中去。

允许某些样本点跑到这边一侧来,甚至可能更远,那这个时候不就是所谓的线性不可分,观点能够处理掉了吗,但是这个时候又带了一个麻烦在于,如果你都这样去做,你这个COCI,每一个每一个样本点都给他cos。

而这个COCI都很大,那这个时候就全乱套了,全乱套了,这不省力,那怎么办呢,唉回过头来再看一下你的优化目标,就发现哎这个地方是非常有道理的,有道理在哪,你不要忘了你的优化目标。

你这个可CI不能够太离谱啊,你只能够允许某些样本点,出现那些不正经的情况,大多数绝大多数样本点,你还必须老老实实的在H1的外边,H2的外边才可以,所以这个地方如果把可CI放在这个位置上。

你会发现你的优化目标变成了什么,是在满足约束条件的基础上,使得那些所谓的不正经的样本点的,对应的那个那些可CI的和尽可能的,怎么样小才可以啊,你不能太放太过分,不能太放肆,允许你们对吧。

允许你们这个呃越越越界啊,越贵一点,但是不能够太太离谱啊,所以总体上每一个样本点我都给你一个cos i,你会发现这是从I从一到N啊,每一个样本点都给你个PCI,允许每一个样本点都有一个所谓的。

松弛的一个约束条件,但是很显然有些同学就不需要是吧,我本来觉得就挺好,为什么要到那边去呢,那他的cos就是等于什么等于零啊,这个时候因为我们知道它是大于等于零嘛,有些cos可能就是零啊。

绝大多数都是零啊,还符合那个距离是严格大于一的,但是某些样本点或者某些同学,他就是愿意跑到这边来看一下是吧,所以这个时候这些样本点的cos i就是大于零的,就可以了,但是你不能都跑过来啊。

所以说你在总体的COCI的和上,还必须要进行的小,所以说从这个角度上,我们就解决了所有的软件格问题,还有什么问题吗,就是这个目标还有什么问题吗,当然如果能够把这个问题求解出来。

最后分隔超平面和我们的决策函数,也就有了是吧,那么看下面,因为你的这个优化目标发生了变化,所以所对应的拉格朗日函数就需要发生变化,因为我们前面刚才说过,拉格朗日函数的构造分两步,第一步原优化目标哎。

这是增加了COCI以后的语言优化目标,那么除了这个优化目标发生了变化之外,还多了一个优化条件,可CI是大于等于零的,前面我们讲到,我所有的优化条件,都需要由它所对应的拉格朗日乘子。

那这个时候你的拉格朗日乘子,就除了那个阿尔法I之外,还有这个里面的mi啊,这里的阿尔法I对应的就是那个函数间隔啊,函数间隔,这里的mi对应的就是可SI大于等于零的条件,那这个时候圆优化目标就变成了。

在两部分的基础上,那个约束条件又分成了两部分,好吧,这是在函数间隔乘以函数距离乘以阿尔法I,因为你是有N个,所以I从一到N你的CCI啊是大于等于零的,就是负cos i是小于等于零的,每一个乘以一个mi。

你的每一个cos i啊,都对应一个样本点,有多少个样本点,有N个样本点,所以得到这个式子稍加整理,得到下面的形状啊,这是引入拉格朗日乘子之后的拉格朗日函数,第二步啊,套路啊,套路是一样的啊。

第二步还是求极小,求极小呢,这个时候就需要对W和B啊,分别求偏导等于零就可以了,因为这个地方还多了一个COCI,所以还需要对可CI求偏导,那我看一下对W求偏导哎,同样这里的W求偏导就变成W这一项没有W。

不管后面这里还有一项W和我们的原式是一样,上面那个式子是一样的,因为后面不包含W,同样得到这个表达式,对B求偏导,这这都不这都没有B啊,这还是刚才只有一项是B,所以得到的还是刚才那个式子等于零的。

对cos i求偏导啊,这一项没有cos i啊,这一项带着cos i注意是对COCI来求偏导,那么在这个累加过程当中,只有一项是可CI,所以你得到的是c cc i,一求偏导就变成一。

所以第一个是C然后还有那带COCI这个地方,还带着COCI这个地方前面因为有一个阿尔法I,所以对cos求偏导就变成了阿尔法I啊,阿尔法I,然后呢后面有一个cos i a求偏导,变成得到一个mi啊。

所以整理一下就变成了C减去阿尔法I,减去mi是等于零的,同样我们需要这样的话,第二步第二步就求出来了,同样需要把这个W带回到原拉朗日函数,然后呢稍加整理,稍加整理就得到这个式子,得到这个式子。

在这个式子当中,我们可以看到这个地方用到的,就是那个他这一部分用到的就是这一部分,等于它,所以得到最终结果,这是零,这是零,剩下的这个下来,这个下来啊就达到了这个这个式子,那么第三步求极大啊。

第三步求极大,就变成了这样的一个,最带约束条件的最优化问题,同样这个问题也是SM来解决的,我们暂时先放在这好吧,那么到此为止啊,到此为止我们就啊还没完,这还介绍一下关于那个COCI的问题。

其实这个问题啊刚才已经讲到了啊,就是关于COCI的取值的问题,cos n是大于等于零的,只有这么一个条件,当这里的COCI等于一的时候,我们知道1-1=0,你的函数距离是零。

意味着允许某些样本点出现在分类调平面上啊,如果你是一个二,那么允许跑到分离超平面的另外一侧hr上啊,如果这是它大院,大院意味着可能会跑到另外一侧更远的距离上,所以说这里的COCI是一个非常重要的变量。

它可以通过不同的取值啊,不同的取值可以得到一些相对应的位置,相对应的位置,那么这些相对应的位置,就会造成我的数据集就不再是线性可分的啊,也就解决了刚才我们所说的,它是可以通过松弛变量啊。

就是可CI来解决,一定程度上去解决所谓的线性不可分的情况,因为很显然这里啊很显然这里前面我们也说了,不能够太多啊,就仅仅是允许个别的样本,跑到了分离超平面的另外一侧啊,那么到此为止呢。

我们介绍的就是关于软间隔的部分,关于软间隔部分,看看有什么问题吧,如果没有问题的话,我们就继续往下啊,硬间隔软间隔完了以后,第三部分是合技巧好,有同学说这个软间隔人家已经很好了是吧。

人家已经把这个线性不可分解决了,你为什么还有个合集呢,看这个例子,正样本是圆圈外围一圈,负样本在中间扎堆一堆,那这个时候你会发现硬间隔是不用想了,他肯定解决不了这个事,软件隔行不行。

我说这个嗯好像软件隔应该问题也不大吧,是软件隔在一定程度上也可以解决这个问题,但是很显然,对于他的这个性能来说是非常糟糕的,为什么,因为他必须要比如说举个例子,比如说我们的分离变量放在这。

它必须要允许大量的CCI是大于等于二的,才可以是吧,因为因为这个时候他都跑哪儿去了,他都跑到另外一侧很远的距离上去了,所以这个时候他即使能够得到一个所谓的,分离和平面,这个性能也非常的嗯。

不好不好的原因就在于什么,不好的原因就在于,你这个,不好的原因在于,你这个线性不可分的程度太夸张了,太突出了,以至于我已经很难去通过适当的去呃,放松一些约束条件来找到所谓的最优分离,超平面的问题就好了。

这事干不了,但是啊你想一下我能不能这样去做,你看看上面这个空间和下面这个空间,很显然如果是这样的数据集,而我是没有问题的是吧,我是没有问题的,能够解决的到,那你看看你能不能通过一种方法。

把上面这个空间映射成下面这个空间,很显然是可以的,怎么可以啊,第一步你沿着X1这个轴上下对折,第二步沿着X2这个轴左右对折,你想想得到的是不是,大约应该是右下角这个形式,所有的负样本都集中在这一侧。

而所有的正样本都集中在上面这一侧,你会发现啊,当在某些空间里面,线性不可分的数据存在的时候,往往到了另外一个空间,它其实是线性可分的对吧,所以这个时候问题就转化成了。

我能不能在线性不可分的空间出现的时候,找到一种方法,把它们映射到一个另外空间里面去,而在另外一个空间是线性可分的,那这个时候我只需要在这个新的空间里面,来使用硬件额,或者说呃软件格是不是有问题也解决了。

所以问题就变成了一个空间映射的问题,那怎么去找这个映射就变成了关键,看下面这就是和技巧的含义啊,和技巧就是告诉我们啊,这么一个技巧,可以使得你能够在原线性不可分的空间里面,把它找到一个线性可分的空间。

这不就很好吗,这还不是全部,一会我们再说它更所谓的技巧的体现在哪,好了,我们继续看怎么去干这个事,那好既然是空间的映射,那就是映射呗,假设X花X花X是我们的输入空间啊,花X是我们的输入空间。

然后呢花H啊,花H是我们的特征空间,那这个时候如果存在一个从花X到花H的映射,对吧,你给我一个X,我就把你映射到H里面去,你给我一个X,我先把你映射到H里面去,那这个映射呢我们用FX来表示啊。

FX来表示,那这个时候很显然,我如果把你映射到了是空间里面去,每一个X都映射成了一个FX,那我只需要在如果原空间是线性不可分的,我只需要在这个H空间里面都变成FX了啊,都变成FX了。

哎我看一下是不是线性可分,OK不就完了吗,是吧嗯,事情还不这么简单啊,还不这么简单,为什么不这么简单呢,看下面映射到了H空间里面去以后啊,映射到空间里面去以后,好像我们只要做个线性可分就可以了啊。

但问题在于这个H空间你怎么找就是个麻烦事,好了,我不管怎么找啊,我不管怎么找,我回过头来看一下我的优化目标,我在这个优化目标里面啊,哎这个地方可能细心的同学注意到了啊,不细心的同学可能就过去了。

为什么在这个阿尔法IY,阿尔法g yi yg xi xg当中,你单独把这里的xi和XG,单独拿个括号括起来了,当然因为这里的xi和XG和前面的阿尔法,和这里阿尔法I和这里的阿尔法GYIYG。

不一样的地方在于这两个是什么,这两个是向量,而且要做向量内积是吧,要做向量内积,也就是说啊在我们的优化目标里面啊,在我们的优化目标里面,我们其实关心的不是一个一个一个的X啊,不是一个一个的X。

而关心的是任意两个数据之间的内积,这是我们要的结果,我不管你是谁,我不管你是哪个X,我要的其实是X和XG的内积的结果,那这个时候也就是说啊,其实我们并没有必要啊,没有必要。

我们非要找到那个H空间再做一个线性可分,我们只需要把它能够找到那个内积的计算,就可以了,因为我们就是要,也就是说我们没有必要从X把你映射成FX,我只需要把这里的xi xg的内积。

映射成FI和FG是不是就可以了,有同学说你你你每一个都映射过去以后,做内机不也就映射过去了吗,这是可以的一种方案,但是你需要把它们认成是认为是一个整体,这个地方你就不再认识xi和XG了。

你现在的你现在看到的就只有xi内基,XG以后的这个整体了,刚才我们的策略是,分别把样本点映射到A10空间里面去,然后再从样样本点那个H空间里面做内积,现在我干脆对吧,你反正要的是个内积值嘛。

我现在干脆就是把这个内积值,直接映射到一个所对应的FXI和FX这里面去,是不是就可以了啊,这是一个技巧啊,希望大家能够就是一个一个观点啊,能够能够能够转变过来,那么好了,看下面假设哈,假设我能这样干。

而且呢这个函数我还能找到什么函数呢,就是我内机映射到H空间里面去,之后的这个内积结果呢是等于一个KXZ的,KXZ的,你看这里的X和Z是我们在原X空间里面的,这里的FXYZ是我在H空间里面的。

而这里的FX内积FZ也是H空间里面的,最重要的一点来了和技巧体现在哪,你看看左边这里的K是个什么东西,K当然是内积的,这里的FX和YYZ的内积值或者内积结果,重点在于它这个内积计算的结果。

居然是使用的什么样的参数,换句话说,这里的X和Z分别是哪个空间里面的原画,X空间里面的,也就是说结论是什么,结论在于,我们只需要在原空间里面知道XC以后,如果我在知道所谓的K所谓的核函数以后。

代入到核函数空和函数当中,去计算一下这个核函数,我得到的这个结果,就等价于,我分别把X和Z映射到H空间里面之后,再做内积的那个结果是一样的,因为是等号,换句话说,这个H空间我压根就不需要找,我不知道我。

我不关心他到底是在哪,我只需要知道谁,我只需要知道这个核函数就可以了,因为核函数告诉我们,你在原空间值带进来以后,得到的这个核函数结果,就等于你把它映射出去之后,然后做内积的结果是一样的。

这就是所谓的技巧的体现,我不知道大家能够理解到多少,有什么问题吗,我再唠叨一遍,你再体会体会,我们的线性不可分问题,已经在原空间里面搞不定了,所以我们的策略是什么,我们的策略是原空间搞不定。

我就搞一个其他空间啊,但当这个嗯不妨在其他空间里面,我就可以把原空间里面的线性不可分问题,搞成一个线性可分了,所以我们需要有这么一个映射,从原空间向随便哪一个空间里面的映射映射,我们把它称之为FX。

那么我们寄希望啊,我们寄希望映射之后的这个FX空间,在H空间里面的FX是线性可分的啊,这是我们最初的一个很朴素的想法,通过分析我们会发现我们要做的啊,我们要做的其实并不关心每一个X之后的FX。

我们更关心的是X内积X以后的那个FX内积FX,因为我在原空间其实更关心的是内机制,所以我更关心的是映射出去的那个内积值,而映射出去的内积值就是FX乘以FX,我更关心的是这个货啊,这个东西。

那这个东西呢唉这个时候谁出现了呢,核函数啊,可以说是嗯怎么说凌空就出现了核函数,这个时候挺身而出,告诉我们告诉我们什么,你要的那个在空间里面,FX和FX的内积,就等于你不需要映射的。

X带入到我核函数去以后的,这个值和你映射出去的结果是一样的,这个时候就太啊可以说是太舒服了是吧,这个时候你会发现,你的目标居然可以使用这么一个东西啊,这么一个核函数的那个东西就解决了啊。

这就是所谓的和技巧的一个,非常重要的一点体现啊,这个问题啊其实怎么说呢,在就和技巧上,并不仅限于在SVM当中的使用啊,很多的场景当中都会使用到和技巧,就是在原空间里面这个问题解决不了。

我寄希望于到其他空间里面去看看,有没有碰碰运气,但是呢这个时候麻烦就在于,其他空间的选择太多了,我我又不确定我到底跑到哪儿去更合适,那这个时候你会发现,如果你的原空间的问题。

是基于一个内积计算的问题的时候,哎这个时候你就可以试一下,使用一下核技巧或者核函数,因为核函数告诉我们啊,你在其他空间里面的映射之后的那几结果,就等于在原空间里面的核函数。

结果你就没有必要去找哪一个空间了,这个时候你只需要带入的核函数就可以了,好吧,那这个时候和函数这么神秘,它到底长什么样呢,啊,这个时候就是数学的那帮同学,给我们很大的帮助啊,他告诉我们啊。

和函数呢有很多种啊,啊这几种都可以完成刚才那个性质啊,我们常用的呢第一种是所谓的多项式和函数啊,也就是说,你把X和Z分别带入到这个式子里面去以后,得到的这个结果就等价于在某一个空间里面。

分别进行内积计算的结果啊,至于哪个空间你不需要了解它,也不需要关心它,对你只需要知道和函数,这样满足这个性质就可以了,多项式核函数,另外一种呢称之为高斯核函数,也叫镜像集合函数啊,是同一个东西啊。

形式就长得比较怪了啊,这个地方为什么长这样,有兴趣的同学可以找一本这个呃,这个深入的讨论的讨论和技巧的书,再看一下,这个时候我们现在就拿过来直接用就可以了啊,讲到这个高斯核函数啊,或者镜像机核函数。

这个就像刚才我们所说的啊,就是想当年啊10年20年以前啊,这得怎么着,得20年以前了,这个你看看这个各种各大期刊啊,机器学习方向的这个paper啊,很多种情况都是什么,基于什么什么改进的镜像集合函数。

在什么什么场景下的应用的研究啊,就这么个东西是不是非常类似于现在对吧,什么什么的神经网络的什么什么的,基于什么的东西,在什么什么领域里面的应用的研究非常类似,就这么一回事啊,就这么个东西。

其实我们已经推进到哈,推进了大约10年啊,这推进到20年以前那个状态了,好了不多说了,那这个时候怎么办,有了即使有了核函数以后,我们仅仅需要把它把那些内积计算的位置,替换成核函数就可以了。

因为我们刚才已经解释到了啊,你这个地方原来是xi内机XG,而你的映射出去之后无非就是FXI累积FXG,而我们知道FXI以及FXG就等于在原空间里面,XY和XG的核函数的计算。

所以你会发现原来空间的线性不可分,通过这一系列的转化转化成了啊,在H空间里面的线性可分的问题可能存在啊,这个地方还不能确定,因为你会发现这里都是带参数的,你的参数设置的不对嗯,得到的结果性能也不好。

很重要的原因就是,你通过这个核函数映射出去的,那个呃那个那个那个那个空间啊,也不太合适啊,所以你需要调参数啊,调到一个诶满足映射规则啊,又可以进线性可分的这么一个空间里面去,那个时候性能会非常的优秀啊。

至少比你硬使用那个软件格啊,在当前空间里面的性质要好很多好吧,你会发现下面的问题啊,你会发现结论就很简单,就是把那个xi和XG的内积用核函数替换掉,但是你会发现A原理或者技巧还是很重要的,下面的问题啊。

其实就和我们前面讲到的是一样的好吧,那么S3O啊,看看这个这个和技巧还有什么问题吗,没有什么问题,我们就继续了啊,SM序列最小的优化,这个地方不展开讲啊,只讲一下它的基本原理,基本原理。

当我们碰到这个问题的时候,你会发现他现在长的是,这有些有些面目狰狞了是吧,就怎么长成这样,这个问题怎么怎么搞啊,搞不了啊,我们仔细的分析一下,让它主要矛盾在哪儿啊,主要矛盾呢。

其实就在于这个最优化目标的优化目标太多,因为前面我们讲到过,这里的阿尔法I是我们的拉格朗日乘子,这里的拉格朗日乘子有多少个,有N个拉格朗日乘子,换句话说,我们需要找到N个值的最优值,就N个变量的最优值。

阿尔法一到阿尔法N阿尔法一型,一直到阿尔法N型啊,都找到最优值,这个时候一下子要处理N个问题的,就是N个变量的最优化问题呢是比较麻烦的,那怎么办,我们把这个问题呃,约就是就是怎么说呢,这个简化一下啊。

简化一下,我每次啊不是直接对着N个变量进行最优化,我只选择其中的两个啊,你不是N个吗,我只从当中选挑俩啊,挑俩零组优化,所以你会发现,选择阿尔法一和阿尔法二两个变量。

其他的阿尔法三又到阿尔法N我固定下来,所谓的固定下来就是给他一个随随机值啊,或者给他一个零值,最最最最零行不行啊,可以啊,这个时候也可以,这个时候你就可以固定一个值,那么问题就变成了。

只含有两个变量的最优化问题了,唉这个时候马上问题好像就嗯,不那么的复杂了是吧,两个随机变量,而且更重要的是什么,更重要的是,这两个随机变量之间其实还是有关系的,因为我们会发现。

代入到这个这个这个等式里面去,因为我们已经把阿尔法三,一的阿尔法N认为是常量了,所以你马上会得到一个关于阿尔法,一和阿尔法二的一个表达式,而这个时候你再把关于阿尔法一或者阿尔法的。

表达式表示成其中的一个的形式,所以你会发现即使是两个变量,也变成了关于一个变量的表达式的问题,用其中的一个表示另外一个嘛,所以你会发现整个的问题就变成了什么,变成了基于一个问题的优化目标啊。

我们一步一步的看哈,从这一步到这一步,我们所说过挑两个变量,哪两个变量其实是有规则啊,我们假设就是阿尔法一和阿尔法,那这个时候会得到下面这个式子,下面这个式子得到的就是。

注意用刚才我们所说的这两个过程啊,你需要进行交叉对应,交叉对应这边是R1到N,这边也是从一到N123,这是I的取值啊,一点点一直到N的取值123。1直到N,因为我们说过,我们只要求保留。

因为我们这个java我们刚才说过,他是这样交叉的一种形式是吧,所以说一的我们需要保留二的,我们需要保留包含一的,我们都需要保留,包含二的我们都需要保留同样G的,包含一的,我们都需要保留G的。

包含二的都需要保留,这一部分都变成常量值就不管了,注意啊,刚才我们说过,你从一开始,因为这个地方有交叉,有交叉,所以阿尔法一为这个记住你从阿尔法一,阿尔法2。2,点一到阿尔法N的里程都需要保留下来。

因为带着阿尔法一同样带着阿尔法二,也需要从阿尔法一,阿尔法R1定要找一到阿尔法N,只有那些纯只有333435,这些都作为我们的已知量啊,这个地方我们就不作为优化目标了,所以问题就转换成下面这个问题。

而在下面这个问题当中,你会发现只保留了阿尔法一和阿尔法二,以及阿尔法一和阿尔法二的交叉项啊,这个问题就相对比较简化了,而且更重要的是,在这里刚才讲到过,阿尔法一和阿尔法二作为变量。

右面那些就变成了一个常量,但是你会发现你会发现,如果把阿尔法也扔过去以后,它做一个变量扔过去以后,你建立的是阿尔法一和阿尔法的一个关系,然后再把这个关系还可以回,带回我的优化目标里面去。

这个时候整个的优化目标里面,就只有包括只有阿尔法一,那这个时候一个变单变量优化问题,就很好解决了是吧,所以说啊这个思路是这样的一个思路啊,这个具体的细节呢展开其实还有很多细的地方。

我们这个地方就不再展开讨论了,有兴趣的同学可以看一下,好吧,这是SMO,然后呢应用啊这个地方也举了一个例子,有兴趣的同学还是那样,回去以后呢可以看一下它的使用方法,那这样的话。

这一部分内容我们就算是告一段落了啊,回过头来看一下我们的第一部分内容,直向量级目标就其实就是找一条直线啊,把这条直线找出来以后,带入到呃觉得函数里面去啊,绝对函数也就已经有了这几步啊,这几步。

线性可分的硬间隔啊,就是这个量啊,线性可分的硬间隔,线性不可分的软件格,允许某些样本点对吧,线性不可分啊,引入存储变量最核心的还是所谓的核技巧啊,你的内积计算,我把它都通通的映射出去,而映射出去之后。

它居然是等于和函数本计算,而且核函数是在原空间里面完成的啊,这太重要了,SM和应用回去我看一下,看看这一部分还有什么问题吗,没有问题的话,我们就继续,Ok,嗯刚才我们介绍的是支持向量机这一部分的内。

容好吧,然后呢这个按照我们的课表安排,我们需要把这个朴素贝叶斯也做一个介绍啊,为什么要介绍这个东西呢,一方面呃,朴素贝叶斯模型啊,是到了这个概率模型的一部分啊,他需要进行大量的概率计算,在一开始的时候。

我们介绍过这个模型分两种是吧,决策决策函数的形式和这个条件概率的形式,那么以以条件概率的形式的模型呢,朴素贝叶斯模型体现的是比较明显的啊,这是一方面,他可以处理这个条件,概率模型其实更重要的一方面。

从这个关系图上,你会发现它后面我们会讲到这个hmm和cf啊,他其实可以认为是为这个hmm和cf,做一些前期的一些准备,特别是一些基本规则的使用啊,包括什么加法规则,成绩规则,贝叶斯定理,这些东西。

你都必须要在这个贝叶斯这一部分,都要把它处理掉,从而到了这些更复杂的模型的时候,你才能不能说是游刃有余吧,至少是能够有这么一个印象啊,否则你看看后面更更加的这个这个张牙舞爪啊。

以后比如说hmm你需要使用到期望最大,又是1111系列的概率计算,cf里面需要使用到最大伤,又是一系列的复杂的概率计算,这些复杂的概率计算的基础,其实都可以在朴素贝叶斯这一部分啊。

这个争取能够把它处理掉啊,到了后面你拿来直接用结果就可以了,否则的话很多同学啊说这hml cf cf难理解原因,我觉得更大部分是你之前没有做铺垫好吧,我们把这个地方把它介绍一下,呃在讲朴素贝叶斯之前。

先补充两条基本规则啊,这两条基本规则会贯彻或者贯穿后面,我们的一系列的概率模型啊,包括HMM和CRF,其实就是这两条基本规则的反复的使用,没什么别的,其实如果再说得绝对一点啊,再复杂的这种概率模型。

包括后面,比如说如果有兴趣的同学,看一下后面那个LSPLSALDA,什么蒙特卡罗,那个什么吉比斯抽样,其实都是很复杂的一些概率计算,但是再复杂它也是这两条基本规则啊,变化着就适用那哪两条规则。

第一条规则称之为是加法规则或者叫加和规则,这都没问题啊,加和规则呢简单点说就看下面这个形式就可以,他说的是PX,一个随机变量X的概率值或者概率分布是吧,我们把它称之为边缘分布,一般把它称之为边缘分布。

边缘分布是一个随机变量的概率分布,那么看右边右边是PXY啊,是两个随机变量的联合概率分布啊,联合联合概率分布,那么很显然,左边和右边单从这个这个这个概率分布上,很显然是不相等的啊,概率肯定是不相等的。

那么怎么相等呢,再加上一个求和sum求和,左边和右边就相等了,这个怎么理解哈,这个我们今天不是数学推导,所以你可以这样理解,左边是一个随机变量,右边是两个随机变量的联合概率。

那么很显然右边多了一个随机变量,那么怎么把右边多的这个随机变量去掉,就是个核心问题,或者说把它的影响去掉是吧,那它的影响是什么,它的影响就在于随机变量的不确定性,它就是一个随机变量嘛。

他当然他有不确定性,造成了多出来这部分,那怎么把它的不确定性去掉,那好了,我们知道如果一个随机变量在所有的可能上,机型就所有取值上,所有可能的取值上进行取值以后,它的概率和为几,概率和为一。

所以从这个角度上去讲啊,就是你可以这样来认为,你认为既然我把随机变量加,就是这个随机变量加入到联合概率当中去了,但是如果我能够进行一个对当前随机变量上的,一个概率求和。

那这个随机变量的这个影响也就消除掉了,也就退化成了一个随机变量的概率分布,所以啊这就称之为加和规则啊,那这个时候呢你这么理解就可以啊,那怎么用右呢,就分两种情况,一种情况呢从右往左右。

是不是要从右往左右呢,就是当你看到一个随机变量的概率分布的时候,你可以你可以想象一下,如果这个公式太长是吧,这个不好推,推不下去了,你看一下是不是,其中某些单变量的这个概率分布。

可以展开成两个联合概率分布的求和的形式,两个随机变量联合概率分布的求和的形式,而这种形式是不是有助于你后面的公式推导啊,这是从左往右,从右往左右呢,其实就是个约减或者,优化是吧。

原来是两个随机变量的联合概率分布,两个随机变量,但是呢求和以后,它退化成了一个随机变量的边缘,概率分布的形式,那这个时候还没有另外一个随机变量了啊,这不是有助于我们进行公式约减是吧,这是加和规则。

成绩规则说的是什么,看下面嗯嗯乘积规则说的是PXY啊,两个随机变量的联合概率分布啊,它等于什么,它等于在X条件之下的条件概率分布乘以PX,那么很显然啊,左边是两个随机变量联合概率分布。

右边的是条件概率乘以边界概率,同样你怎么理解啊,你理解起来就可以这样认为,本来他是对吧,两个随机变量构成的概率分布,具有两个变量的不确定性,那么这个时候的右边,其中X作为的条件作为条件。

意味着X已经被确定了,那么意味着当前随机变量,X的不确定性就没有了,因为它作为条件了嘛是吧,那这个时候是在X确定之后,随机变量Y的条件概率,那么很显然这个时候左右两边是不相等的。

其中最大的一部分原因就在于,一部分原因就在于你这个X被确定了,已经失去了所谓的不确定性,那这个时候怎么办,你可以这样理解,你再把这个P把把这个X的不确定性还原回来,不就可以了吗,怎么还原回来。

那他作为一个既然是一个随机变量,那它PX不就是它的概率分布吗,那这个时候他从一个条件又做,又还原成了一个随机变量,那这个时候和两个随机变量联合,概率分布是不是就可以相等了,当然还是那样。

这不是一个严谨的数学推导,实则你可以这样理解,怎么用,同样分两个方向,第一个方向同样是从左向右啊,当你碰到一个碰到两个两个随机变量,联合概率分布的时候,你可以马上反应过来。

他可以拆成条件概率和边缘概率的乘,积的形式啊,这样的话你展开以后哎,这个时候每一部分是不是和其他部分,进行一个结合啊,可以进一步的向下控制推导啊,这是一种使用,那么另外一种使用呢就是从从右往左嘛啊。

当你看到一个条件概率和边缘概率乘积的时候,哎马上反应过来,它其实就是两个随机变量的联合概率形式,在这个时候把它放在一块儿啊,这个时候是不是对其他的公式的推导,带来一定的帮助是吧好了,这是以上的分析。

你可以完全不记记什么,就记把这两个公式形状记住就可以了,左边是边缘概率,右边是联合概率求和,左边是联合概率,右边是边条件概率和边缘概率的乘积啊,就这么记住,用的时候拿过来比较一下。

分清楚谁是X谁是Y就可以了,那关于加号规则和程序规则,看看有什么问题吗,没有问题,我们就继续往下,那朴素B也是解决的是什么问题,朴素贝叶斯解决的也是所谓的分类问题,首先我们拿到的数据及TX1Y1。

一直到XYN,那这里呢啊所有的X和Y啊,都是根据我们的联合概率分布,所谓的独立同分布产生的,这个你知道就可以了,其中xi也是一个RN的啊,也是个N维的向量YI这个地方注意不一样了,它等于什么。

等于C1C2,遇到C大K那么也就意味着这是一个什么问题,是一个离散的分类问题啊,这是很明显的,那么第二需要明白的,这里的分类不限于二分类,它是一个大K分类啊,具有大K的类别,换句话说啊。

这个朴素贝叶斯模型可以处理所谓的,多分类问题啊,多分类问题样本点由一到N个啊,一到N个,这个地方就不得不多解释了,和我们前面都是一样的,看下面在这个地方数据集我们介绍完了以后。

介绍一个所谓的条件独立性假设,什么叫条件独立性假设嗯,看见没有,条件独立性假设的左边说的是什么,说的是我们的标签Y4Y等于K,Y是我们的随机变量啊,是我们的标签的随机变量。

它等于CKCK是我们的一个类别啊,是我们的一个类别,当我们确定了这个标签是某一个类别的时候啊,这个时候作为条件的时候,我们把X等于X啊,作为我的一个所谓的条件,概率。

条件概率是在标签被确定以后的概率分布啊,是条件概率,按照左边这个条件概率啊,我们把它展开怎么展,这个条件还不变,还是Y等于CK啊,这没什么太大的问题,你看看展开时把我们的随机变量X,因为我们前面介绍过。

随机变量X是有N个维度的,那么这个时候把这里的随N个维度的随机变量,X把按照维度也展开展成什么,展成X1等于X1,X2等于X2,遇到XN等于XN,你不是N维吗,每一位我都把它展开,是随机变量等于X1。

随机变量等于X2,随机变量等于XN,那这个时候啊再看一下这个式子,就变成了一个什么,他首先肯定是个条件概率,条件概率就是Y等于4K啊,Y等于4K是没有问题的,但是呢其中按照这N个维度展开以后的X1。

一直到XN这些变量在形式上,如果我们不看这个啊,不看后面这一部分,这一部分就变成了一个什么,变成一个联合概率,你可以认为是在条件之下的联合概率分布啊,带着这个条件的联合概率分布。

那带着条件的联合概率分布,会对我们的计算带来非常大的麻烦,为什么这么说,回到刚才两回到刚才那个加号规则和规则,我们看一下,还记得PXY等于什么了吗,注意一下,这里的PXY仅仅是两个随机变量。

它就等于PXY条件之下,然后乘以PY,没问题吧,这个地方需要强调的一点是什么,当两个随机变量是联合概率分布的时候,它是等于其中的一个被确定了以后,另外一个的条件概率乘以根源概率,这还仅仅是两个随机变量。

麻烦麻烦的,如果是三个随机变量XYZ联合概率,你怎么把它展开,其实也规则很简单啊,就可以把它先以XY作为一个整体是吧,在Z作为条件之下的推荐概率,然后再乘以PZ是不是就可以了,来这个时候他怎么办。

那再展开吧,他也是个联合概率吗,按照联合概率就变成了X在YZ条件之下,再乘以一个外在条件之下,再乘以一个PC320号,干三个随机变量嘛,就是先把前面两个人为一组,这样的话是两个联合概率展开。

然后再把它展开,是不是就这样形成,这仅仅是三个四个呢,步骤是一样的,但是很显然展开这个形式就很复杂了,好了,回到我们的问题当中来,问题啊,这还不是一个两个三个四个的问题,这是几个,这是N个。

这个N很显然是个这个N啊,就是他这个维度还不低啊,还不低,那这个时候很显然,如果按照刚才我们联合这个这个,联合概率分布的形式展开呢,我们的计算复杂度就太高了,那这个时候怎么办。

看下面这个时候我们就干脆干脆什么呢,干脆我就认为这N个随机变量彼此之间啊,彼此之间不用再按照0号概率展开了,直接把他们的概率分布进行一个相乘就可以了,什么意思呢,就像刚才那个例子啊,就像刚才那个例子。

如果我们以两个随机变量为例,如果我们以两个随机变量为例,PXY按说是应该等于PX,在外条件之下乘以一个PY,这是我们的乘积规则吗,现在我看一下你这个啧按照这里的规则啊,你必须是在外条件之下,X条件概率。

这个时候我直接令它等于PX乘以PY,就不再考虑这个条件概率的问题啊,就直接令PX等于PY,那这个时候你会发现诶,原来中间出现了这么一个式子,什么式子呢,P在Y条件之下,X的条件概率居然等于PX。

那就意味着你这个里面的随机变量,Y确定还是不确定,已经对X不产生任何影响了,因为你会发现这个条件概率就退化成了边缘,概率嘛,你这个条件就不起作用了,那这个时候我们认为X和Y是彼此独立的,回过头来看一下。

如果出现这种情况,你会发现这个时候X1X2遇到XN等于XN,我们就令令什么,令这些条件概率通通都不再加以考虑,不管你后面什么条件我都不管了,那时候只需要考虑什么呢。

我只需要在Y等于K这个条件保留的基础上,把其中所有的X1等于X1,X2等于X2,一直到N等于XN进行美称就可以了,其实就像这里,你会发现我不管你这个条件概率转弯,直接进行累乘,PX乘以PY。

OK3个变量也类似,N个变量就只是在保留标签的基础上,把对应的特征相垒成就可以了,里程意味着这里的X1X2,一个XN不再受约束条件的这个约束,意味着彼此之间没有这种约束关系,还没有这种条件约束关系。

也就意味着所谓的独立的,那这个时候回来回过头来看一下,所谓的朴素贝叶斯模型的一个非常重要的概念,叫做条件独立性假设,注意这里的条件讲的是标签,在标签一定的基础上,各个X彼此是独立的。

称之为是条件独立性假设啊,这个时候条件独立性假设是带条件的,这里的条件说的是标签,经常会问到这个问题啊,经常会问到这个问题,天线多点假设什么意思啊,很多同学反应的很快啊,就是X彼此之间是独立的。

你确定吗,确定那什么叫条件独立假设,一定要告诉告诉这个提问的人啊,你是知道的,这个标签一定的基础上,X彼此之间是独立的啊,所以你会发现这是条件之下的独立性假设啊,可以把它们进行垒成好吧,那关于这一部分。

看看有什么问题吗,没有问题的话,我们就继续往下好吧,有了条件独立性假设以后呢,我们看看所谓的那个BS规则,BS规则呢,其实也是根据我们的这个成绩规则来得到的,为什么这么说呢,看下面这个式子。

看上面第一步,首先还是XY的联合概率分布是吧,按照我们的这个乘积规则,我们可以把它写成条件概率和边缘概率的乘积,但问题就在于啊,刚才其实可能有同学意识到了这个问题,意识到什么问题呢。

PXY的展开式有两种方式啊,一种是PX在Y条件之下乘以PY,还有一种呢是PY在X条件之下乘以PX,因为我们知道联合概率分布其实不嗯,就是没有所谓的这个顺序,所以它符合交换律是吧。

符合交换律PXY等于PYX啊,离合Y的分布啊,这个是我们根据这个联合概率分布呢,就可以展成两种形式,就像就像这2XY是吧,然后呢一种是以Y作为条件,X的条件概率乘以PY,另外一个呢是以X作为条件。

Y的条件概率乘以PX都可以,既然展开以后会发现左边是相等的对吧,左边是相等,既然左边相等,那意味着右边也相等,右边这两个式子相等,那右边这两个式子相等呢啊这两个式子相等的,那右边这两个式子相等。

看看这里这两个式子里面的四个项,四部分,一项两项三项四项,这四项哪一项是非常重要的一个东西,联想一下前面我们讲到过,关于这个这个这个这个条件概率,就是模型的问题,就是模型两种形态,一种是函数形态。

一种是什么,一种是条件概率的形态是吧,你看看这四项哪一项是最有意思的一项,核心放在这一项上,这一项说的是什么,这一项说的是条件概率,他说的是不是这项,不好意思啊,这不是这一项,是哪一项,是这项。

他这个条件概率他说的是什么,他说的是你给我一个X啊,给我一个X随机变量X的值,我能够得到的是标签等于CK的一个概率值,前面我们已经分析过这个问题,什么问题啊,就是你给我一个输入。

我得到的是当前这个输入所对应的,所有的输出的一个概率值,比如说三好学生,那个问题是三好学生还是不是三好学生,我输入一个同学的身高年龄体重学科成绩,我得到他是三好学生的概率是99%。

他不是三好学生的概率是1%,那这个时候很显然我就可以以以此作为依据,去判断当前这个学生是不是当学生了,所以说这个部分是非常有价值的一部分,那好了,既然它非常有用,就保留在等号的左边。

把其他的三项移动到等号的右边去看,下面我们就得到这个式子,得到这个式子,既然我们左边是我们要求的目标,换句话说,左边就是告诉我们,你给我,我给你标签的概率值,那右边很显然。

我只需要把右边这三项分别计算出来以后,得到的那个概率值就是左边的这个模型,结果好了,看右边这三项,右边这三项分母部分是PX等于X啊,边缘概率X的边缘概率,分子部分有一项是关于Y的边缘概率。

另外一项是在Y等于CK这个条件之下,X的条件概率啊,这么三项,换句话说,如果把这三项都算出来了,左边模型就有了对吧,那么这三项呢分别做一下变形啊,分别做一下变形,从这一步到这一步。

我们看看从上到这一步用了哪条规则,能看出来吗,分子部分没有变化啊,分子部分没有变化,分母部分变了,分母部分从原来的边缘概率变成了联合概率,求和的形式,很显然用的是加法规则是吧。

然后呢从这到这条用的哪条规则,从这条到这条,分子还是没变是吧,分子还是没变,分母变成了什么呢,分母变复杂了,还分模这个地方有一个联合概率,变成了条件概率和边缘概率的乘积的形式,很显然用的是乘积规则啊。

乘积规则,那么从这一条到这条用的是什么规则,从这条到这一条我们看看啊,分子其实还是没变啊,分子还是没变,分母变了啊,分母变了,分母变成什么呢,分母变成了在Y等于K的条件之下,然后呢X进行成X进行累成。

这是用的我们的条件独立性,假设这个不用推荐图片,假设我想说的是什么,我想说的是这个推导过程,其实就是我们后面不管是hmm还是cf的,推导过程是一样的,就是说我们需要构建一个左边的模型,然后呢。

右边会是一会是一个非常复杂的一个概率计算,这个概率计算呢,我们需要通过反复的去使用加法规则,乘积规则和相应的一些假设,把这个右边进行相应的变化,变化之后的这个右侧啊,就表示了我们可以进行一个计算。

把这个计算结果复制给我们的模型,就得到了我们最终的训练结果啊,这是一个怎么说,就是一个套路吧啊这么一个东西,那有了有了这一部分以后呢,除了定啊得到这么多东西,你还需要把这些值算出来是吧。

你还要把这些值算出来嗯,这些值怎么去算,我们就需要一点儿一点儿地去去去算一下啊,好了有了这个结果以后,我只需要使得右边这个式子尽可能的最大化,那么他得到的那个标签就是我的分类标签,就像刚才我们所说的。

99%是三个学生,1%不是三好学生,那很显然你这个标签就是三好学生呗是吧,那问题就是尽可能的石油变最大化吧,右边这个最大化其实看一下,你会发现在这一步上,其实你就可以看到了关于PX的边缘概率。

其实它在分母上,对于任意一个输入X以后,它的分母是不变的,因为你这个地方你给我一个X5,就作为分母是吧,所以它的分母是不变的,换句话说,影响这个概率最终结果的只有分子部分啊,只有分子部分,你从这个。

因为它的分母部分其实是个全概率求和,所以从这个角度上你可以看到,也是不影响分母部分的,分母部分也不是不影响的,所以你只需要计算分子部分就可以了,好了不重要,看着下面的句子计算过程,那就分这么几步呗。

啊分这么几步呗,哪几部呢,这个,第一步求P8等CK第二步求在K条件之下,PX的添加概率啊,第一步求PY等于K,PY等于CK呢其实就是一个条件,概率就是概率值,概率值呢因为我们有数据集。

所以我们用频率值来代替就可以了,看一下这个计算过程,Y等于CKY等于CK,我们拿到数据表格对吧,我们最后的这一列是Y那一列,注意我们现在求的是Y等于CK,就是说这些列当中。

这一列标签里面有C1C1C3C5C,反正怎么着吧,反正就是我们的标签啊,有有有应该是K的取值是吧,K的取值,我求的是Y等于CK的概率,是不是我只需要计算一下,比如说我要计算Y等于C1,我只需要计算一下。

当前这个表格里面有多少个是C1的记录,比如说只有一条是C1,那这个时候分子就是一分母是多少,分母是我们整个数据集的个数是N,换句话说Y等于C1的概率就是N分之一,换句话说分子怎么来的。

分子就是查一下有多少个CK是不是就可以了,那这个时候我们看一下怎么查有多少个CK,我们前面讲到过查的过程是个便利过程,而便利过程我们可以用求和过程来使用是吧,你在求和的过程当中。

我需要不断的去判断当前的标记是不是CK,这个时候就使用到了那个所谓的指示函数,当条件成立,YI等于CK条件指数函数返回一,条件成立返回一,那这个时候求和过程当中就加了个一,当便利过程结束的时候。

就把所有满足条件的这个YI等于C的个数,进行了一个累加,作为分子部分,分母就是N,那这个时候得到的这个频率值就是用啊,就是付给了我们当前的Y等于K的概率值啊,这是这一部分。

后面这个后面这部分就比较麻烦了,为什么这么说呢,首先它是在Y等于K的条件之下,我分别计算XG等于XG的概率,那么首先处理一下这个分这个条件,那换句话说,我同样是在Y等于CK这个条件里面。

意味着我们前面讲到过,我是从C1点点遇到CK,我首先需要把这些每一个类别的元素都找出来,就像刚才我所说的,K只有一个C2,举例子可能有五个等等,我把属于某一类别的数据分别都得找出来啊,到K比如说有八个。

那这个所谓的条件就限制了,当我在计算这个条件概率的时候,我仅仅是在它所对应的这个数据子集当中,进行频率值的计算,所以你会发现这个这个频率值的分母啊,先看分母,分母是什么。

分母是刚才我们在计算过程当中计算的那个I,从一到N,然后呢看一下条件指数函数的条件是否成立,为什么要这样做,就像其实刚才已经解释了,因为这个地方的条件概率,所以你仅限于在当前标签等于K的。

这个子集当中来完成频率值的计算,所以分母啊,所以分母首先需要遍历一下数据集,把那个当前为4K的那些元素找出来,比如说他是八对吧,就不再是个N了啊,这个地方就不再是N了,而是一个数据子集。

很显然这个地方的八是小于N的,这种地方需要注意,再看分子分母搞定了,就是我在啊CK这个子集里面啊,去统计我有多少个Y0K的元素,分母分子分子说的是什么,分子说的是两个条件都必须要满足。

第一个条件就是我在当前这个数据子集,就是刚才那个八个样本里面再去找找什么,再去找XG这个DJ这个维度上等于等于谁啊,等于AGL,这里的AG对应的就是当前G这个特征上,可能的一个取值有多少个,有L格。

这里的L从一到它的取值SG也就是说啊,我满足两个条件,这个地方的条件是两个,第一个他是在K里面那个子集里面再找,再找XG等于AGL,如果有这样的条件都满足的元素,我把它记录一下,返回到求和里面去。

当便利完成以后,唉比如说有两个,那这个时候,在K条件之下,XG等于L的,这个条件就等于1/4或者0。5,好吧,那这个时候我们再看一下第二步设定这个特征,XG你看看你这个地方是第几个特征吗。

这个特征可能的取值集合为AG1,一直到AJSJ啊,这个含义就是我在第一个特征上啊,去看一下当前这个对这个特征有多少种取值,有多少种取值呢,看123,一直到SG当前这个特征的取值的可能性,条件概率。

它的极大自然估计就是下面这个式子,分母刚才已经解释了啊,你是在数据子集里面做统计分子呢,这两个条件是在数据子集里面,并且还需要满足XYG等于GL的元素的个数,作为分子。

那这样的话你需要遍历整个数据集里面,把所有这些可能情况都需要找到好了,有了这两项以后,根据公式计算结果就可以了,呃这个过程啊,这个计算过程在我们那个统计学习方法里面啊,李航老师举了一个例子啊。

那个例子很能说明问题,就是这是一个抽象的计算逻辑是吧,这个抽象的计算逻辑,你需要结合啊这个一个数据集啊,一个具体的数据集,你才能够真正的能够把它领会出来啊,真正的把它体会体会得到。

这是关于这个极大自然估计这一部分,看看有什么问题,如果没有问题的话,我们继续啊,下面一个呢称之为朴素,这个呃,不是估计BS估计呢简单一点,他就是处于一种特殊情况,什么情况呢。

因为我们知道我们是用频率值来代替概率值,而频率值的统计呢,是在我们数据集上来进行统计的,这个时候会出现一种情况,在于号称你的类别是从四一直到4K,但是你拿到了这张数据表,就有一种可能出现。

某些类别里面是没有数据统计的啊,这是经常会出现这种情况,比如说还是最开始那个例子啊,我们分三好学生,非三好学生,但恰好你拿到这个数据子集都是三好学生,你说这有什么问题吗。

这很大的问题在于非三好学生的统计个数是零,而我们知道零作为这个分子是很麻烦的,因为这个时候马上就变成了概率为零,比方说这不就是数据表里面本身的一个特点吗,是是因为你这个这个数据太极端对吧。

你造成这种为零的概率的出现,但是我们知道实际情况不应该是这样,是因为你这个数据集有问题是吧,要么数据量太小,要么你采样采的太太偏了是吧,那这个时候怎么办,这个时候呢我们简单处理。

就是我在分子上加上一个值啊,加上一个数值,这个时候就保证了啊,当我们前面出现那种不存在的情况的时候,他还有一个啊,它还有一个分子值,同样这个是既然你分子上加了,你的分母上要做适当的扩大。

这个时候保证你这个比例不发生变化啊,这就是所谓的贝叶斯估计啊,这是一种技巧吧,算是一种技巧,当然如果你的数据集采样比较平均的时候,这个贝叶斯估计呢其实也并不需要是吧,你可以看到啊。

当这里有个参数就是拉姆达,当拉姆达等于零的时候,其实就是极大自然估计,但是这个时候当拉姆达等于一的时候,称之为拉普拉斯平滑,这是经常采用这种方式啊,就是我加上一个分子上加上个一。

来保证你前面这个基数统计为零的时候,概率值至少不为零是吧,你分子上发生了变化,分不上就适当的扩大就可以了啊,这个了解一下就可以了好了,以上内容呢就是我们今天所介绍的朴素贝叶斯,再做一个简单回顾,重点呢。

其实我觉得比普通毕业更重要的是,这两个规则的使用啊,这条规则直接导致了你后面模型的学习的,一个理解啊,这个回去好好看一下,在朴素BS部分的独条件独立性假设,彼此之间是独立的,才能相乘,好吧。

那么后面其实就是反复的在使用,你看加法规则,成绩规则,价值条件啊,这个时候你回去以后,好好的再理解一下就可以了,看这部分还有什么问题吗,好如果没有问题的话,但是没有问题的话,我们今天就到这吧。

有问题的话,及时在课程群里提出来,我们一块儿来讨论和解决,那这样的话我们今天就到这儿好不好。

标签:这个,在线,一个,模型,笔记,公开课,然后,我们,就是
From: https://www.cnblogs.com/apachecn/p/18498036

相关文章

  • 七月在线公开课笔记-十五-
    七月在线公开课笔记(十五)Lookalike相似人群拓展项目实战-P1-七月在线-julyedu-BV1bA411p79ROK我们现在课程开始啊,可以听到我说话吗?你今天讲的话是looklike相似人群扩展啊,这个也是在推荐广告里面是非常经典的一个业务啊。它呢是源于2018年的腾讯广告算法大赛啊,大家可其实可......
  • 七月在线公开课笔记-十四-
    七月在线公开课笔记(十四)1447-七月在线-机器学习集训营15期-P6:03-图像与文本基础-程序员技术手札-BV1ASste6EuZ我好呃。各位同学大家晚上好,然后我们今天呢就给大家讲解,我们的文本和图像基础啊,嗯这个呢就是很多同学比较关心,因为我们现在很多的一个呃岗位呢,上网工程师的岗......
  • 七月在线公开课笔记-十三-
    七月在线公开课笔记(十三)1447-七月在线-机器学习集训营15期-P3:02-CV-2-行人重识别项目(ReID)跑通训练+评测流程-程序员技术手札-BV1ASste6EuZ好啊,各位同学大家晚上好,嗯那今天是我们的啊,COMMDIVISION里面的第二次的这个项目课程,然后在上一节课程里面中,我们其实是跟大家已经讲......
  • Markdown语法笔记
    1.关于标题#标题1##标题2###标题3####标题4######标题5#######标题62.简单文本一个*,斜体两个*,加粗两个~,删除<u>表示下划线3键盘文本ctl+B<br>内容---><---换行4.>引用门前有两棵树--周树人--鲁迅5.有序列表6.无序列表列表1列......
  • ARM Memory(L1/L2/MMU)笔记
    《ARMArchitectureReferenceManualARMv8-A》里面有Memory层级框架图,从中可以看出L1、L2、DRAM、Disk、MMU之间的关系,以及他们在整个存储系统中扮演的角色。涉及到的相关文档有:《ARMArchitectureReferenceManualARMv8-A》:E2TheAArch32ApplicationLevelMemoryModel......
  • [Ansible实践笔记]自动化运维工具Ansible(一):初探ansible&ansible的点对点模式
    文章目录Ansible介绍核心组件任务执行方式实验前的准备更新拓展安装包仓库在ansible主机上配置ip与主机名的对应关系生成密钥对将公钥发送到被管理端,实现免密登录测试一下是否实现免密登录常用工具ansibleansible—docansible—playbook主要配置文件Ansible模块配置......
  • 程序员修炼之道——从小工到专家读书笔记2
    第四章至第六章为程序员提供了一系列实用的编码原则和实践技巧。第四章:注重实效的偏执这一章深入探讨了程序员在面对复杂性和不确定性时,如何保持一种“偏执”的态度来确保软件的质量和可靠性。程序员应该对自己的代码持怀疑态度,始终假设它可能存在错误,直到经过严格的测试和验证......
  • 2024 Fall NJU ISE 课程笔记
    友情链接:https://eaglebear2002.github.iohttps://spricoder.github.iohttps://wbl-z.github.io/1-1自动化测试目录1-2物联网目录2-1数据库目录3-1机器学习目录3-2移动互联网4-1编译原理目录4-2需求需求笔记目录5-1概率论概率论笔记......
  • SPI通讯协议笔记
    SPI的通讯时序当我的NSS从机片选线从高电平被拉至低电平代表选中了这个从机,通讯开始,当从机片选线从低电平升至高电平,代表通讯结束(选中从机状态取消)SCK每一个周期传输MOSI和MISO的一个数据,当SCK下降沿时采样MOSI和MISO的数据......
  • FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库LD
    ijkplayer是一款由B站研发的移动端国产播放器,它基于FFmpeg3.4版本,同时兼容Android和iOS两大移动操作系统。ijkplayer的源码托管地址为https://github.com/bilibili/ijkplayer,截止2024年9月15日,ijkplayer获得3.24万星标数,以及0.81万个分支数,而这还是ijkplayer停止更新6年之后的数据......