七月在线公开课笔记-九-
七月在线公开课笔记(九)
【七月在线】机器学习就业训练营16期 - P8:在线直播:8-XGBoost精讲_ev - IT自学网100 - BV1Z9T5ewEKL
嗯如果没有问题的话,我们就准备开始好吧,额按照咱们这个课程安排啊,今天呢我们要介绍的是超级boost模型呃,这个模型呢其实我们从第一次上课的时候,就介绍到了这种呃,或者说为他进行了一个准备。
为什么这么说呢,大家其实可以看到,x j boost模型的先导模型是GBDT,就是那个梯度提升决策树,然后梯度梯度提升决策树的前序模型呢,是BDT是集成决策树,而集成决策树呢是由数模型。
采用所谓的集成方法来构建的,一种所谓的集成学习模型,而数模型呢我们也已经介绍完了,包括id3C4。5和cut数,当然boosting我们上次也介绍了一部分,那么从这个过程大家可以体会得到。
像查查t boss的这种模型的工作哈,都是在前序的工作的基础之上,又进行了适当的改进和调整,包括原理方面的,也包括工程方面的,所以得到了一个很好的效果,也就是说哈这个咱们之前的一些的工作啊。
其实都是为了这个模型所做的一个准备啊,这是需要介绍一点的,那么刚才提到了就是charge boost模型呃,前序的准备非常的充分,或者说它是在前序模型的基础上做的改进,那么在性能上的话。
它取得了非常好的效果啊,不管是在这个比赛当中,还是在这个实际工作当中啊,他就不是它的这个性能还是比较突出和优秀的,性能呢体现在两方面,一方面呢是这个模型的准确度啊,嗯不管是回归还是分类啊。
x g boost都可以很好的能够完成一系列的工作,那么呃第二方面呢就是从这个运算的速度上啊,刚才是刚才是这个准确性是吧,另外一方面就是速度上,即使是我们基于海量的啊高纬的数据。
那么由于charge boost,在工程方面做了大量的优化和改进,所以说它在这个速度性能上,也是带来了非常好的一个呃效果简单点,简单一点说呢,就是这个模型呢就是计算的准还算的快啊。
所以说哈在各大比赛以及实际工作当中,应用的其实还是比较广泛的呃需要提醒一点啊,差几boost模型呢并不是所谓的深度模型,当然是我们聚焦在深度模模型,如果是以深呃人工神经网络啊为基础的。
这一系列的神经网络模型为基础的,这个视角当中呢,x g boost会显然的不太不太一样啊,包不光是模型结构还是这个优化策略,都不是特别一样啊,这一点希望给大家这个说明一点,也就是说不要迷信啊。
讲到这个人工智能,讲到这个人工智能是吧,现在好像这个呃,大量的工作都是在这个深度学习领域,这没问题,但是呢除此之外哈,其实还有很多的方向都是可供大家啊,需要学习参考的地方啊,多说那么一点。
这是关于x g boost,如果没有问题的话,我们就开始今天的内容好吧,OK那么关于主要内容呢包括这么几方面,一方面呢是X级boss的原理部分,另外一方面呢是应用部分,那么在原理部分呢。
我们需要顺着刚才的那个啊发展的脉络,从这个提升方法做一个简单的回顾,因为我们上次已经介绍到了是吧,包括提升方法和这个BT嗯,我们上次都已经介绍完了,那么这次呢重点聚焦到GBDT梯度。
提升决策树以及呃x g boost本身上啊,当然这一系列的工作啊,其实向前推进的过程当中,都是为了介绍这个x g boost啊,这是在原理部分上,那么应用部分上呢,包括这么几方面啊,一部分是关于参数的。
就调参的参数的选择,包括通用参数提升器的参数,还有学习任务参数呃,有在参数的基础上呢,我们会介简单介绍一下基本应用啊,基本应用包括这个X级BBOOST和莱GBM的一个,对比分析。
以及随后的一个来GBM的应用,当然后续的这一部分内容啊,不作为我们的重点,我们重点还是聚焦到呃差距,box t boost的这个原理部分啊,这是说一下我们今天的主要内容,那么我们就继续往下。
那么从差距boss的这个名称哈,就是这个模型名称上,其实我们也可以看得到它的一个特点,什么特点呢,所谓的charge boost,其实就是在我们GBDT的基础上,进行了一个扩展啊,或者极限的一个提升。
这样的话就构成了所谓的charge boost,那很显然我们需要了解的就是GBDT,GBDT呢,这也是今天我们需要简单介绍的,他是在BDT的基础上使用所谓的梯度信息啊,一阶梯度。
这样的话就构成了在BDT的基础上,使用异界梯度,就构成了我们的GBDT,在GBDT的基础上做相应的拓展扩展改进,就是我们今天的x g boost,当然我们已经熟悉的是。
BDT是由我们的boosting和决策树所构成的对吧,那这样的话我们一个顺序应该是什么,应该是当然额决策树是作为一个基础模型,然后呢是将介绍boosting,然后是BDDT,然后是JBDT。
最后是charge boost,这个过程,其实是通过本身的这个模型的这种性能性质啊,所决定的,那我们简单的回顾第一部分,关于这个集成方法,boosting方集成方法呢两部分上次已经介绍了。
分别是所谓的加法模型和前降分布算法,所谓的加法模型就是将一系列的基模型,BX伽马M和他的这个全职系数BM,进行一个累加,得到的我们的FX,那这个时候呢,我们的优化目标,就是在整个加法模型上来完成的。
所以你会发现,当我们带入到损失函数里面去,实际输出和整个的模型输出计算损失以后,在整个数据集上进行累加,这是我们的优化目标,因为它是一个加法模型,所以对它的直接的优化其实是呃比较困难的。
那这个时候我们就采用在加法模型的基础上,所谓的前项分布算法逐步的去优化我们的损失,以期最终逼近我们最终的这个加法模型的,这个损失,那么所谓的前项分布算法是一种优化的思路啊,他是将我们的加法模型啊。
可以从前向后,每一步只学习一个奇函数及其系数,逐步逼近我们的优化目标,那这样的话呢,整个的优化过程就变成了在损失函数里面,只需要计算的是实际输出,YI和当前的一个G模型。
贝塔b xi伽马之间的一个损失计算,当然还是在整个数据集上来完成的,那么很显然,这个单独模型的优化,要比上面加法模型的优化的,这个困难度要减少很多了,当然这是我们的一个期望,或者我们的一个预期。
这个预期的实现嗯,还是有一些这个步骤的,因为很显然这两个优化目标是不一样的,那么怎么样使得你用这种简单的方法去逼近,这个加法模型,其实还是有一系列的步骤的,这就是所谓的切向分布算法。
切线分布算法告诉我们的是在数据集T上,X1Y1到XNYN损失函数L是已知的,以及我们的奇函数集合啊,BX伽马也是已知的,注意这是个函数集合,也是我们的模型集合,这里的模型呢并不唯一是一啊。
是一个由若干个元素所组成的一个集合,当我们进行加法模型的优化过程当中,或者说在我们的前项分布算法的过程当中,每一次我们所优化的那一个G模型,都是属于这个及模型集合当中的一个元素啊,在这个元。
在这个集合当中不断的去寻找就可以了,就是不断的去找一个优化,找一个再优化,找一个再优化就可以了,那么输出的当然就是我们的加法模型FX,那么切向分布算的步骤啊,第一步啊就初始化F0X等于零,强调一点的是。
它同样也是个模型啊,将所有的输入都映射成了输出零,只不过呢它是在D0布上啊,作为一个性能非常差的一个基础模型所存在,我们就是在F0X等于零的基础上,不断的构建新的基模型进行进行优化。
加入到这个初始模型当中去,来完成我们的加法模型的一个训练过程,从第二步开始,我们令M从121直到大M步啊,我们不断的在进行这个循环优化,在循环优化的每一步当中,我们都是使得损失函数的实际输出。
和我们上一个模型的输出,加上当前模型贝塔BX伽马构成的新模型,在数据集上的一个最小优化结果啊,注意哈,我们的优化目标并不单纯的是基模型的优化,而是是在上一次模型的基础上。
加上当前G模型在损失函数上的一个优化,那么很显然这个地方的FM减1X,以F0X为基础,每一步的前一步的模型其实都是一致的啊,这一步是我们作为一个基础模型,不断的在向上迭代,向上迭代。
每一步都是在前一步的模型的基础上,进行一个局部的一个优化,那么当然当当,我们有了当前模型的贝塔M和伽马M以后,更新当前模型FMX等于FM减1X,上一步的模型,加上当前这一步已经优化得到的贝塔MBX。
伽马M有同学会问了,这个优化过程怎么去完成,其实这个优化过程就是一个学习过程,我在数据集上,使得损失函数极小化的那个优化过程啊,一以我们的数模型为例,后面我们也讲到了是吧,以我们的数模型为例。
其实这一步就是一次数模型的学习啊,很多同学啊呃不太清楚哎,这个损失函数放在这,那优化过程在哪,优化过程就是使这个损失函数极小的,那个优化过程,你说具体是实现在哪个地方。
那这一步的具体实现就是我们以以数模型为基,模型为例的话,那就是单棵树的一个学习过程,当然是在FM减1X加上那颗单颗树构成的,那个模型的基础上,使得数据集上的损失最小好吧,那么当完成了以上这一步以后。
我们得到了一个新的DM步的模型FMX,那这个时候随着循环的不断的深入,这里的FMX在不断的进行优化是吧,当M等于当小M等于大M的时候,我们的优化过程迭代结束,那这个时候最终得到所谓的加法模型。
就是FX等于F大,MX等于3mm从一到大M贝塔m bx伽马M啊,这是我们上次所介绍到的啊,这个时候有同学还会有疑问啊,就这个大M怎么去确定,当然这个大M可以是事先设置的啊。
你认为比如说我迭代100根是吧,我前项分布算法过程当中,我迭代160,这是一种策略,另外一种策略呢,很显然也可以,通过你每一次学习的这个实际输出的,FMX和上一次这个FM减1X之间的差,值的绝对值啊。
就是我们可以计算一下,计算一下当前F模型减去一个F减1X的差值,就是这是我上一步的性能,这是我当前步的性能,这个差值如果小于了一个阈值,就是我每一次优化其实已经有很有限了啊。
就是每一次的提高非常非常有限了,这个时候我基本上也可以停止整个优化算法了,就像我们的这个考试一样是吧,每一次我都是呃97分96,97。一九十七。2是吧,这个时候已经没有太大的提升空间了。
这个时候优化算法也可以结束掉了,那么这个时候BDT键介绍完了以后,BD这个BOSTON介绍完了以后,下一步就是BDT啊,提升决策数,提升决策树呢,就是以决策树为基模型构成的提升方法啊。
那这个时候把我们的基模型,每一个基模型都以数模型作为一个特例实现,也就可以了,那么其实你可以看到,在形式上我们的以提升绝对数模型,就是一个FM等于SMM乘以一到大MTX,大欧米伽M。
这个时候你会发现没有那个B啊,没有那个贝塔,这个时候我们认为所有的数模型啊,都是这个都是这个等全值的啊,就可以了,也为我们的优化简便一点啊,其中这个参数就是我们的一棵树啊,就是我们的一棵树。
那继续往下嗯,那也是BDT的这个前项分布算法,其实和我们的这个boosting的前向分布算法,是一样的啊,同样是在F0X等于零的基础上,DM部的模型是FMX等于FM减1X,加上一棵树就可以了。
这是我们的优化目标也相应的发生了变化啊,就是在我们实际输出Y和FM减1X,加上那棵树作为当前模型的基础上,进行损失计算,在数据集上进行最小化就可以了,那么这个时候我们具体的看一下。
就是已知我们的数据集X一Y1直到XNYN,将我们的输入空间RN进行一个呃,令我们的xi属于我们RN的一个元素,那这个时候的话X是我们的输入空间,同样vi是属于画外,是属于一个R的,注意这是一个R。
这很显然是一个回归问题是吧,我们先处理回归,那这个时候Y为输出空间,如果我们的输出空间化,X被划分成了这个互不相交的区域,R1R二一个RJ啊,并且在每个区域上都确定相应的输出CJ。
那么决策数就可以表示成以下形式啊,刚才我们讨论关于这个BDT的时候,我们知道是以数模型作为这个基模型来构建的,那这个时候我们明确的给出,当前这颗树模型的定义,我们上一次在讲这个决策式的时候。
也已经强调过了,数模型本质,就是对我们输入空间的一个离散化划分,划分成R1和R这个空间,然后每一个空间给出一个相对应的输出,这个时候就构成了所谓的决策树模型,那么交叉数模型的表示这个形式化的表示。
形式上我们可以认为我们是需要遍历啊,当有一个输入X进来以后啊,我需要遍历,那而那那这个第三空间,那这便利过程我们使用一个累加过程来对应,那这个时候我们需要判断当前输入的X,是否属于某一个RG空间。
那么从R1R二一直到RJ我需要遍历一下,看后面这个指示函数是否是成立啊,指示函数的条件是否成立,当X属于某一个输出空,输那个输出空间的时候,那这个时候指示函数里面的条件为真,返回一。
那么对应的就是当前这个空间的输出值CD,当这个便利过程完成以后,一定是由某一个空间啊,某一个RG空间对应我的X,那这个时候输出的就是当前那个空间的CJ,那这个时候有了关于数的模型以后。
我们下一步就可以以具体的模型形式啊,模型形式作为我的这个呃数模型形式,带进到我们的前项分布算法过程当中去,也就可以了啊,大家可以看到啊,在这个过程当中。
和我们的BDT这个boosting过程其实是一样的,就是以我们的决策树模型,作为一个基模型的替代就可以了,那么重点呢,其实在这个地方我觉得其实是更重要的一点,为什么这一点呢,上次我们也讲到了这一点。
当采用平方损失的时候啊,当我们采用平方损失的时候,我们知道这是个标准的平方损失函数的定义,LYFX啊,实际输出和模型的预测输出的差值的平方,左右的损失,那么在java模型当中。
我们把我们的这个每一步的这个呃模型展开,会发现它是由FM减1X,加上当前要学习的那棵树模型构成的,当前部模型,那这是实际输出Y,那这个时候的损失函数计算一定是,Y减去FM减1X减去那棵树的输出的平方。
加上平方值,那这个时候呢我们会发现当前这三步当中哈,Y是我们的实际输出,是数据集里面的已知值,这个FM减1X,在当前DM部的模型的构建过程当中,上一步嘛,上一步的模型基于当前这一步。
DM部也是已经知道的了,因为我们每一次都是在上一步的基础上,再构建一个新的模型,那么上一步的模型基于当前,这一步的模型是个已知值,他也是知道的,那么也就是说只有当前布的这颗树模型,我是不知道的。
那好如果我们把这里的Y和FM减1X,这两个已知量啊,既然是已知嘛,就可以加括号先算出来,算出来呢作为R值啊,算出来作为R值,那R值呢也是已知值,那这个时候我们在加法模型的每一步的损失,计算过程当中。
其实等价于计算一个R减去T的平方,那么R呢,如果我们认为它是因为R是个已知值嘛,反正他是个已知值,某一个数据集的输出对吧,我不管你是哪个数据集啊,反正这个数据集的输出我是知道的了,那么在此基础上。
我要计算它和我们一棵决策树的差值的平方值,同样对应到我们一个一般化的这个损失函数,额平方损失函数的定义过程当中,大家会发现,其实它和我们的一般化的平方损失函数,在形式上是完全一样的。
大家可以看到这里的R反正是已知的,我不管我不确定于哪个数据集,但反正它是已知的,它就对应的是我们的实际输出Y,那这个时候的T其实就是一棵树模型,它对应的就是一般化的我们的一个FX。
那这样的话问题就退化成了,我要在实实际输出R上训练一颗决策树模型T,然后去计算他的损失的问题,使当然使这个损失最小的那个T,就变成了我最优的那颗T,那你会发现这个问题就已经退化成了,我们上堂课的。
上次课的讲到的那个什么,那个那个决策树模型了是吧,也就是说你会发现问题通过这一系列的转化,已经我们看不到所谓的什么嗯,加法模型和前项分布算法了,他就退化成了一个在已知数据集上进行。
一颗决策树模型的构建的问题了,而这个问题我们不管是从i id,344。5还是卡的数都已经很好的解决掉了,那也就是说问题转化成了什么嗯,转化成了当我在第M步的学习过程当中,其实我只关心的是。
我要构建一个新的数据集R啊,新的数据加R,当然这个R的计算其实很简单,就是Y减去FM减1X,而我在当前这个已知数据集R上,再重新学习一棵树就可以了,那换句话说,我每一步的数的学习。
都是在实际输出和上一步模型的那个差,值上进行学习,我们下面上一次已经介绍过了,其实这个这个结果其实非常呃,有意义的地方在于实际输出是Y减去FM减1X,注意这里的FM减1X是我们上一步的模型。
那么他俩的差值很显然是上一步的模型,没有很好的反映,我们实际输出的那个结果的那个差对吧,我们每一次都有一个考试,考试免不了都会出现错误的情况啊,就是错题我复习的有,我复习需要有针对性。
既然我考试验证了我掌握的内容,其实我的经历其实就并不一定要在这方面,我的主要精力就要放到我上一次考试,那次没考好的地方,所谓的错题的情况,我把精力放在这,那么很显然我下一次再考试的时候。
一旦出现了我上一次没考好的那个情况,出现了以后,我当然因为我前面都已经对吧,做过处理努嗯,相对应的都已经把这问题都解决掉了,那这个时候的性能肯定是越来越提高了,这就是加法模型呃。
他的一个策略在这个呃BDT上,1BDT上的一个体现,非常的有针对性啊,这一部分被称之为是,就是我们实际输出和我们上一次模型的预测,输出之间的这个差值被称之为是残差啊,残差。
那也就是说所谓的加上分前项分布算法在呃,加法模型,在前向分布算法的过程当中的学习过程,其实就是每一步构建一棵决策树,去拟合上一步的残差就OK了,所以你看一下我们的具体的学习过程。
已知输入数据集要要求输出,我们的最终的BDT模型F0X等于零,这是没问题的,然后呢在循环过程当中哎,我们不再是直接对那个LYI,FM减1X加T进行优化,而是直接先计算一下残差。
我先算一下YI减去FM减1X2,作为当前部的残差值,有了这个残差值之后,哎我拟合残差学习一个回归数,得到我们的决策树体,而就这一波而言,就是我们上一次课讲到的,不管是id34。5还是cut数。
你把它展开放在套在这一步里就可以了,当我们得到这个新的决策数T以后,那下面就是更新我们的FX在FM减1X的基础上,加上那个决策树就OK了,那这个时候通过我们的上述循环,最终当达到第M步的时候。
我们最终得到回归,提升决策数F大MX等于sin m,从一到大M我们的决策数相加就可以了,好了,这就是关于这个BDT部分,BDT以那个boot和BDTD部分,这是我们上一次所介绍的内容啊。
这一部分内容是我们的回顾啊,这个看看大家有什么问题吗,没有问题的话,我们就继续哈,那下一步好在讲这个GBTT的机之前呢,我们简单的回顾一下哈,我们的一个基本的一个策略,就是我们有输入空间画X。
有输出空间画Y,我们要做的是X1X2。2。1到XN到,Y1Y2。2。1到YN的一个映射的问题,等下把它映射过去,而我们又知道,满足这个从X到Y的映射的这个F2,F1F2点点点,它是有若干个。
所以我们需要有一系列的策略,当然不管你是结构风险最小化,还是经验风险最小化,反正找到一个F星就可以了,但事实上大家再注意一点,就是我们经常会发现,在我们的模型的构建过程当中。
决定模型形态的其实是模型的什么参数,不管是我是用theta表示还是用W表示,其实还是一个参数空间CA1CT2得2A点,那这个时候你会发现哎,所谓的最优函数F星,其实是由相应的参数来决定的,那么也就是说。
我们的学习过程,其实并不是在模型空间F空间里面啊,不是在花F空间模进行学习的,而是在我们的参数空间C塔里面进行学习的,所以你会发现我们的学习策略是构建一个,关于当前参数的损失函数YI和,FC塔X。
然后再和我们的什么,和我们的参数进行一个偏导计算,这个时候,我们假设我们前面的这个学习率是阿尔法,然后再在C塔的基础上得到一个它的迭代方式,因为我们的求解目标是C它,所以你会发现我们的损失函数啊。
比如我们还用L来表示啊,我们损失函数是对我们的theta求偏导,因为我们是在C大空间里面进行学习的好了,如果我们我们想当然的认为啊,想当然的认为,如果我们的这个模型空间里面的每一个模型。
F都不是由C塔来决定的,换句话说,我不必然的有这么一个所谓的参数空间,这么一个概念的话,也就是说我这个模型不是由参数决定的,我只有只有模型,没有什么参数,没这么东西,那么按照刚才的套路。
其实其实不变的在于我需要计算的还是F呃,X对吧,对谁的偏导,这个时候你会发现哎,就麻烦就在于,之前我是在参数空间里面对参数求偏导,现在我没有哪个参数空间了对吧,那这个时候我对谁求偏导。
那你是不是可以直接就用你的函数求偏导,那这个时候再加上得再加上你的学习率,然后呢你是在上一步的那个模型的基础上,在新的模型的啊负梯度方向上得到一个新的F,在逻辑上是完全一样的,大家发现了吗。
这是啊关于这个GBDT的一个,这个就是一个思路,就是我们嗯,由于我们在前面的一些大多数的模型当中啊,都是有这么一个参数以及参数空间的概念,我们在形式上更习惯于对C塔,或者对参数的偏导计算。
因为你的求解目标就是参数,所以你当然是需要找到你是在theta空间里面,你要找到一个最低的CA星作为你的模型参数,但现在问题是,我们把它换掉对吧,我们不在C塔空间里面,我们没有C塔那个概念。
我们直接是就是在F空间里,模型空间里面,我们同样找到的是F型,那同样还是从L向F空间求偏导,得到负梯度方向,以使它能够收敛到最低点,作为我们最终的那个自由模型不就可以了吗,啊这是做的一点铺垫。
其实有了这一点铺垫以后,你再回过头来再去看这个所谓的GBDT,其实就一目了然了,为什么,因为有了这个过程以后,你会发现它再结合着我们前面刚讲到的,卡瓦模型和前向分布算法问题,就变成了什么,其实简单点说。
就一句话,梯度提升,梯度提升算法使用了损失函数的负梯度啊,使用损失函数的负梯度,这是损失函数,损失函数的负梯度,在当前模型的值啊,对我们的函数进行一个负梯度计算,在当前模型的值作为回归问题。
提升决策树的当中的残差的一个近似值,来拟合一颗回归树啊,就像刚才我们所说的啊,我们就是在模型空间里面啊,就是在模型空间里面,既然在模型空间里面,我们找到了那个使模型实损模型的损失最小的,那个方向。
就是我直接对F进行求偏导,它的负方向,负梯度方向就是我下降最速的那个方向,我在它此基础上有了这个负梯度方向值以后,我们每一次的学习时,他它使得它越来越小,越来越小,就完成了我们优化的一个目标。
那么看下面梯度提升决策树的算法啊,其实非常简单,就是在输入的基础上,还是输入数据集和我们的损失函数啊,输出呢就是我们的模型初始化还是F0X,当然这个地方需要注意一点,有同学这个地方就有点懵。
唉刚才都是F0X等于零吗,为什么这个地方变成了FX0,后面这么复杂的一个式子了,后面这个复杂式子,其实仔细看一点也没太大的一个困难在于,我现在计算的是什么,计算的是一个在损失上。
实际输出Y和我们的一个常量C,注意啊,这个C啊是个常量C之间的一个,数据集上的一个损失的极小值,也就是说哈,你这个时候即使找到了一个F0,X是通过这么一次学习得到的,也无非得到的就是个常数。
比如说F0X等于八或者等于七,当然只是只是举例啊,有时你会发现他和那个F0X直接让它等于零,在性能上其实区别并不大,但是呢这个的好处在于,它是通过一个学习得到的结果啊,不管是数值几吧。
性能上一定要比这个零可能要好一些,但是呢因为这个模型本身是个常量模型啊,就是那个C啊或者是常量函数,所以这个性能上有提高,提高非常非常有限,所以啊如果你理解了,你认为OK没问题。
如果你你说哎呀这个地方实在不理解,那就让它等于零就可以了,如果你还需要再理解理解,我们上次其实举多过一个例子,举还记得在我们第一次上课的时候,讲到过那个那个什么那个欠拟合现象啊,过拟合和欠拟合的时候。
我们讲到过,比如我们那个正弦曲线,还记得那个,正弦曲线啊,还记得那个F0等于零是在这儿,我们有一次变化了以后,其实是F0X,其实是可以让他还是同样是作为一条直线,但并不一定这个呃是F0等于零了。
而那个时候你会发现,即使还是一条直线,性能上有提升,但是性能提升的非常有限,其实非常类似于在现在这个场景上,好吧,这是第一步啊,这个很多的时候,大家在这个地方都有疑问和困惑,解释一下。
当有了这个基模型以后啊,基础模这个不是基模型啊,当有了这个F0X作为一个第零步的模型以后,那么我们从一到大M每一步我都需要计算的是,I从一到N在整个数据集上来完成一个嗯,不再是残差的计算。
而是残差的一个近似值的计算,就是刚才我们所说的就是我们的损失函数,基于函数的负梯度方向啊的一个值,用这个值来作为我们残差的一个近似值,其实啊并不再有残差的概念了,因为标准的残渣概念。
是在平方损失的基础上才有的啊,这是在上面这个残渣的概念啊,是在标准的平方损失的基础上才有的,那么在BDT的基础上啊,呃有残差的概念,但是在JBDT的基础上,其实完全可以不提残差这个概念。
因为刚才我们是我们已经分析了,我们每一次的学习,就是在函数空间里面,直接对我们的模型函数进行偏导计算,它的负梯度方向就是我们的最优的收敛方向,因为我们还是希望这个损失函数最小嘛,那个函数。
损失函数最小的那个FX就是我们的最UX,所以啊这个地方嗯你需要知道啊,计算这么一个负梯度方向就可以了,有了这个负梯度方向以后,下面的工作啊,下面的工作就是一棵决策树的学习。
只不过我们的学习目标变成了这个,刚才计算得到的负梯度啊,这个过程其实和我们的ID3C四,4。5和卡的数是完全一样的,当我们构建出这个新的数数以后,下面更新FMX等于FM减1X。
加上我们的一颗新的决策树就可以了,有的说唉你上面不是个T吗,怎么下面变成它了,不要忘了我们那颗决策树T展开之后,不就刚才所说的吗,J从一到大GCM,然后I判断一下X是不是属于RM对吧。
只不过是刚才把上一步,那个T展成他的一个标准展,比那个形式化的表述就可以了,然后当我们得到了每一步的FMX以后,那么最终的决策树啊,当最终的梯度提升决策数,FHX就等于F大MX等于sum m。
从一到大M那大M可竖那大M棵树,每一棵树都是J从一到大GCMG,然后判断一下当前的X是不是属于,那当前的一棵树所对应的离散化输出的空间啊,这就是BDDGBDT哈,其实最核心的一点就是对这个式子的一个呃。
理解啊,这个其实还是怎么说呢,嗯需要有一点这种这种抽象的能力是吧,大家看看这部分有什么问题吗,好这个还有另外一个资料给大家看一下这个,咳咳这里呢还有一份资料嗯,为什么要把他介绍给大家呢。
是因为这份资料在刚才那个呃,就是GBDT的讨论过程当中,其实是有一些更详细的更详细的介绍和说明啊,有兴趣的同学呢,这个资料呃我一会整理一下,发到我们群里啊,大家可以看一下,其实你会发现它同样是逻辑。
就是刚才我们所说的,当我们有参数空间的概念的时候,我们每一次的参数都是在上一次参数的基础上,加上一个新的参数的更新值对吧,我们是在我们要聚焦到德尔塔西塔上,而德尔塔西塔其实就是我们的。
你可以理解成模型的负梯度方向,只不过你是在参数来计算的,你可以看到,你看我们就就是在我们上一次的基础上,加上一个德尔塔theta,而德尔塔西塔就是我们需要计算一下一阶梯度,是吧。
找一下这个那个类比式的啊,在这嗯从参数空间到函数空间的一个映射,当我们在当我们你看,当我们习惯于在参数空间里面,来完成参数的学习的时候,我们继续往下,你会发现它和函数空间上。
在上一次的函数上进行新的函数的学习,不是一样的吗,形式上是完全一样的,只不过我们换了一个空间而已啊,没有参数的概念,所以说你会发现哎,我在上一步的C塔等于负的对吧,阿尔法去作为学习力啊。
在负梯度的基础上不断的累加负梯度的时候,负的参数梯度的时候,其实我们累加负的函数梯度是不是也可以啊,是一样的一个概念啊,这个嗯我觉得虽然稍微有一点儿,这个抽象的理解,但是一旦你能够突破这一点的话。
我觉得对大家来说一定是一个,就是我觉得是个很大的一个提升啊,不要拘拘泥于呃习惯性的一个结果,那好了,前面的铺垫啊都作为准备共性的工作,那下面我们正式的开始介绍呃,X级boss的模型啊。
前面的工作啊都是铺垫的内容啊,最终聚焦到这,我们看一下,极限提升决策树啊,极限梯度提升决策树啊,这个东西呢,其实就是在我们之前的那个,上一步的JBDT的基础上做了两点改进,第一点改进啊。
其实可能细心的同学都发现了啊,不管是前面讲到的这个这个BDT也好,还是讲到的这个JBDT也好,其实都没有正则画像,都没有正则化对吧,也没有减值过程,那么这个时候是不合适的啊。
所以呢ti boost的作者啊,陈田基老师的第一个改进就是加入了正则画像,当然这个正则画像设计还是有一定技巧的啊,一会我们再介绍,那么第二项,既然GBDT使用到了负梯度方向。
那负梯度呢我们基本上就是一阶梯度信息,而我们知道按照泰勒展开式呃,理解梯度信息之后,应该是二阶梯度,三阶梯度以及更高阶的梯度,才能完整的描述一个函数对吧,那这个时候如果我们用一阶梯度进行模。
这个模型的学习的过程当中,你会发现那是不是可以考虑二阶梯度呢,对其实第二个改进就是使用了二阶梯度,啊这就是我们在原理方面啊,比较突出的两个改进的地方,当然还有一些细节改进啊。
比如说后面的损失函数定义啊等等其他方面,但是最主要的还是这两点啊,那我们就分别啊,看这两点是怎么在JBDT当中体现出来的,那么在此之前呢,我们还需要介绍一下,就是在GBDT当中。
关于决策树的模型的一个定义啊,在GBDT当中啊,决策树模型的一个定义呃,我们看一下,首先我们已知的还是训练数据集xi到YI啊,这个没什么特别的,其中xi是属于RM的,还是MV的一个特征输入。
那么YI是属于RN额属于R,它是一个连续失值输出,那么很显然是个什么,是个回归问题,D的模等于N,有说元素个数是N个,那么这个时候的就差几boost里面的模型定义啊,就是决策树模型被定义成FX等于W。
下标是QX啊,下标是QX那这个时候啊嗯就不是形式上啊,形式上就不是那么的明显啊,他和我们前面所介绍到的,不管是ID344。5还是卡的数啊,不管是BDT还是GB,DT的模型的定义都不太一样啊,都不太一样。
形式上是不太一样的,但是含义上可以说是完全一样的,为什么这么说呢,我们再回顾一下,我们刚才已经重复了好多遍了,关于决策树的模型定义的本质是什么,一棵决策树的本质就是我们对输入空间,花X的离散化啊。
得到若干个离散化之后的空间,以及若干个离散化之后的空间,当中的每一个空间所对应的什么输出,就是刚才我们所所说的R1R2点I点,一直到RJ,然后呢每一个都对应一个输出,C一C二D2。2,一直到CJ。
这就是就就是决策树,那咳咳,刚才我们看到的那个决策树,在形式上是从J从一到大G然后是CJI,然后看一下X属于RJ,这是我们前面的老套路了,这不是一棵树吗,为什么现在他就长这样了呢,简单的分析一下。
看一下,解释一下这里的W和QX到底是什么东西,看下面其中QQ是个什么,Q是一个从RM到123点点点,遇到大T的这么一个映射,注意啊,Q是一个映射,就在这个地方哈,这里的QX啊,这里的QX是个函数哈。
是个映射,这个函数能干什么,能把一个RM的值映射到1~8T啊,这个集合里面去,那注意一下这个RM是什么RM哪有啊,RM在这RM就是我们输入空间,就是由若干个X所组成的一个输入空间,那这个时候你会发现。
换句话说这里的QX的输入,这里的QX的输入就是我们的一个什么,RM为空间里面的一个点啊,就是我们那个输入特征值啊,就是说QX的输入就是我们的一个输入特征值,那有了这个输入特征值X以后。
你看下它把它映射到哪去了,映射到了12345点点大T里面去了,那这个大T是什么,这个T看后面有有介绍,T为决策树叶子的节点数啊,T为决策树叶子的节点数,也就是说我们要得到一棵树,这棵树长什么样。
我不知道,但是我对你的叶子都已经编好号了,121号叶子,2号叶子得点点,最后DT个叶子,那这个时候的Q能够完成的就是,当我有了输入以后,当我一个输入X来以后,我通过Q5X得到的是。
你当前这个输入X所对应的那个叶子的下标,对应的那个叶子的下标就说我我你给我个X,我虽然不能把,直接把你先映射到那个叶子里面去,但是我可以先通过QX得到,你应该在的那个地方的下标,非常类似什么。
就是你上班的时候啊,每一每每来一个工,每来一个新的同事对吧,我都先给他一个什么,给他一个工牌,这个工牌上记录了,你应该坐在哪个位置上的工位,当你拿到这个T之后啊,当你拿到这个QX以后。
再根据这个QX我们刚才讲到了QX是什么,QX是W的一个下标,看W是什么东西,W在哪,W在后面,W是属于RT的,RT很显然T刚才已经介绍了是叶子的节点个数,那RT是个什么东西。
RT不就是由T个123点点二,由T个元素所组成的一个向量吗,啊注意它的下标分别是从123。2点,一直到大T那时候我刚才把它们组合到一块,你会发现功能就在于,当你一个新的元素X来了以后。
先通过QX得到你先在哪个叶子节点上,然后有了这个QX的叶子节点编号,查一下这个W得到,比如说你是3号叶子啊,你的QX等于三,你找到这个位置上了,然后再查一下这个W的第三个维度上的值。
我们就可以得到相对应的输出了,那么你看一下这个模型和我们前面所讲到的,这个数模型的逻辑是不是是不是一致的,只不过我们区别在哪,区别只是在于,我们刚才讲到的是一个从离散空间的角度上,得到对应的输出。
那么你看看我们现在介绍的这个模型,定义WQX是不是也是给我一个X,先计算一个QX,而QX一定是一个离散空间当中的一个位置,有了这个QX以后,WQX对应的就是当前这个离散空间位置上,所对应的那个输出值。
形式上虽然不一样啊,形式上可以说是很不一样啊,但是原原理上是完全一样的一个东西啊,原理上是完全一样的东西,你现在回过头来再看一下这个FX的定义哈,再看一下这个FX的定义,大家应该就能够明白了啊。
这个过程刚才已经介绍了对吧,你给我一个X啊,我先通过QX计算出你是在哪个叶子上啊,知道你在哪个叶子的位置上了,我通过这个W结构或者W数组,其实它就是个数组是吧,我通过查一下这个数组对应的那个叶子位置。
得到的就是当前这个叶子的对应输出值,而这个输出就是你输入X所对应的输出值,这就是在charge boost里面关于决策,关于决策树模型的一个定义,这个模型的定义啊是很有意义的。
一会我们会看到它后面进行这个嗯,推导的就是损失函数的推导过程当中,这个模型的定义其实还是非常,结构上还是非常有意义的啊,一会我们可以可以体现的到啊,关于这个GBD就是x g boost这个模型定义部分。
看看有什么问题吗,如果没有问题的话,我就继续啊继续,弄好了继续,好了有了模型了,我们上面先定义损失,额模型有了以后,看一下提升决策树模型的预测输出,因为刚才只是一棵树啊,只是一棵树。
那么在提升决策树当中,我们无非就是把这若干克数进行一个累加是吧,所以y heat i等于负XI等于K,从一到大KFKXI啊,注意啊,这里的带帽子的啊,带hat的都是模型的预测输出啊,都是模型的预测输出。
考虑到它是一个加法模型啊,它是一个加法模型,所以呢我们是把每一科啊,每一颗决策树进行一个累加,所以这个地方啊是一个sum k从一到大,KFK的一个累加过程啊,累加额下这里的K下标啊。
仅仅表示了我是第几棵树啊,第几棵树,那么有了这个预测输出以后,看损失函数定义正则化目标函数啊,正则化的目标函数,那或看一下,很显然是加上了什么,加上了正则化项是吧,加上了正则画像,看一下怎么定义的。
定义为sum i,然后呢LYI额y hat i,然后是YI,这是我们在一个数据上实际输出,实际输出和预测输出之间的损失啊,这是一个数据上的损失,然后在整个数据集上进行一个累加。
这个地方没没加上下没加这个这个上界哈,你II从几啊,I肯定是从一啊,这个没问题,那上节是几啊,有同学有有印象吗,I从一到几,I从一到N,为什么I从一到小N,因为刚才我们检查过数据集里面。
元素的个数就是小N个,所以你这个地方一定是从X1Y1,一到XNYN,所以这个地方的损失一定是这样来计算的,那么这是我们普通的一个损失函数是吧,普通的这个结构风险额经验风险啊,这是普通的一个经验风险。
那么在经验风险的基础上,我们看一下加上正则化项,正则化项是怎么加的,Sum k sumk,然后呢大欧米伽FK,那么很显然加上了正则化项,那是正则画像里面,这个大欧米伽又是怎么来定义的。
看下面很显然我们前面一直讲到过啊,这个正则化项一定是用来表示当前模型,复杂程度的一个项啊,就当前复杂程度的一个像,那这个时候我们大家需要想一下,一棵树模型怎么表示它的模型的复杂程度。
很多的指标都可以完成这个度量,那比如说我们可以通过什么,可以通过这棵决策树的这个深度是吧,深度啊,当然我们知道数越深,模型越复杂啊,这是一种方式,还可以通过什么,还可以通过当前模型的叶子节点的个数啊。
就是那个大T前面刚才已经介绍过啊,T为决策树叶子节点的个数额,树里面的叶子越多,模型越复杂,反之越小,所以这个地方第一项啊,正则化项的第一项包含我们叶子节点的个数啊,叶子节点的个数,前面这个伽马啊。
前面这个伽马嗯也是我们的一个系数啊,也是一个嗯超三需要设置的啊,用来表示当前你这个正则化项的一个重要性,这是第一项,第二项是个什么东西,第二项是个1/2兰姆达,W的二范数的平方啊,W的二范数的平方。
谁的范数是W的范数,负W是谁,W是在这刚才已经介绍过了啊,其实这个W就是把我们得到的每一个叶子,节点的输出形成了这么一个什么数组,所以我们才对一叶子进行了编号嘛,最后一个是大T。
那么这个里面的值就是W1W2,一直到W大T我们这个值也不能够啊特别的大,或者说用这个值的大小,也表征了当前模型的一个复杂程度,所以这个地方的第二项啊,这个地方第二项是1/2拉姆达呃,W的二三数的平方。
稍微把它展开,展开之后变成了那伽马T加上12拉姆达,1/3,从一到大T啊,因为这个时候我们有大七个叶子,所以把每一个叶子的W都拿出来,进行一个平方向就可以了,好吧,这是正则画像。
那么很显然通过正则画像的加入,使得我们当前构建的这个charge boost的模型,就不太容易陷入所谓的过拟合现象啊,这是第一项改进啊,关于第一项改进,看看大家有什么问题吗,没有问题是吧。
好我们继续嗯好了,有了模型的定义,有了这个损失函数的定义,那我们继续往下看,这个时候的损失函数定义,还是刚才我们所说的是吧,还是在整个数据,就刚才我们说你把它补齐了吗,SUMI从一到N。
我们整个数据集上损失L,加上正则画像就可以了,需要注意哈,哎这个地方看一下,稍微注意一点,注意什么,这个y height i啊,y hat i很显然是模型的实际输出。
而模型的实际输出按照我们前面所讲到过的,我们在DT轮上啊,因为我们的学习过程啊,前项分布算法的学习过程是一步一步的在做,所以当我们看到DT轮上的模型参数的时候。
你会发现这里的LT等于YI实际输出和你看了吗,既然是DT轮,那么就是在DT减一轮的模型输出上,再加上DT轮我们要学习的那棵决策树,作为我第T轮的整个的实际输出的预测输出,再和我的实际输出计算损失。
然后在数据集上来完成累加,再加上唉我DT轮的模型的一个正则化项,构成了我DT轮的目标函数啊,这一项啊,这个有同学也经常会有困惑,困惑在哪,困惑就在你上面这个目标函数,实际输出就是Y额。
预测输出就是y hat,然后实际输出就是YI,为什么在下面的这个损失函数里面,又你你那个Y害他为什么又等于这个式子,是因为我们整这里的one hat哈,这里的one heat是我们整个学习之后的啊。
最终的那个模型的预测输出,而这下面这个式子啊,下面这个式子说的是我在DT轮的学习过程当中,损失函数的具体形式啊,这是不一样的,所以你会发现上面这个式子里面,直接就是实际输出和预测输出之间。
的损失函数计算,而在下面这个式子里面,由于它是DT轮,所以我必须要把DT轮写成,按照我们加法模型的要求,写成DT减一轮的输出和我当前轮的模型的和,作为我DT轮的预测输出,再和实际输出做损失计算。
然后再加上正则画像作为我的目标函数啊,这个地方的困惑啊,解释清楚了啊,好了重点来了哎呀重点在哪呢,这个地方就比较慢一点了,嗯好好玩来看,既然我们已经完成了,第T轮的目标函数的一个定义啊。
这个定义形式上其实已经很嗯,已经细节信息已经很丰富了是吧,YI是已知的y height t减1I也是已知的,FTXI是未知的,因为是DT轮要构建的那颗绝对树啊,I从一到N是在整个数据集上。
然后呢大欧米伽ft t啊,当欧米伽F的定义在这啊,F这个这个这个当前这颗决策树的叶子个数啊,以及W的值啊,在FT减一上也是已知的,但问题在于下面的一个工作,我们需要在DT轮的目标函数的基础上。
在one height t减一处进行一个二阶泰勒展开啧,这可能对大家有时就是一个挑战,为什么对大家来说是个挑战呢,因为为什么要进行二阶泰勒展开啊,这就是个很大的一个困惑嗯,如果联想一下。
我们在JBDT上的一个学这个这个一个介绍,可能这个困惑就会减少一些,因为很显然,我们在GBDT的基础上要进行模型的学习,我们是要计算一个负梯度方向,而那个负梯度方向是通过我们的损失函数对吧,还记得吧。
是我们的那个损失函数L,FX和Y对我FX的偏导的负值的一个学习目标,那么现在呢我们前面讲到过啊,你这仅仅是使用到了一阶梯度信息,因为只有求一阶导数这个精度啊,这个精度一定不比我们的二阶梯度的精度要大。
也就是他他还小一些,那这个时候我们如果是不是可以哎,如果在此基础上,我们再求一下二阶梯度,是不是更精度更高一些,这就是为什么我们要这在这个地方讨论,选目标函数,在y head的T减一处的一个。
二阶态的展开的一个问题,好吧,这就是我们的一个目标,就是我们看一下这个二阶梯度信息是多少啊,这个作为如果我们作为优化目标的话啊,这个精度就要比刚才的一阶梯度信息,更加的丰富是吧,精度会更高。
那么既然要讨论到二阶梯度展开,又不得不回过头来看一下这个式子,看哪呢,我们看一个式子啊,看一下上面有一个展开式,可能对于额部分同学来说,这个泰勒展开式已经忘的差不多了啊,我们也不需要讨论啊。
不需要严格的讨论,这个具体展开的这个细节部分,我们看一下形式上怎么去看一下,一阶泰勒展开啊,FX的一阶态勒展开,它约等于F0啊,在X0处的一个函数值加上F1到X0,乘上一个X减X0是吧,这是一阶梯度。
二阶梯度啊,展开是FX约等于FX0啊,在X0处的函数值加上一个F1等于X0,乘以一个X减X0,再加上一个F0到X0,乘以一个二分之X减X0的平方对吧,这很显然有了二阶梯度信息。
那么这是一个在X0处的展开,如果我们把它写成迭代形式啊,写成迭代形式,什么叫迭代形式啊,就是这个地方的X0呃,这里的是X减去X0,是个在X0处的展开,我们把这里假设XT等于XT减一,加上一个德尔塔X啊。
我们是在上一次的那个XT减一的基础上,又增加了一个变化量,德尔塔X作为我XT的一个当前值,那这个时候FXT在XT减一处的泰勒展开,就是下面这个式子,FXT等于FXT减一,加上一个德尔塔X啊,这个注意啊。
这是个等式啊,FXT就是FXT减一那个位置上对吧,上一次那个位置上加上加上了一个增量,德尔塔X啊,加上那个增量增量X作为我FX的一个输入,那这个时候展开之后怎么展,展开之后约等于FXT减一。
其实我们就是以FXT减一处,作为我的它的展开位置啊,函数值吗,函数值加上一个F1导XT减一,乘以一个德尔塔X,按照刚才那是X减X0,X减X0不就是个增量吗,这个增量不就是等于德尔塔X吗。
再加上一个F两导,XT减一乘以个二分之X减X0,增量的平方就是德尔塔X的平方啊,这是我们这个奥数里面的结论,你拿过来用就可以了,我们要把它拿过来用,用在哪儿看一下,分清楚谁是谁就可以了,谁是谁。
什么叫谁是谁,看这两,我们既然是要对我们的目标函数,在f heat t减一处进行二阶泰勒展开,很显然这里的LT就是这里的FXTLT,就是这里的FXT,然后呢按照我们刚才所说的LT等于什么。
等于y i y heat t减一,加上一个FTXI,注意啊,你需要仔细对一下这里的XT减一,就是这里的y height t减一,有同学转不过来啊,这个你这里是Y这里是X能能是一样的吗。
抽象首先就是抽象嘛是吧,注意这里的X就是模型的,就是函数的输入啊,就是函数的自变量,你可以发现这个模型的这是关于F的自变量,那这个模这个函数L的自变量,是不是也是y hat t减一是吧,这是XT减一啊。
就是这里的Y害的T减一,这里的FTXY就是这里的德尔塔X啊,就是你每一次要新增加的那个增量,有了这个对应关系以后,在下面约等于号了啊,约等于号约等于SM从一到N其他都不变。
然后这里的L是y i y HT减一,就是这里的YXT减一,在T减一处的函数值加上加下面加什么,加下面这个式子是F1导XT减一,对于我们的XT减一求偏导吗,你看损失函数对Y害的T减一求偏导。
然后呢乘以一个德尔塔X,乘以一个德尔塔XFTXI刚才也说过,这里德尔塔X就是FTX再加加上什么,加上一个F两导XT减一,这里你看这是F0到XT减一,然后呢再乘以一个二分之德尔塔X的平方,1/2。
往前提1/2往前提,德尔塔X的平方就是FTX的平方好吧,所以说啊从这从上面这个目标函数定义开始,以及在y head的T减一处的二阶泰勒展开,完全其实就是一个负号提速,完全就是一个符号的一个替换啊。
这个地方你对应着每一个符号啊,它的展开式的,每一个符号一一的进行对应就可以了,好吧嗯,这一部分有什么问题吗,兰姆达也是权重系数吗,哪个兰姆达,哪个兰姆达,你说这里的兰姆达吗,额这不是模型的选值系数。
这是我们的呃,正则化项当中的一部分的一个超参数啊,这不是那个全职系数和模型的全职系数没关系,好吧,为什么要把叶子节点加到损失函数里面去啊,是在这是吧,前面我们讲到过啊,正则这个过拟合的问题啊。
过拟合欠拟合的问题,过拟合项就是模型太复杂了,我们需要在正则画像中项当中加入,表示模型复杂程度的一个量,那这个时候怎么表征当前模型的复杂程度,叶子的节点个数是可以用来表示模型,复杂还是不复杂的。
就像前面我们讲到的,如果我们只有这个经验风险最小化,我们会使得模型很复杂啊,会出现所谓的过拟合,现在这个过拟合现象,而模型越复杂的一个相对应的一个情况,就是模型的不复杂,模型的不复杂。
就是尽可能的希望模型的叶子节点尽可能的小,所以这个时候当我们追求这个呃,损失整个目标函数的小的时候,我们一定知道经验风险是越来越小的,但是相对应的经验风险越来越小,会导致我们的正则化项越来越大。
那这个时候是这两个的结果的尽可能的小,所以一方面考虑到了在数据集上,我们要使损失小,还考虑到了你的模型还不能太复杂,所以这个模型加上正则化项之后的,这个模型就很很很少会出现所谓的过拟合现象,好吧。
这就是这个在目标函数当中加上正则化项啊,那下面刚才介绍到的呢,重点在于这个二阶泰勒展开,所谓的二阶泰勒展开呢其实就是套公式啊,就是我们的啊泰勒展开公式,这个时候只不过你需要仔细的去划分一下。
到底谁是FXT,谁是那个德尔塔X啊,有了这个对应关系以后,展开公式是是没有问题的,好吧嗯,还有一点啊,可能会有同学提提出疑问来提出疑问来嘶,怎么看这个L函数,和你刚才所介绍的那个FXT不一样。
哪儿不一样呢,又说不出来,很显然有一个地方不一样,不一样在哪,细心的同学会发现,这里的L函数是一个二元函数,什么叫二元函数,它有几个几个自变量,它是有两个自变量的,你发现了吗。
那比如说上面这个式子看的更清楚,我们上面最早的时候讲损失函数的时候,说到过损失函数是二元函数,它是由两个量构成的,一个是实际输出,一个是预测输出,才能计算这个这个才能计算损失是吧。
所以哈你会发现除了这一点不同之外,二元函数那就二元呗,更重要的在于这里的YI还是个实际输出,是个已知值,那它既然是已知的,也不妨碍任何的这个额泰勒展开的计算啊,所以这个地方稍微仔细一点,灵活一下。
应该没有问题啊,看看这一部分有什么问题吗,而且电影没看懂,回去以后看视频啊,把那段视频这个材料我也发给大家啊,那个地方你再对应的自己看一下,就是个对应好吧,别对应错了就行了。
求导的时候FX与FT减U无关嘛,哎这是个好问题,我看是哪个同学啊啊0906同学啊,嗯额首先这个FX是对应的残差吗,这不是个残差啊,没有残差的概念,那但下面这个好问题,求导的时候是F与FT减一无关吗。
就说哎刚才那个求偏导对谁求偏导啊,对求谁求偏导,是在y heat t减一处的二阶泰勒展开,我们在前面求那个呃YIFXI对FX求导的时候,用负梯度计算的时候啊,负梯度计算的时候。
很显然我们是在对FX求偏导,但是这个FX上注意后面还有一个竖杠,竖杠在上面,竖杠在上面,竖杠在这这里的你要求偏导,你对谁求偏导啊,是对FX没问题,但是我们知道我们每一次的迭代过程当中,的FX是多个啊。
有F1XF2X一直到FMX,那么到底是对哪个FX求偏导,那大家觉得你应该对哪个FX求偏导,你要知道你必须要知道函数的具体形式以后,你才能够计算出它的偏导,以及它的负梯度的方向。
既然你需要对这个FX是已知的,那么很显然在第M部的时候,FX是不知道的,你不能用,那这个时候你只能用谁,只能用他的上一部那个FM减1X,所以这个地方你会发现啊,我对FX求偏导的时候是FM减1X。
作为我的求导对象,同理刚才是如果是一阶泰勒展开,那这个地方是二阶泰勒展开,那二阶泰勒展开的时候,你出现导肯定是对f HT减一嘛,就是你上一轮所学到的那个模型,出他的那个偏导嘛啊这是个好问题啊。
细心看了啊,但是这个问题啊,其实如果你再仔细一点考虑的话,其实是也是能够思考出来的,你对谁求偏导,你如果你对它不知道不了解,还是那个结果出不来,那谁了解或者谁知道,在DT轮。
很显然T减一轮的信息你是知道的是吧,好吧好了嗯好,当有上面这个这么复杂的式子以后呢,那么下面我们就需要做一些符号上的这个替换,使他能够简单一点,怎么替换,首先我们看看一下。
some i从一到n l y i y has t减一,这一项是没有变的啊,这一项还在这,那么下面这一项啊,下面这一项嗯,很显然这里的FT减XFT减X还在,所以这两项是没动。
那么很显然这一项就变成了这一项,那么很显然下面说到过,用JI啊,来表示损失函数在Y害的T减一上的偏导值啊,就是做了个符号替换就没什么太大问题,那么同样这里的F平方F平方都在,那么这里的1/2。
12也在那AH在这儿,那替换的是这一项,那么很显然,hi等于损失函数对Y害的T减一的,二阶导数和二阶导数啊,放在这个地方做了一个简单的符号替换啊,就是为了,下面写的方便而已好了,二阶特展展开就展开完了。
展开完了以后,我们继续往下,因为展到这个地方啊,讨厌在这个地方后面还有个正则画像好吧,我们把正则画像一块展开是吧,把正则方向也展开,展开之后呢,我们就知道正则化项,大欧米伽FT等于这里的伽马T加上12。
兰姆达sum g1从一到大T,然后W的WG的平方啊,这是我们刚才所介绍的正则化项的那一项,加进来就可以了,加进来之后发现了问题了,问题在哪儿啧,加进来之后啊,发现这个式子呢就已经复杂到好好。
好多地方都莫名其妙的地方,注意啊,前面有一个sum求和是从I从一到N,后面也有一个sum求和,J从一到大气这两个求和,那就很麻烦,为什么这么这么说呢,因为前面这个求和是在整个数据集上来求和的。
I从一到N嘛,I从一到N整个数据集上求和,后面这个求和J从一到大TT是什么,还有印象吗,T是我们嗯模型当中决策树的那个叶子的个数,这两个sum求sum求sum求和啊,这个求和的对象是不一致的啊。
就是一个是在数据集上,一个是在叶子叶子上,那这个时候对我们整个公式呢,这个计算会带来一定的麻烦,下面我们就需要把这两个求和公式进行统一啊,统一起来啊,在一个循环上就完成这两个活啊,就是这么个目标。
这个地方呢就是就是一点小技巧啊,小技巧技巧在哪儿,先说明一下,虽然从形式上我们会发现啊,虽然在形式上我们会发现,这两个求和形式上是完全不一样的,但是呢仔细想一下,你反正你两个都是求和求加法啊。
求若干个数的和吗,求若干个数的和,我们看一看你这若干个数的和的结果,是不是一样的,第一个求和啊,很明显I从一到N,很显然我们是在数据集上来完成求和的啊,数据集上来完成求和的N在哪往前找,看到N了吗。
N是我们数据集的模啊,数据集有多少个元素,你这个N就是多少,那很显然这个求和是在数据集上来完成的,换句话说我需要遍历整个数据集,好看后面这个后面这个是什么,刚才我们也已经讲到了啊。
他是我们学习之后的那个决策树的叶子节点,叶子节点上的求和,叶子节点上的求和,我第一个叶子,第二个叶子一直到第七个叶子,我都需要进行求和,求和的对象是谁,求和的对象是对每一个叶子的输出值的平方,对吧。
每一个叶子的输出值的平方,对每一个叶子进行求和和,对整个数据集求和,怎么能够把这两者统一起来,换一个角度啊,换一个角度,如果我们在进行决策树的学习的过程当中当中,大家想一下,是不是在学习完成以后。
我们必须要保证每一数据集里面的每一个数据,都必须要落到决策树模型的每一个叶子里面去,想想,我再重复一遍,就是数,当我们通过数据集啊学习完成了一颗决策树,那么是不是也就意味着。
我当前这个数据集里面的每一个数据,都一定被映射到了,这颗学习之后的决策树的,某一个叶子节点里面去了,我虽然不知道他一定在哪一个叶子上,但是我一定知道的,他一定是在这些叶子当中的哪一个里面。
某一个里面是这样吗,那如果有了这个视角以后,那大家想一下,我对一整个数据集的便利,是不是就可以转变成对整棵决策树里面的,每一个叶子节点的便利,然后遍历每一个叶子节点,那么大家想想这两个效果是不是一样的。
再举一个例子啊,再举一个例子,我们都知道咱们学校每一名同学,都一定隶属于学校里面的每一个班级,这是没问题的是吧,你是三班的,你是二班的,你是四班的,那么当这个学校的校长,要便利整个学校的学生的时候。
他有两种方法可以去完成,第一种方法,他可以拿着整个学校的点名册对吧,你不有学号吗对吧,我大不了就按照学号,一个学号,一个学号的点名,那这个时候很显然,就是在对整个数据集进行便利,这是一种方式啊。
我从一号学生到N号学生遍历一遍,那这个时候我就便利完了,那么除了这种方式之外,我又知道,既然每一个学生都在某一个班级里面,我还可以怎么办,便利我先遍历一班,在一班里面我把所有的学生都遍历完了。
再遍历二班啊,在二班里面再把所有的同学都遍历完了,一直到最后一个班级,把所有当前这个最后班级里面,所有的同学都遍历完了,那我也有信心,相信整个学校的所有的同学也都便利完成了啊,其实是一个逻辑啊。
其实是一个逻辑,就在这个地方,我们碰到了一个困难,就在于这两个sum求和啊,在形式上不一致啊,这个地方我们需要把它统一起来啊,这个时候我们需要折中一点,就是需要把这里的整个数据集上的求和。
把它形式上统一成在整个叶子呃,所有叶子节点上的求和的一种形式,那看具体怎么去做,看下面我们需要定义这么个东西嗯,定义叶子节点G上啊,某一个叶子节点G上样本的下标集合,我知道哈,每一棵树。
我们一棵树有若干个叶子节点,有若干个叶子节点,比如说就是三个叶子啊,三个叶子一号叶子,2号叶子和3号叶子,那我一定知道我数据集里面所有的数据哈,都在这三个叶子节点里面是吧,然后呢我定义这个叶子上。
比如说定义2号叶子上,所有样本的下标集合为这么个东西,就是当前这个叶子节点里面有若干个元素啊,比如说X1X2嗯X8,举一个例子啊,仅仅是举例子,那这X1X2X八这三个叶子的下标,我们把它构成一个集合。
叫做IG叫做I2,因为他是2号页了,也就说II2现在等于什么,等于128这么个东西,看下形式哈,看一下形式,IJ说明的是在DJ个叶子上,所有的数据的下标的集合,所以你会发现它的形式定义在下面。
这个式子为什么是这样来定义,还记没记得还记得这个q xi是什么东西了吗,找找啊,忘了啊,忘了就往前找,q xi q x是不是在这QX是不是个映射,你给我一个X,我把你映射到叶子里面去是吧。
现在就用的这个Q函数了啊,这个Q函数就是说明的是你给我一个X,你给我一个X,我把你当前这个X的叶子给你找到,当然叶子的下标是G,那么你看一下是不是就像刚才我们所说的,把叶子节点G上的样本样本就是数据。
就是我们的数据,将叶子节点上数据的下标哪些数据啊,一当前这个叶子节点上所有的数据,是不是都一定满足QX等于G,因为我们知道QX就是来完成叶子节点映射的,只有满足了QX等于G。
才说明你当前这个X是属于这一页的,里面的元素,而把这些所有的元素找出来以后,我要什么,我要的是元素的下标,所以是xi为什么这里是I的集合啊,就是这里的xi,好吧,有了这个关于叶子节点G上的。
样本的下标集合以后,你看看下面,我们就可以把目标函数表示为,按叶子节点累加的形式累变成下面这个形式,看看还是原来那个目标函数啊,还是原来的目标函数哎,这个时候SU就不再是在整个数据集上求解了。
而是变成了J等于一到T我遍历所有的叶子,在遍历每一个叶子的过程当中,我要计算下面这个值啊,计算后面这个值,那后面这个值看看,那么看下面,既然我们现在是在数每一个叶子上进行便利,那么下面的求和。
就到了每一个具体的叶子里面去了,比如说这里的I属于IG,说明当前这个元素,是我D这个叶子里面的某一个元素,当这个便利完成以后,是不是意味着当前D这个叶子就便利完了,那在外层循环里面。
当外层循环所有的叶子都便利完成以后,是不是也意味着整个数据集也便利完了对吧,所以说啊SAMJ从一到T开始遍历叶子,SAMI属于IJ遍历当前DJ个叶子,在D这个叶子里面。
我们在遍历这里的GI乘以FTXIJI啊,没有问题啊,JI没有问题,就是这里的JI,那问题是你这个FTXI跑哪去了,有人I发现FTX它没有了,这里变成了WG,那你看看这里为什么有这么一个式子。
就是为什么你把这里的FTXI用WG可替换,换句话说,很显然这里要保证f t xi是等于WG的,为什么这个等式是成立的呢,为什么,注意FTXI是我们前面定义的那个数啊,哎这个时候就体现出啊。
这个决策树的定义形式的这个好意义了,这里是FX等于WQX,按照我们这个数的定义,你是需要等于FTXI,按照我们的定义,不是W不是Q应该是等于wq xi,没问题吧,哎你这个地方怎么变成了G了啊。
不要忘了你,你是在第几个叶子里面,所有必须要满足所有的W呃,所有的QXI就等于G,那不就是等于WG了吗,另外怎么来的了吧,所以从这一项到这一项是需要他俩相等,它俩相等呢,就是因为这是按照定义来的。
但是呢我们知道他是在当前叶子节点里面,QXY就等于G,所以是等于WG,你看这就体现出啊,这个刚才那个函数的额数模型的定义的,技巧了吧,就在这儿好了,继续往下吧,如果这个明白了以后,下面其实也就明白了啊。
然后呢是二分之一二分之一没有问题,然后呢同样到了叶子里面是sum i从一呃,属于IGHIHI没问题,然后这里多了一个兰姆达是怎么个意思呢,然后这个地方又多了一个WG的平方,又是什么意思呢,意思在于。
既然我们已经变成了便利叶子,那后面这个遍历叶子,是不是也可以拿到整个的循环过程当中来了,我没有必要遍历两次叶子,再在当到了某一个叶子里面,这两个循环这个活我是不是都可以干了,我在这个里面。
我第一个第一步先把这个数据的便利,这个活干了,第二步再对你的输出的值的平方的求和也干了,是不是也可以了,所以说这个地方,所以这里的J从一到大T里面前面这一项啊,因为这里的没有WB的平方啊,这第二项呢。
我们就完全可以把WB的平方往前往前移进来,一进来以后呢,这个地方刚才我们说到过,这里,同样哈是FT的平方,xi按照定义应该是等于怎么老喜老喜欢写Q0,应该等于W的q xi的平方,就等于WG的平方。
明白了吗,这是这是这是那么来的好吧,当然这个地方是不是还有一个WZ的平方,也要也要过来,那这意味着前面的系数啊要进行相加,又变成了1/2,往前一提变成了一个sum i hi,加上一个这里的lambda。
就变成了这个式子,这一部分是这两部分的求和,这两部分的求和,这一部分其实就等于WG的平方,所以这里的W的平方就向后提了,然后前面的系数这里有个1/2,H这里有个12兰姆达,把1/2再往前提。
所以剩下的就是H加兰姆达好吧,那后面这个伽马T没办法就扔在后面,拉倒了啊,就扔在这,所以说这是今天可以说是嗯,又是一个额比较不太好理解的地方,是我们需要做的工作,是需要把sum进行一个形式上的统一。
最核心的就在于,我们需要在便利业务的过程当中啊,每一个叶子都遍历完了,来表示我对数据集的便利,那这个时候我需要在当前叶子的便利过程当中,需要定义一个叶子节点的一个元素下,标的集合啊。
就这么一点地方介绍清楚了就可以了,这一部分看看有什么问题吗,这两个sum求和,是要遍历完每一棵树的所有叶子节点吗,是I是N个数据,G是T个节点,不该是SUG包含在SUI当中吗,呃不是二,在这当中。
就像刚才我们所说的,学生是在班级里面,数据是在叶子节点里面对吧,第二位HI为啥又是IG呢,HI应该了解了是吧,OK没问题啊,好了这一步完成以后哈,你会发现哎我的损失函数啊,终于变成了这个样了。
那这个损失函数长这样有什么用呢,看下面不要忘了我们是要什么,我们是要令损失函数最小的时候,那个输出值不要忘了我们现在的目标哈,其实那个,那个FX的定义还告诉我们,我这个输出是在W上来完成的。
计算出计算出的这个输出值,我一定是要使这个W的值在目标函数的最小化,的基础上,要尽可能的小,对应的就是最优的模型输出,那这是我们的优化策略是吧,因为正好我们的目标函数加上了正则化项。
这个优化策略应该是很好的,避免了所谓的过拟合,那策略有了以后,套路不就是求偏导吗,对我们的WG求偏导仔细一点啊,这个地方需要特别仔细一点,其实没什么技巧,下面就没有什么太多的技巧了,就是一个,仔细了啊。
这个式子要对WG求偏导,你看看你能得到一个什么结论,注意啊是WG,所以外面这个sum g从一到T的循环,其实就没有必要了,因为在循环过程当中只有一项是WG,其他的项要么比WD小,要么比他GW大是吧。
那么当只有WG这一项上,我们对WJ求偏导,所以这一项肯定是SMI除以IGGI,再加上一个哎,这个时候你会发现,同样还会有一项是WG的平方向,这个二往前一提二分之一一乘变成了一。
所以剩下的是sum i属于IGHI,加上一个LAMBA,后面这个伽马T没有包含WG的那一项,所以整个式子等于零,整个式子等于零,把前面这个和后面这个因为可以看到啊,这一项里面是只有一次项嘛。
就变成了只有前面的系数,这是个二次项,二往二已经往前提了,从二次项降成了一次项,所以把这一项移到等式的右面去作为分母,所以就变成了下面这个式子,WG的星最优的模型输出等于负的sum i。
从I除以IGHI,加兰姆达分之SUI属于IGGI啊,这一项生成的是SUGI,加上这一项,剩下的是sum h i加兰姆达,然后是W然后这一项等于零,所以W星就等于这一项向右向右扔。
这一项除过去就变成了一个负的,分母是sum h加兰姆达,分之sum g i h i没问题吧,所以就是这一项好吧,好了,我们看看这一项哈,这一项当中的几个量,第一个一阶导数,二阶导数兰姆达。
拉姆达是超参数,这个是我们设置的,这个很显然是知道的,那这里的HI和JI和HI1阶导数,二阶导数知不知道看什么定义啊,一阶导和二阶导数的定义在这个地方,你会发现,这里的求偏导都是对我们的YHET减一。
来完成的,而我们前面刚讲到过y hi的T减一,是我们的T减一部的已知模型,所以这里所有的偏导值不管是一阶还是二阶,也是已知的,额,在DT补上都是已知的对吧,既然在TDT补上都是已知的。
所以这里的WG星也是最优解好吧,这个是三三个部分都是都是已知量嘛,所以这个地方也是最优解嗯,到此为止我们就解出了最优解的一个嗯,计算公式啊,看这一波有什么问题吗,其实有了损失函数求偏导。
让它等于零解出来就可以了,OK那我们继续往下,下面一项呢,其实又是一个比较不太好理解的地方啊,不是特别好理解的地方哪呢,我们继续往下看啊,为什么说不太好理解呢,看下面。
当我们有了这个关于W的最优的输出值以后啊,那么下一步我们把这个WG星啊,把它回带到目标函数里面去,你不是认为有WG和WG的平方吗,既然我们有这个式子了是吧,把这一项回带回来回来了,回到家回来以后呢。
稍加整理,我们就可以得到下面这个式子,有人说还挺复杂,其实也没什么复杂的啊,稍微整理一下,能约的约约能能合并的合并,最后得到下面这个式子,得到这个下面式子呢,就是说。
当我们代入每一个叶子节点G的最优分数啊,就是最优分数的时候,得到最优化目标的函数额,得到最优化目标函数值啊,得到最优化的目标函数值,这个最优化目标函数值呢,就下面这个式子就等于负的二分之一三分之一。
从一到达T分子是SAMI,属于IGGI的平方,分母是SAMI,属于IG hi加上一个兰姆达,加上一个伽马T嗯,这是我们在最优分数的意义上的,最优的目标函数值啊,最优的目标函数值。
也就是说啊我的函数值是这么个式子,这么个值啊,函数值是这么个值,而这个函数值的这个值,你会发现所有的值都是已知的,T是叶子节点的个数,我只需要查一下叶子有多少个节点,就可有多少个叶子就可以了。
这里的这个伽马呢是我们的这个参超参数,前面已经说到过,兰姆达呢也是超参数JI和HI1阶导数,二阶导数在DT减一轮的时候也是已知的了,所以这里的最优的目标函数值也是已知值。
那它会告诉我们一个什么样的一个结论,就是说啊,我们当在某一步过程当中学习了一个最优的呃,学习到一棵树以后,那么这棵树的最优的输出带回到我们的这个呃,回带回我们的目标函数以后,使得我们的函数。
目标函数可以得到这么一个结果,这个结果呢是不要忘了啊,不要忘了这个结果是所谓的目标函数值,简单一点说,他就是在不断的在计算损失的基础上,在数据集上进行累加的一个结果,不要忘了它是它的本质。
我们嘎啦嘎啦讨论了半天,不要忘了它到底这个目标函数到底是个什么,这个目标,其实最本质的还是在我们的实际输出和模型,输出上的损失的和呀,也就是说当我们在在某一刻,当我们按照前面的逻辑学习到了某一棵树以后。
这棵树里面的一阶导数,二阶导数兰姆达伽马T我们都知道了以后,我们发现了当前这棵树T的损失是这么一个值,L值,这是一个损失值啊,或者说是目标函数值是这样吧,那它有什么意义吗。
就这个目标函数值它它有什么意义吗,看下面看下面,我们知道数是怎么得到的,数是通过节点的分裂得到的对吧,我们你看我们当在刚才那个数的基础上,如果再分一层得到这么一个数,我们把它称之为T1撇吧,注意啊。
刚才是三个节点,刚才是三个节点,三个叶子节点现在呢是变成了四个叶子节点,两棵树结构上也不一样了,所以刚才那是T数,这是T1撇数,那么T数和T1撇说的不同,在于损失函数肯定也不一样了是吧。
刚才那是L这是L1撇了,不一样就在于模型结构发生了变化,由原来的三个叶子节点啊,由原来的三个叶子节点,现在变成了四个叶子节点,那这个时候叶子节点的不同,就在于原来的某一个叶子节点通过了什么。
通过了分裂啊,通过了分裂,构成了局部上发生了变化,那我们知道哈,当我们一旦知道了模型结构以后,这棵树被确定了,损失函数也就被确定了,那下面问题在于,我当前这个UT数向T减一数的,这个分裂过程当中。
你说我是分裂还是不分裂,是根据什么来的,分裂还是不分裂是根据什么来的,肯定是根据损失的大小来的,换句话说,如果我分裂之前的这个损失,要小于我分裂之后的损失,你说我还分裂,不分裂,我就不分裂了。
我就没必要嘛,因为分裂之后你反而损失大了,我还需要干这个工作吗,反过来,当分裂之后的损失小于分裂之前的损失以后,那我当然需要分裂,有同学就会有疑问啊,这个不分裂啊,损失还会更小吗,会这样。
因为我们前面讲到过,你分裂之后模型越来越越复杂,可能会出现所谓的什么过拟合现象,所以这个时候你会发现,我当前模型分裂和不分裂,都是需要根据损失函数来进行判断的,而我们又知道。
损失函数的最优解就放在这个地方,就明明白白的放在这个地方,那好了,你告诉我分裂和不分裂,我们是不是就可以通过分别计算,损失前和损失之后的这个啊,不是这个分裂前和分裂后的损失的大小,是不是就可以了。
这就是在GBDT上呃,在XGB上啊,x g boss上,我们进行模型分裂的一个依据啊,回忆一下啊,回忆一下我们的id3C4。5和cut数,分别采用的是信息增益,信息增益比和基尼指数来完成的。
特征分裂的依据啊,找到的特征分类依据,而在x g boost里面啊,它是通过定义损失函数的形式来分别比较,分裂之前和分裂之后损失函数的大小,作为我们当前决策树是否分裂的一个依据啊。
所以说这些是不一样的啊,这些是不一样的,那好了,有了这个依据以后,我们看具体怎么去做这个事情,怎么去做呢,怎么去做呢,先给这假设嗯嗯既然要分裂,那就先分裂吧,分裂之后看看结果不就完了吗,好了。
假设IL和IR分别为分裂后,左右节点的实例集,那先分裂再说是吧,那这样当然还要保证IL和I2,还是原数据集的左右子数是吧,那么分裂后损失函数的减少量,由下列式子来表示啊。
就减少了这个量由下面这个式子来表述,什么意思呢,注意这是我们分裂之前的原数的损失函数对吧,这是分裂之后左子树的,这是分裂之后右子树的啊,这是这是分裂之后左子数的啊,这是分裂之后右子树的。
这是原数的这个损失函数,那这个时候我们就像刚才我们策略是一样的嘛,左子树的损失加上右子树的损失,和原数的损失差值进行一个比较,我们的目标很显然是,就根据这个分裂依据来判断我这是减少量吗。
这是损失的减少量,这个损失还损失的减少量和零和进行比较,是不是就可以了,如果这个损失的减少量大于零,意味着我有我有我有必要分裂,因为你损失会越来越小嘛是吧,如果你损失的减少量小于零,那就别分裂了。
你还你还不如保持原来那种状态对吧,所以说啊这个时候差几boss,里面还有一个就是这是最,这也是我们另外一个不同的地方,和我们之前的决策树啊,它是由我们的损失函数的这种变化的不同,来决定啊。
作为依据来决定,是否是对当前的绝对数加以分裂,好吧好了,那这样的话我们看看算法其实很简单啊,就有了这个原理以后,模型就很简单,这个算法就很简单了,我们看下面分类查找,分类查找那个精确贪婪算法啊。
就我们的分类依据既然有了,我们就按照这个依据来进行查找就可以了,首先那输出呢就是输出最大的分裂位置啊,最大的分裂位置就像我们在在什么,在那个卡子数上来查找是一样的了啊,首先基尼指数为零啊,就是损失为零。
你这样可以理解,然后呢分别计算左子树和右子树的损失啊,左子树的一阶梯度和额,这个数的一阶梯度和二阶梯度啊,一阶梯度和二阶梯度,然后呢在所有可能的一到D,这是我们的特征维度啊,这是我们的特征维度。
在所有的特征上分别进行分裂的可能性的查找,我们前面讲到过啊,特角色时的生成就是在某一个特征上进行分裂,那我找哪个特征呢,我需要遍历所有的特征是吧,遍历所有的特征,在便利某每一个特征当中。
分别计算在当前特征左右指数啊,进行划分或者分裂以后的损失的一个计算,那这个时候呢首先在当前这个特征上,对左子树,右子树的这个一阶特征,二阶特征都需要清零,清零完了以后再对当前特征上看到了吗。
j stored i by x j k刚才我们说的是第K个特征,在我第K个特征的所有的取值,所有的数据上啊,所有的数据上进行一个先进行一个排序,由大到小或者由小到大无所谓,反正你排序就可以了。
这样的话呢把这个G挑出来啊,把这个G挑出来,以当前这个G作为我的分裂位置,作为可能的分裂位置,既然这这个挑出来以后,哎,看下面分别在以当前这个位置为分类位置,计算它的一阶梯度和二阶梯度。
然后把这个一阶梯度加到左子树里面去,加二阶梯度加到左子树里面去,那么这个时候右指数的一阶梯度和二阶梯度,就是由我们原数的,原数的一阶梯度和二阶梯度,分别减去左子树的一阶梯度和二阶梯度,来进行计算。
计算出来以后呢,比较比较一下,比较什么呢,就像刚才那个我分裂之后的损失,和分裂之前的损失的那个损失的减小量,比较一下,如果这个量减小到和之前的那个减小量最大的,那个,当然就是我需要找到的。
那么我需要尽可能的减少,可能都会使得损失减少,但是不同的特征上,不同的特征的位置上减少的这个量是不一样的,我当然是希望是找到使得这个减损失的减少量,最大的那个位置上。
所以我不断的啊不断的把这个位置进行记录,记录的同时呢,和新的位置的这个减少量进行一个选择,选择那个原味,原来的和新的更大的那个减少的量,作为我score里面的值,好吧,大家想一下,当内层循环。
当这层循环完成以后,是不是在特征K上所有的数据上,这个分裂损失减少量最大的那个就找到了,那么在外层循环上,既然每一个特征,既然一个特征上所有都找到了,那么在所有每一个特征上我都找到啊,都遍历一遍。
把那个最大的放到当前的score里面,那这个时候输出的就是我所有的特征上,所有的特征取值上,使得损失减少量最大的那个分裂值,其实说明一下哈,这个分裂值是多少,其实并没用对吧。
其实我们并不关心这个这个损失,减少量的最大值是多少,其实并没有,我们更关心的是什么,我们更关心的是这个减少量最大值,所对应的那个特征以及特征的位置输出,其实啊这个算法应该应该啊应该输出的是什么。
应该输出的是那个最优的特征K以及特征,K上的那个取值J,就和我们在cut树上输出的那个那个那个特征,以及特征的分裂位置是一样的,明白没问题吧,啊,那么这个时候我们有这个分裂特征,以及特征的分裂位置。
就可以不管我是用呃,再代入到我们那个决策树的生成过程里面去,就可以得到我们的决策树了,好吧,看这部分有什么问题,嗯哦我觉得回去以后和那个cut树的那个特征,以及特征的分类位置的那个那个那个算法啊。
你需要回去以后再咳一块再再看一下好吧,因为我们都额目的哦,算法目标其实就是在整个数据集上的,所有的特征以及特征的分裂,可能位置上查找一个最优的位置,那最优的位置的依据这个地方已经给出来了。
所以说你会发现前面这些工作啊,这是在整棵树上完成,一阶梯度和二阶梯度的计算,然后呢这个K从一到D啊,从E到D就是所有的特征的遍历啊,所有特征的便利,你不是输入,是一个是一个是一个多维度的一个向量吗。
这是每一个维度上都可以,都可能作为我的特征分类位置嗯,比如说前面我们讲到过那个例子,贷款那个例子是吧,年龄额呃,年龄还有什么,这个是否有房子,是否有工作,还有信贷情况,这不都是每一个都有特征吗。
每一个特征我都不需要进行便利,每一个特征里面的每一个取值,比如说咳我以这个年龄为例,年龄分青年中年老年,那么年龄里面的青年中年老年,我都需要查找一下这个值,就这个这个减少量是不是最大,建立完了以后。
我再拿着这个最在当前这个特征啊,当前这个年龄特征里面的,额损失的减少量的最大值和,比如下一个特征是那个有没有工作啊,工作这个特征里面无非就是有工作没工作吗,我在便利一下这个有是否有工作,有工作没工作。
这两个职上所有这个损失函数的,额损失减少量的最大值再比较一下,那么在年龄里面的这个损失减少量的最大值和,是否有工作里面的这个年龄的这个这个工作的,这个损失的减少量最大值最大的那一个。
当我们完成了所有在特征上以及特征的,可能取值上的这种减少,损失减少量的最大值的计算的时候,那个位置,不就可以作为我当前的一个分裂位置了吗,比如说比如说啊你这个年龄啊,老的这个中年啊。
中年这个年龄上的这个损失的减少量是最大的,那我就以当前年龄的中年为例,把当前这个数进行划分就可以了,这是关于这个特征分裂部分,那回过头来看看我们关于X级boss的这一部分啊,前面就不看了啊。
从这开始看嗯,回去以后你需要好好的理解一下这个,我觉得这个呢别看很多的同学啊,就是啊看着简单可能就pass过去了啊,是这么简单吗,他很显然简简单有几,它简单的这个简单有他的简单的道理啊。
每一次面试的时候,我经常的会问一些同学对吧,你比如说你这里为什么是FX等于WQX,好多同学他就这么定义的啊,我说定义是这样定义的,你它的原因是什么,就不是那么的清楚是吧,所以说你很显然他的作用。
在后面的简化过程当中是很重要的是吧,这个地方你需要自己再看看嗯,再下一个呢是这是正则化项加入到了,E的节点和W的输出啊,这个作为他的正能方向,这个是的改进之一啊,他的改进之一,这个算是需要看一下的。
这两第二点下面一点呢就是这些都展开啊,这个时候刚才有同学有疑问,这个地方没有什么技巧性啊,就是把公式一个一个仔细的对应清楚,就可以了啊,就这个还不清楚,那只能是看公式就看就可以了,好吧嗯。
这是正话第二个正则化项的地方啊,第三个就在这啊,当我们有了这个二阶TT泰勒展开以后,这个sum求和这两个也是哈,有很多同学就划水,就就是划水,我说这个你从这一步怎么怎么做到这一步呢。
有同学说不就这么得到吗,我说怎么就就就得到了,我说特别是啊,其实最核心的就是在这个地方啊,就是关于当前每一个叶子上的,下标集合的这个定义啊,所以再深入的说一下啊,如果有兴趣的同学可以看一下陈天琪老师。
他做这个工作时候本身的那篇论文啊,那篇论文里面其实还是关于这个播放,还是说的很清楚的啊,只不过还是需要有点改进而已啊,这是这个地方的一个理解啊,第三个地方呢就这啊就是这个损失,就是这个分类依据的问题啊。
他其实是通过我的有的最优损失以后,我带回到原损失函数,得到了一个损失的一个额表达式,既然我这个损失的表达式都已经有了,我分裂还是不分裂,通过损失的大小的比较,就可以一目了然的得到这个结论吗。
嗯只不过这个时候麻烦就在于,我需要在所有特征和特征取值上进行便利,那便利就便利呗,无非就是遍历的过程嘛,仔细一点控制一下左右指数的位置就可以了,先上来求一个整的,然后把左数的清零循环遍历的过程当中。
不断的求出GI和HI加到左边去,那右边的不就是这整个的减去左边的,不就得到了右边的吗,嗯好了,原理部分就是这些内容,嗯那下面我们看看应用啊,这个因为这一部分呢,我预期好像在后面的课程里面没有过多介绍。
所以简单的和大家一块过一遍好吧,就是参数就是调参嘛,参数呢我们大学有这么三类,就通用参数提升器,参数和学习参数啊,这个看一下通用参数部分呢,嗯最重要的其实就是booster的选择。
就是我们的这个提升器啊,就是我们的这个booster,这个提升器的这个选择的问题呃,有两种选择,一种是数,一种是这个线性模型啊,线性模型这两个呢,一般我们预期数模型的性能,要比线性模型的性能更好一些。
当然这和你的数据集也密切相关啊,这个嗯运算性能其实和数据集是密切相关的,这个你可以做一个参数选择,当然默认的是以数模型作为我们的基础模型,我记得新的版本好像又增加了一个那个booster,忘了啊。
你有兴趣的同学可以再查一下他的API啊,这个地方多了一个啊,下面这两个呢回去我自己看一下,这个没什么特别的啊,呃第二部分呢就是关于提升器的参数啊,提升器的参数首先是个艾塔,艾塔呢这个是个学习率啊。
艾塔是学习率,就是我们在进行F等于F加上L这个呃,就是是L对F的那个偏导的计算过程,艾特在这啊,艾特在这个地方就是他的学习率嘛,然后呢这个值有了以后,下面是关于最小的叶子节点的权重啊。
就是最小叶子节点样本权重和,这不是那个权重啊,这个那个权重是,其实是我们叶子节点里面的输出值的和啊,不是不是大家理解的那个权重,就是不是我们那个那些什么贝塔呀,不是那个东西。
其实这里就是你可以认为就是W的和,就是那个sum w啊,这个值的和,就我们在叶子节点里面包含了若干个样本,这个样本的和要尽可能的小,啊所以是最小叶子节点样本样本的和啊,你别加权重了,就是样本和就可以了。
用来控制过拟合的啊,这个值不能太特别大,太大了,就陷入这个欠拟合现象,然后呢除了这个最小的叶子节点的样本和呢,还有一个就是树的最大深度啊,树的最大深度我们前面讲到过,书的最大深度。
也表征了当前模型的复杂程度,另外一个呢就是最大的叶子节点的个数,就是那个大T这两个参数啊,这两个参数其实是密切相关的,当我们在二叉树当中,我们知道叶子节点的就是树的深度和。
叶子节点的个数其实是有数值关系的对吧,当你确定了其中一个以后,另外一个其实也就被确定了啊,所以这两个哈确定一个,另外一个就确定了,我们一般习惯上使用的是叶子节点的个数啊,当然深度也也可以吧,这个随便吧。
另外一个就是伽马,就是我们前边两个超算里面的伽马,另外一个兰姆达的后面应该是啊,其他的大家自己看一下就可以了,这是那个兰姆达啊,学习任务的参数呢,其实呃,XJB还是提供了很丰富的,这种学习任务的参数。
比如说他可以处理所谓的二二分类问题,也可以处理所谓的多分类问题,而且可以处理带概率类别的多分类问题啊,这个都需要根据你的任务类型的不同,来加以选择啊,多量方式呢我们除了平方损失之外,还有很多其他的损失。
但是我们更多的还是采用了,所谓的平方损失的形式啊,这个最一般实用,那么下面呢还举了一个例子啊,这个例子呢回去以后大家呢可以额自己跑一遍,这个地方介绍一点啊,说明一点。
有些嗯芯片可能会出现一些在x g boost上的,一些某些老版本上会出现报错,这个时候你可以把这个开关量打开啊,把这个开关量打开,编译就可能会通过,但是有些那个特别是英特尔芯片。
会出现所谓的二次加载问题啊,这当然这个我们也不需要特别考套考虑了啊,就是某些版本的芯片和某些版本的差距boost,而是不兼容的,试一下这个参数可能会解决你的问题,那么数据集呢这个地方有这么一个数据集。
然后呢他有九列数据额,想想是九列是十列啊,呃十列数据前九列是X,最后一列是标签啊,对数据进行切切分啊,训练集测试集的一个切分,切分完了以后呢,我们可以大体的跑一下这个模型,在不调参的基础上。
我们直接对他一个进行一个学习,学习之后呢,你会发现他的学习率呢,已经达到了这个正确率啊,已经达到了77。95%啊,这已经性能上不调参就已经马马虎虎凑合了呃,看下预测的结果呢,无非就是因为12分类啊。
所以直接给出了标签这个分类结果值,但是呢给大家说一下,更建议大家使用的呢并不是直接输出零一值啊,更建议大家使用的还是这个,带着概率输出的预测结果啊,带着概率输出的预测结果,所以说你看下面这种情况啊。
他分别给出的是当,不同的这个标签取值的时候,它对应的一个概率值啊,所以说你会发现比较一下啊,比较一下,这是第一个啊,第一个返回了一个零,然后呢这个时候呢你会发现,返回零呢其实其实啊按照我们的概率输出。
他是95。45%上是返回一个零标签,还有0。04%上,可能会要返回一个一标签啊,这个呢是更对我们的结果的这个呃解释哈,可能更有意义一些,比如说再举一个例子,你看这个值。
你看这个如果我们只通过零幺的输出呢,我们知道它输出的是个标签一,但是呢通过概率分析呢,我们会发现这个标签一呢其实并不可靠,因为它即使是标签一,也仅仅是在58。8%上返回的是一,换句话说他有40%一点。
接近41。2%是需要输出零的,所以说这个标签的输出就很有啊,很有讨论的空间,所以你像这种结果的解释性,会为我们的这个工作上带来很大的帮助是吧,另外呢还可以输出每一个参数的重要性啊。
就是每一个特征的重要性啊,不是每一个参数,每一个特征的重要性啊,就像刚才那个例子里面,第七列的数据的那个特征啊,要比其他列的特征的重要性更大一些啊,这个了解一下就可以。
并且呢还可以把当前决策树的形状绘制出来啊,这是嗯都可以试一下吧,另外呢就是模型的调优啊,后面我们会讲到,比如网格调优啊,网格调优呢就是我们把所有的参数的取值空间,做一个大致的一个生成啊。
根据我的不同的取值空间学习率啊,最大深度啊生成不同的参数空间,在这个参数空间当中啊,我遍历整个参数空间啊,就是网格搜索,其实就是在有限的空间里面进行便利哈,当这个时候我们再看一下结果的时候。
已经性能上有提升了81。1%了啊,咳咳咳咳,后面呢在一个新的数据集上,也有类似的一个使用额,下面呢可能就是啊,另外一个呢是关于这个x boost和LGBM呃,let gbm呢是另外一个包啊。
或者另外一个库,这个库呢是微软下面的一个工作,也是非常好啊,就是你看一下啊,这是我们的差距boss的这个分类啊,下面一个是我们的letter g b m,那个JBM呢是微软的一个工作啊。
这个工作呢和这个x g boost呢是呃非常相近的,两个不同的工作啊,原理上都非常的相近,但是工程上会做到大量的改进,那么我们下面这个例子呢,是根据一个数据集上的呃,性能上的对比啊。
从这个速度上和准确度上,我们都进行了两个不同的包的一个对比,大家可以看到啊,其实在特定某些特定情况之下,这个来自GBM,要比这个x g boost的性能还要好一些,不管是精度还是速度啊,也就是说啊。
今天我们虽然讲的是这个是这个x g boost,但是在工作当中哈,你可以使用一下let gbm,可能会出现一些更好的效果,他俩非常类似哈,都可以给出特征的排序以及不同的数形结构啊。
let s gbm也给出了一个例子,有兴趣的同学都可以看一下,好嗯,嗯这是我们今天的主要内容,看看大家还有什么问题吗,Ok,还是那样,就是我会把这个用到的那份额扩展材料啊,也给大家发到咱们的课程群里啊。
作为一个补充啊,今天的内容呢,如果还有什么问题及时在群里提出来啊,我相信一定会存在不少问题啊,有什么问题我们再集中的进行讨论,一定是通过自己的分析和就是思考啊,就是你一定先有自己的一个理解啊。
你的理解是什么,然后你的理解和资料上,哪个地方是统一不起来的,嗯我们把问题聚焦在哪儿啊,千万不要问说哪有问题啊,这都有问题,这个都有问题,就聚焦不不到具体位置上了,是吧,哦嗯嗯想起了嗯,这里有个问题啊。
就是我们是以刚才看到个标签外了啊,我看到那个标签Y啊,看看他标签外在哪啊,这个地方呢我们的原理部分的介绍过程当中,是以回归问题哈,这个是以回归问题作为X1boss的模型的输出。
所以你会发现这里YI是属于R的啊,YI是属于R的,很显然是个回归问题,那有同学马上就会问tt boost,如果是个回归问题的这个模型的话,那能不能解决分类问题是可以的,那怎么解决呃。
这个分类问题这个问题其实我觉得到现在啊,大家应该嗯其实一个一个通用的方法啊,就是我们怎么能够把回归问题的模型,改造成这个分类问题的模型,如果我知道当前模型是个回归输出,那这个时候我马上就可以想象一下。
你那个线性回归是怎么改成那个逻辑回归的,还有没有同学有印象线性回归输出的是个R,然后呢逻辑回归输出的是个零幺,这不是个分类了吗,他是怎么做的,无非就是在线性回归的基础上,套了一个西格玛的函数吗,对吧。
那么同样我们在tag boss的基础上,他回归输出的基础上,你外边再套一层西格末尾的函数,就可以把它映射成二分类里面去了,如果你把它套成soft max,就把它套,就把它映射到多多分类里面去了。
这就解释了刚才为什么在那个插件,boss那个包里面,它是个分类问题啊,他这个分类问题有同学这个地方会有困惑哈,你讲原理的时候是个回归,它为什么是个最后是个分类呢,就是因为啊。
其实这个你只要在回归的基础上,加上一个不同的分类函数,就可以压缩到不同的离散空间里面去,来完成我们的分类问题了,好吧嗯,那好我们今天的内容就到这,有什么问题的话,我们及时在课程群里讨论好吧。
【七月在线】机器学习就业训练营16期 - P9:在线直播:9-HMM、CRF模型要点_ev - IT自学网100 - BV1Z9T5ewEKL
那么今天是咱们这个阶段的最后一次课程内容,按照这个课表上的安排,我们今天主要介绍的是概率图模型当中的,一马可夫模型,条件随机场模型呢这个呃我们不做过多的介绍,后续会把一些材料发给大家。
我们重点还是介绍这个一马可夫模型,那么在介绍一马可夫模型当中啊,通过我们这个脉络图可以看到它的前序工作呢,可能会体现在朴素贝叶斯模型当中,这在我们上一次介绍朴素贝叶斯的时候,也说明了。
主要是集中在其中的一些逻辑,计算的这个规则当中啊,概率逻辑计算的一些规则当中啊,这是一点,另外一点呢就是在EMC模型的计算里面,需要使用到em算法,就是期望最大算法。
所以呢今天会把这个em算法做一个补充,那这样的话呢,我们就可以通过朴素贝叶斯当中所熟悉的啊,概率计算以及E算法当中所提供的优化过程,来得到hmm1mark副模型里面的,一些重要性的结论,好吧。
这是我们今天的主要内容,如果没有问题的话,我们就开始我们的IMAC模型,通过前面的我们的介绍啊,大家也能够体会得到in Mark模型啊,需要进行大量的概率计算啊,它也是属于一类所谓的那个概率图模型当中。
非常重要的组成,那么IMAX模型的主要的工作啊,先说明一下,就是这个模型它能解决一类什么样的问题,它主要解决的是一类,称之为是序列标注的任务啊,或者叫做序列到序列的任务,我们把它称之为是不用这个打开啊。
我们把它称之为是这个从序列呃,到序列的任务啊,特别是一类在自然语言处理当中,非常重要的一类任务,再举一个例子啊,比如说啊我们有一个自然语句啊,比如说在这个在这里啊,我们就以以马可夫模型啊。
这么一个算是一个句子为例,当我们有了这么一个语料以后,我们就得到了一个sequence啊,一个序列,然后呢,我们希望得到当前这个序列,向另外一个序列的一个映射,比如说啊我们要在这个语料库的基础上。
要进行一个磁性的标注啊,什么叫磁性的标注啊,就是我需要看一下当前这个序列里面,每一个单词的词性是什么,因为我们知道词性有名词,动词,形容词,副词,介词等等各种不同的词性是吧。
那在LP里面有一类任务就是需要考察一下,当我们拿到一个语料的时候,每一个单词的词性到底是什么啊,这是一类啊标准的序列到序列的标注任务,那比如说举一个例子,比如一马尔可夫模型,比如说我们现在已经拿到了。
当前这个语调是由两个单词所组成的,第一个单词那就是银马可夫,另外一个单词呢是模型,那么当前有两个单词所组成的这个呃序列,那么我们希望得到的是它们所对应的,词性的一个序列,当然我们知道你比如说一马可夫。
我们认为它也是一个名词是吧,然后呢模型呢当然也是一个名词,那这样的话你会发现,尼玛跑夫模型这个序列所对应的另外一个序列,就是名词名词序列,当然这只是举一个例子,那么在这类任务当中,大家会发现。
这两个序列有一个明显的对应关系啊,序列和序列之间有明显的对应关系,序列当中各个单词之间也有明显的对应关系,因为我们知道啊,我们学一些语法规则啊,会告诉我们,比如说名词和名词是可以并列出现的是吧。
形容词和形容词也是可以并列出现的,动词和名词也是可以出现的,但是一般很少我们出现,动词后面加形容词的情况,当然这是这些信息啊,完全我们是可以通过我们拿到的语料库啊,比如说你拿到了NN多篇文章是吧。
这N多篇文章当中,我们通过一些统计和概率计算,可以把这些哈序列到序列的这种规则,以及磁性到磁性的规则,都可以通过模型进行学习出来,而这类模型啊,我们都把它称之为是所谓的概率图模型啊。
其中啊以马可夫模型就是这类模型当中的一种,好吧,所以说啊这个解决什么问题,我们先首先有一个认识啊,它能够解决的啊,就是序列到序列的一个映射任务啊,那么多说一句哈。
比如这个sequence to sequence任务啊,嗯除了以马可夫模型,cf模型这种概率图模型可以很好的解决之外,嗯现在还越来越多的,我们使用到的是深度学习模型里面。
你比如说像这个循环神经网络这一大类啊,一大类模型来进行解决啊,这是一个方向,另外呢现在在呃这个深度学习领域,有所谓的注意力机制引入以后的,transformer1类的模型啊。
这类模型已经非常优秀的解决了这类sequence,to sequence问题啊,这就说明一下,那么但是呢在机器学习领域,解决这类问题的主要模型,还是像比如说像野马可夫模型和CR模型啊。
这一类概率图模型为主要的代表,当然呢呃其实随着学习的深入啊,特别后面大家掌握了这个深度学习模型以后,大家会发现当处理一些任务的时候,深度学习模型和呃这种概率图模型的结合。
也在某些问题上取得了非常不错的成绩啊,就像刚才我们讲到的啊,比如说像那个注意力机制啊,各种各样的transformer加上cf模型啊,或者说加上hmm模型,就在一些具体的任务当中取得了很好的成绩。
当然那是后话了,那么回到我们这个概率图模型当中来,在今后的复杂的模型当中,其中以马可夫模型,或者说CRF模型,很有可能会作为更复杂模型的一部分出现啊,这个需要说明一下。
不是说哈这个概率图模型就没有用武之地了啊,有了深深度学习模型以后,不是这样的啊,深度模型,深度学习模型和像概率图模型之间的一种融合,在特定任务上,还是当前的一些范式啊,就是标准的任务解决方案啊。
这个多说一点,那么回到IMAX模型,我们看一下刚才已经介绍了1max模型,能够解决这一系列的任务,那么今天呢我们需要聚焦一下,我们今天的这个模型的介绍的主要内容,包括这几个方面,第一个方面就是模型定义。
到底什么是一个一码和模型嗯,这个非常重要啊,这个包括后面的cf,很多的时候后面的问题的解决,其实归根到核心矛盾上,就是你对整个问题的定义是不是能够理解,换句话说你对这个模型的这个定义认识的程度。
直接影响到了你对后面问题的解决的程度,好吧,所以第一个任务就是到底HM,hmm的定义是什么啊,这是非常重要的内容,那么在此基础上,我们会解决一马可夫模型所面临的三个问题。
第一个问题呢我们把它称之为概率计算啊,第二个呢是所谓的学习算法,第三个是预测算法,后面我们逐一啊作为一个介绍,那好了,下面我们先开始第一个问题,就是关于模型定义的问题,一马可夫模型的定义呢。
首先介绍两个集合啊,首先介绍两个集合,第一个集合呢我们把它称之为状态集合啊,状态集合,另外一个集合呢我们把它称之为是观测集合,这两个集合其实啊就像刚才我们所介绍的,因为我们要介绍两个sequence。
就两个序列,那么这两个序列有哪些符号组成,或者有哪些状态组成,我们必须要先给出一个说明,那么这两个集合分别对应了刚才那两个序列啊,呃的取值,你这样可以认为啊,第一个序列呢我们把它称之为状态集合啊。
状态集合由状态集合中的元素组成,其中的一个序列由观测集合中的元素组成,另外一个序列啊,就是其中的一个序列,你就在状态集合里面找元素,另外一个序列,你就在这个观测集合里面找元素就可以了。
那么具体定义形式呢,我们把状态集合定义为Q集合啊,Q集合Q集合里面包含若干个状态啊,若干个状态分别是Q1Q2,一直到QN啊,N个状态,那么观测集合呢我们用V来表示,分别为V1V2,一直到VM啊。
M中观测啊,M种观测,注意再强调一下,这两个都称之为是集合,集合里面的元素是没有顺序的啊,集合里面的元素是没有顺序的,它仅作为后续两个序列的组成啊,但是具体谁先谁后,在这两个集合里面并没有定义好吧。
它只是作为一个数据集出现啊,你从这里边找元素就可以了,那么下面呢,我们再介绍所谓的状态序列和所谓的观测序列,注意这是两个所谓的序列,就是对应了刚才所说的两个sequence,其中的一个sequence。
我们把它称之为是状态序列啊,状态序列状态序列呢我们用I来表示啊,用I来表示,其中这个序列定义为I1I2,I小T1直到I大TI大T那么再强调一下,因为它是序列序列是有顺序的,换句话说。
序列I当中的各个状态,I1I2取决于状态集合当中的各个元素,但是更重要的是,状态序列当中的这些状态具有前后关系,换句话说,它的下标表明了当前这个状态,在状态序列当中的位置信息。
I1就是出现在第一个位置上,I2是第二个位置上依次类推,而每一个状态序列当中的状态,取决于状态集合当中的某一个元素啊,我相信这个啊能够能够严格的区分开好吧,那么另外一个序列呢,我们把它称之为观测序列啊。
观测序列,观测序列我们用O来表示啊,用O来表示O序列内容分别为O1O2,一直到O小TO大TO大T,同样观测序列也是个序列,序列当中的每一个,代表的是一个具体的观测的位置,O一O2OT一直到O大T。
其中的每一个观测都取决于我们的观测集合啊,取决于观测集合啊,这是两个集合和两个序列的定义哈,两个集合两个序列的定义,那么有了这两个集合和两个,这个观测的定义以后呢,下面我们需要把这些信息啊。
通过一种图示化的方式把它表示出来啊,表示出来怎么表示呢,就是你画个图,这是非常重要的一种,这个算是一种技巧吧,就是后面哈我们所碰到的模型会越来越复杂啊,这个你把它这个用图示的形式。
把这些信息能够充分地表示出来,非常有利于你对这些问题的一个理解和解决,好吧,那么我们看一下,现在我们有手头上有两个序列,第一个序列就是I序列,其中的序列由I1I2点点一直到小T点点,一直到I大T组成。
这个时候呢我们一般,圆圈上表示这个这个序列,重点是让序列是有前后顺序的,所以呢我们用这种带箭头的序列来表示,我们的这个状态序列,同样我们还有一个所谓的公序列观测序列,O1OR点点一个O小T。
然后是O大T,这个时候呢很很很自然啊,同学们就会有一个想法啊,上面这个状态序列是这样沿着这个箭头组成,那你是不是观测序列也是这样的,这个地方就需要注意的,以马可夫模型有这么一个定义哈。
有如下这么一个规定,状态序列当中的每一个状态啊,I1I二一直都I打T啊,每一个状态直接决定它所对应的观测啊,也就是说啊观测虽然也是一个序列啊,观测虽然也是个序列,但是决定观测序列的。
并不是由序列本身来决定的,而是由它所对应的状态来做决定的,回想一下刚才那个词性标注的那个任务,我们知道以马可夫模型,这两个单词所组成的状态序列对吧,然后呢我们的名词名词也组成了一个序列,那么很显然。
我们可以认为是单词决定了我们的单词的性质,是吧,所以这个时候我们一般情况下是这样的来画哈,能明白什么意思吧,所以说啊这个图示啊,必须要把它的含义呢够明晰的表示清楚才可以,当我们有了这个图以后啊。
后面所有的计算啊,大家都可以认为是在这个图示当中来完成的啊,就是在这个图上来计算就可以了啊,不要跑到别的地方去了,当然这个图示其实还是信息很丰富的,我们看看还有哪些信息需要注意,第一个信息哈。
就是你会发现在状态序列当中,I1这个状态跳转到I2,这个状态依次向后跳转,那么跳转从I1跳转到I2,从I2跳转到I3,那么这个跳转的概率是多少,这个图里面还没有表示啊,这是第一点,那么第二点。
从IE这个状态能够跳转到它所对应的观测,由每一个状态都可以跳转到它所对应的观测,那么从状态向观测的跳转的概率,也现在还不清楚啊,还不知道,但事实上大家可以看到,一旦我能够获取到从状态到状态。
或者是状态到观测的这个概率值以后,我当前这个in马可夫模型,其实就可以进行一个生成过程了,怎么生成,首先我从状态I1开始先生成它所对应的观测,然后再从I1生成它所对应的下一个状态I2。
再由I2生成它所对应的观测go2依次向下,最后直到IT这个状态生成,它所对应的什么观测,gt整个的一马可夫模型其实就可以结束生成了,也就是说啊它是这样形成的,从状态到观测,从状态到状态,再从状态到观测。
再从状态到状态,然后依次向下生成最后的一门考试模型,那么在这个过程当中非常重要的,刚才介绍的两点,就是状态到状态之间的概率是多少,你需要把它表示出来,然后呢从状态到所对应的观测的概率是多少。
也必须要明确的表示出来,那么下面我们就需要给出两个非常重要的信息,第一个信息呢我们把它称之为是状态转移矩阵,状态转移矩阵首先明确一下它是一个矩阵,当前这个状态转移矩阵当中,记录了任意两个时刻之间的状态。
转移的规则是多少啊,状态转移的规则是什么,那么这个时候呢就有个问题,那么为什么我们使用一个矩阵结构来描述,任意两个状态之间的转移规则,如果是个矩阵结构的话,那这个矩阵它的形状是什么样的啊,第三个问题。
当我们确定了当前这个矩阵的形状以后,每个矩阵当中的每一个元素的值又是多少啊,这是一系列的问题,那么回到刚才关于状态转移矩阵的这个概念,或者含义,状态转移矩阵就像刚才我们所说的。
他要记录的是任意两个状态之间的转移关系,而我们清楚地知道,状态的可能的取值无非就是Q1,一直到QN的状态,也就是说这里的I1I二一直到I大T,我是大T个时刻,每一个时刻都可以取。
直到我们状态集合当中的某一个状态,而我们这个状态转移矩阵又是用来记录,任意两个状态之间的转移情况的话,那么很显然我们可以用矩阵这种结构啊,来加以表示,那么下面这个问题就是这个矩阵的结构。
或者说当前这个矩阵,它是一个几行几列的一个矩阵,我相信大家是通过一个分析啊,或者简单的思考是可以得到结论的,再重复一下问题啊,就是我们现在有N个状态,好状态,有N种可能的取值,那么这N种可能的取值呢。
他们之间的任意两个之间的跳转关系,需要通过一个所谓的状态转移矩阵,来进行一个描述,那这个时候这个状态转移矩阵啊,这个矩阵几行几列,一共有N种状态啊,任意两个之间可以进行跳转。
那这个矩阵应该是一个N乘N的矩阵对吧,N乘N的矩阵,这一点再加以说明,就是后面不管是呃这个什么样的一个呃模型啊,当他使用所谓的向量,使用所谓的呃矩阵,甚至后面我们在使用所谓的张量。
来表示这个数据结构的时候,那么首先你需要确定的一点是,当前这个数据结构的形状啊,如果是个矩阵,你需要明确的给出当前矩阵是个几行几列的,当然这个不能靠蒙啊,不能靠猜测,一定要根据当前这个数据结构所需要。
处理的任务来决定,因为当前的状态转移矩阵是用来记录,任意两个状态之间的转移规则的,而我们一共有大N种状态,所以我们用N乘N的矩阵就可以存储了,那么有了这个矩阵以后,我们更希望得到的是每一个元素的值啊。
就说任意两个状态之间的转移规则,到底是怎么来加以描述的,那么很显然,其中就是关于AIG的一个定义对吧,AIG的定义,看一下AIP的含义哈,AIJ的含义,它说明的是在T时刻。
或者说在某一个时刻处于状态QI的条件下,在T加一时刻转移到状态QG的概率,比如说现在我们看一下这里,这是T时刻,那么很显然,下一个时刻一定是I等于T加一时刻是吧,那我们知道从T是从it是可以跳转到T。
加一的啊,从IT是可以跳转到IT加一的,换句话说啊,我是可以从一个时刻跳转到他的下一个时刻的,那这个时候就是所谓的状态之间的一个转移,或者跳转,那这个信息就要被记录到我们的状态,转移矩阵里面。
而状态转移矩阵啊,它其中的每一个取值都说明了是在T时刻,或者在某一个时刻处于状态,QYT等于QY,在下一个时刻就是T加一时刻,状态等于QG状态T加一等于QJ概率,那么很显然这是一个什么概率。
这是一个条件概率啊,在上一个时刻在提时刻等于QY的条件下,在T加一时刻等于状态QJ的概率,所以看一下哈,你会发现AIJ其实是一个概率值,而是一个什么,而是一个条件概率,他说的是IT等于QI的条件下。
IT加一等于QJ的概率,从QI跳转到QG是AIJ,这是关于状态转移矩阵的一个定义啊,状态转移矩阵的定义,当这里的I从一到N进行取值的时候,这里这样也是从从一到N啊,I从一到N,然后呢这也从一到N。
那么大家可以看到,当两个循环结束以后,这里的AIJ就把所有的状态,而这些信息就都记录到了,我们这个状态转移矩阵A里面去了,关于这一部分,看看有什么问题吧,那么大家看看啊,我再举一个例子啊。
比如说有同学会对这个T啊有困惑,就是这个T你刚才说的是在IT这个时刻,是不是在T这个时刻等于QI,在T加一这个时刻等于QG的这个状态转移,其他时刻呢注意啊,这里的T啊,这里的T代表的不是一个具体的时刻。
而是我们在状态序列当中的任意一个时刻,比如说T是不是可以等于1T如果等于一,就变成了ZI1时刻等于QI,那么在I11,就是I2时刻等于QG的状态转移的概率值,而这个同样我们是通过你看啊。
它和具体的时刻其实并没有关系,你看看这个表达式里面和具体的时刻,T其实并没有关系,这里的T的强调的仅仅是前后关系,就是如果我在前一个时刻是QI,下一个是课时QG,那么这个跳转关系就用AIG来表示。
至于这里的T是12345678,一直到大T的哪一个时刻,其实并没有限制,能明白什么意思吧,就是这里的T和T加一仅仅说明的是前后关系,而不是一个具体的位置,那么这种前后关系啊,你想象一下这种前后关系。
这里有个一二是前后关系,二三也是前后关系,TT加一是个前后关系,到大T减1T是不是也是个前后关系啊,它描述的就是这种前后关系的这种跳转概率啊,用这个AIG来表示好吧,这是状态转移矩阵的一个介绍。
那么如果有状态状态之间是可以转移的话,那么很显然,状态和观测之间也是可以进行跳转或者转移的,那这个信息我们把它称之为是观测概率矩阵啊,关于观测的概率矩阵,那么通过刚才那个状态转移矩阵,A的一个定义啊。
我们应该能够啊,能够想象得到这里的观测概率矩阵,很显然他也是个矩阵是吧,同样回答以上刚才两个问题,第一个问题这个矩阵的形状是长什么样,第二个这个矩阵里面的取值是怎么定义的,那么再重再重复一遍。
观测概率矩阵说的是由状态到观测的跳转关系,他需要记录的是任意一个状态,跳转到任意一个观测上啊,这个概率信息是多少,那么这个时候大家想一下,状态呢是有N种状态可能取值,观测呢是有M个观测可以取值。
那这样的话从N种状态到M种观测,就需要一个N行M列的矩阵来加A表示啊,所以说啊,这个地方观测概率矩阵是一个N乘M的矩阵啊,N乘M的矩阵,这是第一点,第二点就是说的是由状态向观测进行跳转。
而我们选显而易见的,可以看到状态和观测之间的时序关系,是一一对应的时序关系啊,就是我在第一个时刻的状态,跳转到第一个时刻的观测,在第二个时刻的状态跳转到第二个时刻的观测。
同样在DT时刻的状态跳转到DT时刻的观测,所以这里的每一个元素定义的是,在T时刻处于状态QI的条件下生成,同样是在T时刻观测为VK的概率,所以啊你看一下它的定义形式是,在T时刻状态是QG的条件下。
同样是在T时刻观测,是VK的条件概率被定义为BJK,那么同样这里的T啊,这里的T也不是一个确切的时刻,他呢也是在我们整个的序列上可以任意取值啊,如果T是第一个时刻。
那这里说的就是在第一个时刻等于Q2QG,同样在第一个时刻等于VK的条件概率,等于BKBJK,当然这个T可以从序列上任意一个时刻上取值,那么K呢代表的是我们的观测,所以从一到M这对应的是我们的状态。
所以是从一到大N好吧,那这样的话我们可以看到啊,上面从状态到状态,我们是用AIJ来表示,由状态到观测,我们是用BJK来表示,那么这个时候我们就可以按照,刚才我们所说的那个生成策略。
来生成当前的状态序列和观测序列了是吧,UI1生成勾一,那么这个是根据我们刚才所定义的集合B啊,这个观测概率矩阵来生成的,我就找一下在当前为I1的条件之下,生成O1的那个最大的概率值是多少,是谁。
我就生成那个概率最大的对应的OE同样UI1,我再根据集合B啊,查一下生成I2那个概率最大的啊,那个I2状态到底是谁,不就生成那个状态,同样依次向下生成,当前这个一马可夫模型里面。
所有的状态以及观测也就都生成了,嗯好像是这样是吧,但是呢又好像不是哪有问题呢,换句话说这一部分还有什么问题吗,看看,状态集合和观测集合里存的都是什么数据啊,这个需要根据我们这个具体的问题来进行。
具体的这个定义,比如说刚才我们提到过那个磁性啊,刚才我们提到过那个词性标注的那个任务是吧,如果我们认为语料是我们的状态集合的话啊,如果我们认为我们的语料是状态集合的话,那么状态集合里面的每一种状态。
就是我们语料库里面的每一个单词,如果我们认为这里的磁性啊,是作为我们的我们的观测集合的话,那么这个时候的观测集合里面的每一个元素,就是我们每一种可能取值的词性动词,名词形容词啊。
这是你需要根据特定的任务来决定的,那我们继续按照刚才所说的,好像没有问题了,但是有一个很麻烦的是关于那个I1,就是第一个时刻的那个状态啊,啊我们说是从I1生成它所对应的O1。
UI1生成它所对应的那个I2是吧,UI2再生成O2等等等等,但是他这个IE由谁来生成,就像我们这个比较熟悉的那个多米诺骨牌,一样是吧,我们知道后面这一长,这后面这些串生成啊。
都是类似于我们那个多米诺骨牌,你只要退到了第一个后面,就以此生成就可以了,但问题是这第一个骨牌由谁来生成,并没有在模型里面加以介绍是吧,那么下面我们就需要处理这个问题,那么我们再回想一下。
既然是在第一个时刻啊,第一个生成第一个时刻的状态,而我们又知道状态的取值可能性,是刚才的那个Q集合,而我们知道在Q集合里面有Q1点点,一直到QN种状态可供选择,那现在问题是。
我在第一个时刻到底去哪一个状态呢,那这个时候我们很显然,每一种状态可能都有可能出现,所以下面我们需要设计一种数据结构,用来存储生成第一个时刻的,所有可能的状态的这么一个呃概率值,那这个时候大家想一下。
用的是一个什么样的结构,能够存储以上的信息,以上的信息就是说在第一个时刻能够取值的,所有状态的概率值,而我们知道所有的状态无非就只有N种状态,那这个时候第一个时刻时刻已经被确定了啊。
在这一个时刻有N种可能的取值,那很显然我们用一个什么向量就可以了,所以把它称之为初始概率向量啊,初始概率向量,初始概率向量呢我们用派来表示它的,每一个元素呢,我们用我们用pi加以区别,这里的I哈。
这里的I也是从一点点一直取到N,因为你因为你在第一个时刻,也可以有N种状态可供选择,那么下面那么pi是在时刻T等于一处,处于QI的概率啊,所以说你会发现它的概率计算是I1等于QI的,概率被定义为pi。
I呢是从一到大N,而我们知道这里I1等于Q1,I1等于Q2,N到I1等于QN啊,是由N个概率值,这N个概率值组成了我们的初始概率向量派,初始概率向量排,那么回到刚才这个图当中好了,这个时候生成I1的。
就是根据我们的数值概率向量派来生成,那么有了这个数值概率向量派,以及我们刚才说的状态转移矩阵A,和我们的观测概率矩阵B,那么当前的一马可夫模型就可以说是完成了,我们形式化的给出姨妈和规模型的定义。
所谓的Emo模型啊是个三元组啊,就是三部分组成的哪三部分呢啊,首先他用LAMBA加A表示,用lambda加A表示,lambda就是我们的1M模型,它是由刚才所介绍的状态转移矩阵A。
观测概率矩阵B以及初始概率向量派啊,这个地方是个逗,用这个逗号三部分来组成的,我们的一马可夫模型啊,这就是以上关于马可夫模型的定义部分,那么在此基础上呢,我们还需要做两个非常重要的假设了,重要的假设。
这两个假设哈主要是为了进行这个化简来用的,怎么样化简呢,因为我们可以看到根据ab派啊这三个部分,我们的IMAC夫模型其实是蛮复杂的,蛮复杂的一个数据结构,在后面我们进行这个问题求解的过程当中呢。
这个模型太复杂啊,就像我们在那个什么,在那个朴素贝叶斯模型里面对吧,碰到了那个条件独立性假设其实是一样的,我们要为了简化问题哈,这个带来一些这个规则,这个规则呢我们看两个非常重要的规则。
第一个一马可夫模型的两个基本假设啊,第一个假设呢,我们把它称之为七次马可夫性假设啊,其次马尔科夫性假设他是这么说的,在任意时刻T啊,在任意一个时刻,T的状态只依赖于时刻T减一的状态。
首先其次马可复性假设,说的是状态和状态之间的一个假设啊,状态和状态之间的假设回到我们前面那个图哈,状态到状态,这是I1I2点点,这是I大T,他说的是状态之间的一种假设关系啊,和你那个观测哈,暂时还。
暂时还没关系啊,人家说的是状态和状态之间,人家说什么,人家说的是在任意时刻,在任意时刻T的状态依赖,并且只依赖于前一个T减一时刻的状态,也就是说某一个状态啊,某一个状态和其他的状态没有关系。
和其他的观测也没有关系,它只和它的前序状态相关啊,这是做了一个非常重要的假设,就在这个地方,就说你可以认为哈,状态和状态之间都是近视的啊,都是近视眼啊,虽然说我们知道每一个都有倾向依赖关系。
但是呢从单一个状态而言,他只能看到他的前序状态是谁,换一个角度,就是当前这个状态只依赖于它的前序状态,和它的后续状态,以及它所对应的所有的观测,和其他状态都没有任何关系啊,这是这么一个假设。
那么在形式上我们这样来定义,怎么定义呢,就是说当我们已知了IT减1OT减一一,直到I1OE以后,换句话说你可以看到我即使是既知道状态,也知道观测,而且不只是知道一个状态,一个观测,知道很多的状态。
很多的观测的条件之下,来决定当前T时刻的IT,刚才我们前面已经说过,你这些状态和观测啊,有些根本不会影响到T,那么哪些会影响到T呢,只和我前序状态T减一有关啊,这是所谓的七次方。
可以假设那这个东西有什么用啊,也就是说到后面,我们进行逻辑这个概率计算的时候啊,当我们进行概率计算的时候,你碰到这么一个式子很麻烦,很复杂的一个概率条件,概率是吧啊,又知道这么一些观这个状态。
又知道这么一些观测啊的条件之下,来求T的条件概率的时候,马上就可以把它化简为化简为,只有当前时刻的前序时刻作为条件的时候,it的条件概率就OK了,那其他的都没关系啊,图上说明了。
刚才已经说明了某一个时刻的状态,只和它的前序状态有关啊,只有他俩有关系,和其他时刻的状态状态观测观测即使你已知了,也不影响我当前这个时刻的状态啊,状态之间就这么个近视的关系啊,这是说的,其次马合并假设。
第二个假设能称之为观测独立性假设啊,观测独立性假设他说的是什么,他说的是任意时刻的观测啊,观测和同一时刻的状态的关系啊,如果说哈状态,刚才我们的七次Mark复性假设,说的是状态和状态之间的关系。
那么现在说的这个观测独立性假设说的是谁啊,说的是状态和观测之间的关系啊,他俩之间的关系什么关系呢,任意时刻的观测啊,任意时刻的观测O只依赖于同时刻,当任意时刻T的观测只依赖于时刻T的状态。
我任意时刻的状和观测只依赖于同时刻的状态,和其他时刻的状态,和其他时刻的观测也没有关系啊,这是你看你会发现这两条假设啊,其实很强的两条规则啊,很强的两条规则,那么在形式上我们可以看到啊。
就像刚才我们所说的,即使我知道了大量的状态信息和观测信息,作为条件之下来决定我当前的观测的时候啊,这个条件概率也直接等于什么,直接就等于同时刻的状态啊,同时刻的状态IT作为条件之下。
那么gt作为他的条件,概率和其他时刻的状态,和其他时刻的观测也没有关系啊,也没有关系,同样怎么使用,就像刚才所说的,当你后面再推导一一个概率计算,而后面的条件会一大堆一大堆条件之下。
观测的条件概率的时候,马上就可以用这条规则啊,把它化简为只和我同一个时刻的,同一个时刻的状态相关就可以了,图上就是这么说的啊,状态和状态之间只依赖于前驱状态,状态和观测之间只依赖于同一个时刻的状态。
好吧,这是关于两个假设啊,关于假两个假设用的时候啊,这个一会儿用的时候,我们回过头来看一眼就可以了,有了这两个假设以后呢,我看下面一个问题啊,就是观测序列的生成算法啊,就有了一马可夫模型ab派以后。
我可以根据ab派这三个这个结构来生成,我希望得到的观测序列啊,希望得到的观测序列,那么这个算法的输入就是输入我们的模型啊,输入我们的模型lambda ab派,然后呢你还需要给出一个观测序列的长度啊。
你要生成多少个观测啊,你要生成多少个观测T也是需要的,输出什么输出我们的观测序列O啊,输出我们的观测序列O就可以了,那么其实也就是说我们现在有了一个啊,任意两个状态之间的跳转关系啊,通过A来表示。
然后呢任意一个时刻向观测的调整关系,我们用B来表示,而且呢在第一个时刻上,哎那个第一个时刻的跳转生成,我们用派来进行定义,那这个时候你会发现当我们通过派先生成谁啊,I 1ui1。
根据B就可以生成OE再UI1生成IRUI2,生成ORUIR生成往下生成,然后呢生成继续所对应的O,那这个时候你会发现依次向下生成,当生成到最后一个O大T的时候,我们所希望的观测序列是不是就已经有了。
所以说啊就像刚才我们所说的,通过派生成一个通过O通过B生成O,通过A生成I啊,以此生成就可以了,所以算法本身其实并不复杂,我们可以看一下,第一步,由初始概率向量派来产生状态I1,LTRU派生成状态I1。
这个时候就会有同样疑问,这个I1你说生成这个IE怎么生成啊,那这个时候我们是不是可以找一下,使得当前对吧,我们的状态转移这个初中,我们这个初始概率向量里面定义的是N种状态,在第一个时刻生成的概率值。
那我到底在第一个生成,第一个时刻生成哪一个状态啊,我们第一个策略非常简单,就是找那个在我们的初始概率向量里面,概率最大的那个作为我当前IE的状态,是不是就可以啊,就那个概率值谁的概率最大。
我把它生成作为第一个状态是不是就可以啊,好了啊,这样解决的就是第一个时刻的状态,然后呢第二步梯等于一,第三步由状态IT,当然啊,这里T开始循环了吗,由状态IT的观测概率分布,同样这个OT等于多少OT。
同样是使得那个BGK取得最大值的那个概率,所对应的那个观测啊,然后呢第四步,这样的话第一个时刻就有了状态和观测,然后呢下面由状态IT的状态转移概率分布,那个A矩阵来生成下一个时刻的状态T加一。
那这个时候再判断一下啊,T等于T加一,再判断一下T是不是小于T,因为我们知道在这个循环过程当中,依次生成观测,依次生成状态啊,这个in Mark和模型依次向就向后生成,当这个条件不满足的时候。
意味着T等于T我当前的观测已经生成完毕了,否则就可以啊,这个时候就可以结束到整个生成算法啊,呃这个算法本身啊其实作用不大啊,用处也不大啊,它主要是为了说明啊,或者说让大家能够理解啊。
当前这个以马克服模型的定义问题,而加以说明的好吧,以上呢是我们今天的第一个,关于一马可夫模型的定义问题,再回过头来看一下,我们分别定义了状态和观测两个集合啊,这是两个集合。
你的状态和观测的取值是在两个集合里面,取值的,下面呢重要的是两个序列,分别是状态和观测序列啊,是两个有前后关系的这种序列,但是呢这个时候我明确一下,状态序列是由状态和状态之间的关系决定的。
观测序列是由他同一个时刻的状态所决定的,状态是由状态生成,而观测是由它所对应的状态生成的啊,观测也是由状态生成的啊,所以这个结构这个图你回去好好再琢磨琢磨,然后呢三个信息状态转移矩阵A。
观测概率矩阵B和初始概率向量派啊,分别定义了状态和状态之间的跳转,以及状态和观测之间的跳转,以及第一个时刻状态的生成规则啊,或者说生成概率啊,这三部分的信息,由这三部分信息组成了整个一马可夫模型。
当然模型很复杂,所以我们加上两条假设,其次马克假设和光观测独立性假设,生成算法回去以后自己看一遍,看看这部分还有什么问题吗,如果没问题,我们就继续啊,继续呃,当模型介绍完了以后。
那么我们需要看一下这个模型它能干什么是吧,他能干啥,一般情况下呢,一马可夫模型可以解决以下三类任务,或者三个工作,哪三类任务呢,第一类任务称之为概率计算啊,概率计算,那么概率计算说的是什么呢。
就是一系列的概率计算,那不废话嘛,但是呢这一系列的概率计算的目的啊,这一系列的概率计算的目的是,为后续两个任务做前期的一些中间结果的计算,换句话说,后续两个任务都比较复杂啊,都比较复杂。
会使用到大量的一些概率计算的中间结果,而这些中间的结果就在第一个任务里面,把它解决或者完成了,当你用的时候,在第一个任务里面去找就可以了啊,第一个任务需要处理大量的概率计算任务好吧。
那么其中呢有有有一些比较典型的哈,这里我们只能介绍一些比较典型的一些计算,我们以这个第一个任务为例哈,第一个任务说的是什么,说的是当我们已知拉姆达啊,已知我们的模型以后。
并且呢我们还知道了我们的观测序列啊,还知道了观测序列能够计算出在当前模型,当前音马可夫模型条件之下,出现这个观测序列的概率值是多少啊,这个东西挺有意思啊,就当我们知道的是lambda,还是知道呢。
我们一个观测序列,这个时候我们要得到什么呢,我们要的是在当前模型条件之下出现这个序列,观测序列的概率值啊,就像刚才我们所说的对吧,你状态决定状态,状态决定观测现在状态之间的转移概率。
A状态观测矩阵B和初始向量派我都知道了啊,这里的模型是已知的吧,然后呢还知道什么呢,还知道一个观测序列,这个时候我能够计算的就是,在已知模型的条件之下,出现这个序列的概率值是多少,我能把它计算出来啊。
这是第一类任务,概率计算任务当中的一之一之一,类似这种任务啊,类似这种任务还有很多啊,这个地方呢我们以它作为一个例子作为介绍啊,呃其实非常有代表性啊,其实就是一系列的概率计算,有了这一个力作为啊。
这个准备其他的任务呢,相应的也可以作为一个计算结果,这是第一利润,第二个任务啊,称之为学习任务,学习任务说的是什么,学习任务说的是我只知道一个啊,我只知道一个观测序列啊,我只知道一个观测序列。
但是我仅通过这个观测序列,就可以把当前使得这个观测序列出现,概率最大的那个模型拉姆达构建出来,而我们不要忘了这个拉姆达包括三部分,初始概率向量派,状态转移矩阵A和观测概率矩阵B。
第二个任务啊可以说是非常重要,你可以认为是一种无中生有的任务对吧,我第二个任务,这是第一个任务,第二个任务说的是我只知道一个O,其他的我一概不知道,只知道一个观测序列,这个观测序列怎么生成的。
我也不知道谁生成的,我也不知道,因为序列I我也不知道,但是仅此情况之下,我就可以把那个,出现当前这个观测序列概率最大的那个模型,找出来,第二个任务啊,非常厉害了是吧,非常厉害了,而这个学习过程当中啊。
我们需要使用到演算法,所以一会儿呢我们会呃,单独把这个em算法再做一个介绍,这是第二个任务,第三个任务呢称之为预测任务或者编码任务,他说的是什么,他说的是同样我知道了模型lambda,还知道了。
观测序列O和我们的第一个任务,的已知条件是一样的,但是呢他求的目标不一样,他求什么,他求的是在当前已知la和序列O的条件之下,我能够把出现概率最大的那个状态序列,I构建出来,他要求的是那个I序列。
I序列是刚才说过,他是在已知la和O的条件之下,出现这个序列的,那个概率值最大的序列能够构建出来啊,这是三类三个任务啊,三个任务,这三个任务呢我们又一次的做一个解决好吧,先看第一个任务。
第一个任务说的是已知拉姆达啊,已知模型和O,我们要把在当前模型下面,出现O的那个概率值计算出来,就是个概率计算呗是吧,概率计算,那么一一提到概率计算,这个时候马上就有同学应该反映出来反映什么。
既然是概率计算,而且是挺复杂的,概率计算,我们手头上的一些工具都有哪些,简单的回顾一下,我们上次讲到的那个那个那个朴素贝叶斯模型,两条规则,第一条规则是什么,加法规则,加法规则说的是边缘概率等于P。
对吧,我们的边缘概率和联合概率之间的这个,概率关系啊,概率关系,当我们啊不是不是在X上,一定是在Y上,因为我们这个地方多了一个随机变量,Y是随机变量,Y需要进行一个sum上的一个求和。
这样的话就还原回我们的表演概率了啊,这是加法规则,那么另外一套规则呢,就是说的是PXY和联合概率等于什么,等于,等于条件概率和概率的乘积啊,联合概率嘛,两个随机变量本来是两个随机变量的嗯,不确定性。
这个时候呢,我们在一个随机变量被作为条件确定以后,另外一个随机变量的条件概率,那么这个时候很显然他俩不相等了,那么这个时候需要把那个确定之后的随机变量,它的这种不确定性通过PY再还原回来。
那么这样的话就构成了所谓的成绩规则啊,后面啊下面就是这两条规则,反复的用啊,反复的用,你想不明白了,你就回来看一眼,找找他俩就OK了,好吧好,回过头来看一下,有了这两个工具以后,我们解决第一个任务。
已知拉姆达和O要求这个在拉姆达条件之下,O的概率值,这个任务呢我们把它称之为是,这个就是概率任务其中的一种啊,或者一个,那这个任务怎么去解决啊,这个任务解决呢需要引入另外一个概念。
或者另外一个中间结果叫做前项概率啊,前项概率,前项概率呢我们把它定义为啊阿尔法TI啊,阿尔法TI,阿尔法ti,这个前向概率呢被定义为在已知模型条件之下,O 1o2,OT以及IT等于QI的一个联合概率啊。
当然是在模型条件之下的联合概率,你看啊,这个时候你就不知道这个阿尔法TI,到底是个什么东西了是吧,或者说这个联合概率到底长什么样,也不知道了,还是那个问题啊,画图画图画图画图,那么假设这是I1啊。
这是I,你看看啊,I,T啊,就在这啊,这是I大T好吧,然后呢,你看看这个这个这个联合概率里面都有谁,包括O一O2IT,如果是在这个一定对应的是OT,那么前面只是O1O2,看看这个式子里面有O1O2。
一直到OTO1O二,一直到OT,然后呢还有谁,还有这里的IT,所以说啊这个所谓的前向概率说的是这部分啊,这一部分被定义为项式,所谓的前项概率用阿尔法IT来表示,在T时刻的IT和O一一直到OT啊。
组成这么一个所谓的前行概率这么一个东西,有了这个前向概率以后,我们看看这个前向概率它能够蕴含着哪些信息,而这些信息是不是为我们最终的这个PO的计算,能够带来一些帮助,好吧,我们需要分析一下这个线程概率。
那这个前行概率的分析呢,我们需要把它展开,仔细的去看一下这个前行概率,所蕴含的一些内容,那这个前行在这个展开过程当中呢,我们就需要仔细一点好了看看,首先我们可以看一下这一步啊。
阿尔法TI等于刚才所说的拉姆达条件之下,O1到OTIT等于QI,从这一步到这一步是定义啊,这个没什么可说的啊,这一步是定义,那么从这一步到这一步啊,说明一下做了两个地方的修,两个地方的调整。
第一个调整呢是在这,是,因为当前这个阿尔法TI,一定是在已知兰姆达条件之下的,这个呃前向概率啊,每一步都是都带着这个拉姆达条件,所以呢后续的计算,就把这个拉姆达条件隐去了啊,你知道他带着。
但是呢我们就为了简便啊,就不再写每一步都写这个拉姆达了好吧,这是第一步,所以你会发现从这一步到这一步里面,那个拉姆达条件没有了啊,不是没有了啊,是因为我们为了简写就不写它了好吧。
这是第一个地方改了第二个地方,刚才我们说到过啊,其实在阿尔法ti前向概率当中,其实包含了两部分信息,既包含了DT时刻的状态信息,也包含了从一到T时刻所有的观测信息,所以呢你会发现这个IT等于QI。
我们还依次保留对吧,T时刻的状态信息我们还保留着,那么从第一个时刻到T这个时刻,所有的观测信息呢还是太太复杂,我们把它简写简写为勾,从下标一到上标T啊,从下标一到上标T表示了啊。
就是从第一个时刻的状态啊,第一个时刻的观测到第T个时刻的观测啊,我们用这么一种简写的符号来表示,这里的O11类的OT好吧,就是从这一步到这一步,其实就是为就是为了简写方便啊,这个没什么说明一下就可以了。
没什么可以过过多理解的部分,那么下面就需要一步一步的去理解了,那么下面大家看一下,怎么从PIT等于QIO1到OT啊,这么一个联合概率等于等于下面这个式子,或者说从这一步到这一步肯定是相等啊。
这是没问题的,但是你用的是哪条规则,或者你根据的是什么样的一个规则,你从上面这一步可以得到下面这一步,看看我们在形式上,在形式上变成了什么,变成了SUG,从一到N啊,变成了一个求和啊,概率求和,然后呢。
它的求和的概率的这个对象呢就比较复杂了,变成了四项,看了吗,一项两项,三项四项,这四项分别是谁,分别是IT等于QIIT等于QI,IT等于QY啊,他还在这是吧,然后呢,这里有一项是O1到TO1到OT。
那么O1到OT,是不是可以拆成O1到OT减一,然后再到OT,所以说这一项拆成了两项啊,也在啊,其实这没问题,然后来多了一项IT减一等于Q类,你看这里只有两项吗,哎这里有两项,但是多了第三项。
IT等于QG,这第三项是怎么多出来的啊,或者说多出来它是用了哪条规则,大家有什么理解吗,哪条规则,不理解是吧,你想想我们手头上一共就这两条规则,你你你现在也没得选吗,你能选哪一个,你看看你俩号规则。
加法规则和乘积规则,乘积规则不带sum求和,那可很大概率是是是根据这个加法规则,但是加法规则人家只说的是条件,概率和联合概率之间的关系,你这里好像并不符合,刚才那个并不符合这个要求啊。
所以这个时候你需要灵活一点,什么叫灵活一点,这你会发现,比如说这个地方我加上一个随机变量Z,大家想想影响不影响,这个所谓的加分规则是不影响的,也就是说我加上一个,只要在左侧再加上一个随机变量Z。
那么同样在右侧也加上一个随机变量Z,其实这个概率等式还是成立的,那这个时候你再想想,不就变成了两个随机变量和三个随机变量之间,的这种啊这种概率关系了吗,那么同样,现在你是在保证了原有的随机变量的基础上。
增加了一个随机变量,而增加的这个随机变量是IT减一等于QJ,我们只需要保证的是什么,保证的是你新加入的这个,你之前加入的这个随机变量Y,要进行一个sum概率上的求和,你看看这个时候是不是这从一到N。
而我们知道QG吗,QG是我们状态集合当中的一个元素,而这个元素可以在所有的状态集合上任意取值,那有多少种状态,有大N种状态,所以这个地方G从一到N我可以从一到N取值,那不就是这里对应的是随机变量Y。
在所有可能的情况下进行一个概率求和嘛,所以啊从上面这一步到下面这一步,我们用的是加法规则好吧,这个地方确实你需要灵活一点,但是这个灵活呢,我觉得也没有什么太多的技巧性而言是吧,这是这一步哦。
那为什么要这样做啊,这才是个好问题,就是你吃饱了撑的没事吗,为什么本来只有两部分对吧,两部分的联合概率的形式,你为什么把它硬生生的拆成,拆成这个一拆成这种形式很显然是有用的,但继续往下。
那么最后你才会发现我们的目的是什么,好了,那么再从这一步到这一步又是用到了哪条规则,或者说是呃怎么生成的,我们再看看啊,本来现在我们得到的是IT减一等于QJ,IT等于QI,然后呢是O1到OT减一。
这个地方是OT,这是一个四个部分的联合概率,现在呢拆成了两部分,拆成了两个概率相乘,哪两部分呢,我们需要看一下,第一部分变成了IT减一等于QJ,原来我在这,现在跑到这来了。
然后呢这个地方还有个IT等于QY,IT等于QY在这对吧,然后呢这里还有一个O1T减一,O1T减一是在这,然后这里还有一个OT在这,那么也就是说啊,很显然我们原来是四部分的联合概率。
现在呢拆成了一个条件概率的形式是吧,拆成了一个条件概率的形式,作为了前面这一部分,很显然我们知道这个等号,如果仅有前面这两部分的话,是不相等的,那怎么办,看这看这这里还成了一个IT减一等于QJ。
然后O1T减一,那么你看看是不是IT减一等于QJ跑到这来,O1到T减一是跑到这来,那你告诉我下面这一步的得到是使用哪套规则,应该是一目了然了吧,哪条规则,我们只有手上这两个东西,乘积规则,有同学会问。
那乘积规则说的是两个变量的联合概率,是拆成了条件概率和边缘概率的乘积,你这可是有四个,四个又怎么了,四个无非就是你可以把,你可以把他俩认为是一个吗,你可以把他俩认为是一个吗。
那这样的话这四个不就调整一下顺序,就变成了两组是吧,其中一组作为条件,另外一组作为条件概率的,条件概率很显然就变成了条件,概率需要乘以那个内阻所对应的一个边缘概率,这是用的是乘积规则,那同样继续往下呗。
你需要一步一步的去这样去去给大家说啊,在这个规则还只是把结论放在这,让你找找对应关系或者找这个规则是吧,我们上学的时候,这个就完全没有,而你需要自己去找这个推导过程好吧。
让我们看看从这一步到这一步又是怎么来的呢,看看再分析分析啊,很显然这个地方,这两个同学还在啊,在这直接下来了,但是作为条件的这两部分,只有其中的一个下来了,这个条件跑哪去了,你需要给出一个解释和说明。
这是一个另外一个,后面这个式子很显然是变成这个式子了,又为什么,你需要解释一下好吧,两个问题,第一个问题就是这个O1到OT减一去哪了,这是第一个问题,第二个问题,这个式子它等于这个阿尔法T减1G。
又是为什么啊,这两个问题谁能解释一下吗,先解决第一个问题哈,第一个问题是这个O1到OT减一跑哪去了,他不能凭空就消失,是吧,很显然,但是从式子上又告诉我们,他又确实是没有了,那原因是什么。
或者为什么没有看一下啊,再看一下这个式子,我们已经知道了问题的主要矛盾在哪了,就是就是他跑哪去了,但是他跑哪去,一个很重要的原因在于他是谁,或者他起到了一个什么样的作用,很显然。
这里的O1到T减一处在一个什么位置上,处在一个条件的位置上是吧,处在一个条件的位置上,而他作为条件又决定了谁呢,又决定了前面两个随机变量分别是IT和OT,IT和OT,那这个时候就有一个很显然的一个启示。
就是他作为条件如果能够去掉,那也就是说这个条件存在和不存在,不会影响前面这两个随机变量,那我们就需要看一下,这个条件是不是真的,对前面两个随机变量不产生影响的吗,或者说,如果我们认为。
他对前面两个条件不产生影响的话,是因为什么造成的,那我们前面想想,刚才讲到的两个马尔可夫性假设,第一个假设说的是什么,第一个假设说的是任意一个时刻的状态啊,任意一个时刻的状态。
只依赖于它的前序时刻的状态,所以这个条件你是不能够去掉的,也就是说这里的T减一直接决定或者影响了T,IT减一在哪,IT减一在这,IT在哪,T不就是在这吗,T减一在前,T在后,那么很显然刚才我们说的。
其次马克服性假设不就说的是,IT只依赖于IT减一,那么当IT减一作为条件的时候,你是不能够去掉的,所以这个IT减一等于QJ你是不能动的啊,所以这个条件是原封下来的,那么看另外一个gt ot。
我们前面也讲到过,影响OT的是谁,OT在这影响OT的只有IT来决定它,如果T作为条件,那这个条件也不能去掉,但问题在于后面这个条件里面有T吗,没有啊,没有it,所以说影响it的it减一可以作为条件。
但是影响OT的那个T是没有作为条件出来的,换句话说,你这个地方即使有O1的OT减一,按照那个所谓的观测独立性,假设你这里的O1到OT减一,不影响这里的OT,因为OT只只依赖于IT。
同时也不影响这里的IT,因为IT减一影响IT,所以就是说你这里的条件存在还是不存在,都不直接影响前面的两个随机变量,所以这个条件也就没有存在的必要了,所以就退化成了下面这个式子了好吧。
所以从这一步到这一步啊,是因为你这个条件是可有可无的,没有用处啊,所以式子也做了相应的简化啊,这是刚才那个一个疑问,那下面这个疑问又是下面这个问题是怎么来的,是怎么解决的,咳咳。
下面这个问题说的是阿尔法T减1G,为什么等于这个式子,那很显然,我们需要看一下,阿尔法T减1G的展开式到底是长什么样,我们但手头上只有这么一个东西,我们手头上只有一个阿尔法TI。
那我们需要找到的是阿尔法T减1G等于什么,那就展开看看呗,按照定义形式对吧,自己展开看一下,首先还是个概率对吧,阿尔法TI说的是O1到OT,那么很显然这里的T是和这里的T对应起来的,你现在是T减一。
很显然是O1O2点点遇到O什么OT减一吗,然后呢还有IT等于QY,那很显然应该是IT减一等于什么IT减一,这里的I对应的是这里的I,那你现在是既然是G那很显然是,所以说IT减1G根据定义展开。
是等于PO1O二一直到OT,然后是OIT减一等于QJ,你再看看上面这个式子,是不是就是说的这个东西,这里O1到OT减1O1到OT减一,IT减一到QG,IT减一到QG,所以说啊这两个式子相等。
是通过定义展开的,只不过我不是在T时刻上展开,而是在T减一时刻上展开来,按照标准定义形式展开就可以了,这也没什么可说的是吧,嗯好继续往下,那从上面这一步到下面这一步又是因为什么呢,我们需要再仔细看一下。
首先这里的阿尔法T减1G,这里有个阿尔法T减1G,这里是没有变的啊,这个是没有变化的,然后很显然这个式子,这个式子又分别表示成了下面两个式子的乘,积的形式,那仔细的再看看啊。
再仔细的看看这又是因为什么呢,首先我们可以看到it等于QI,it等于QI跑到这来,然后呢OT跑到这儿来,然后IT减一等于QY啊,在这,然后呢看后面IT减一等于QY,T减一等于QG,哎呀这个是因为什么呢。
哪个同学能看出来了,那这个时候很显然,我们知道这里的IT等于QY和OT,是一个联合概率的形式,当然是件之下的联合概率是吧,那这个时候同样同样,我们还是使用我们的这个乘积规则啊。
把它展成条件概率和边缘概率的乘积,只不过这个时候呢我们可以看一下,稍微仔细一点啊,稍微仔细一点,这个时候我们只需要保留的是谁,保留的是OT在前面啊,OT在前面,那很显然这里的IT等于QI。
就作为了条件部分了吗,作为条件,而这个地方的I7-1等于QG,同样作为条件再放下来,所以你会发现这是原条件在这儿没变,这是原来的两个随机变量的联合概率,其中的一个条件放到了这儿,另外一个在前面。
所以这是一个根据我们的乘积规则啊,根据我们的乘积规则展开的条件概率的形式,既然改成了条件概率,那这个时候的这个条件你还需要把它还原回去,乘以它的什么,乘以它的边缘概率,所以你会发现这个地方他还在这啊。
作为一个边缘概率,但是呢不要忘了,他同样是在IT等于QJ的条件之下,所以这个条件你还不能变化,所以说从这一步到这一步,用的还是我们的乘积规则,只不过这个时候的乘积规则,因为后面带了一个条件概率啊。
带了一个条件概率,所以这个条件你不能够说去掉就去掉,还必须要保留着,至于这个条件起不起作用,那是另外一回事啊,即使它不起作用,你写在这也没问题,当他你觉得不影响前面的这个条件,决定的这个随机变量的时候。
如果你有依据,就可以把后面这个条件就去掉了,没问题吧,所以说啊,这个地方使用的还是我们的程序规则,那好了,有了成绩规则之后,这一步就是因为什么好了,我们再看看这一步在这啊,这是没问题的。
落回来你再分析分析这一步就很有意思了,这一波啊是条件概率啊,这一部分是概率,这部分概率说的是什么,说的是在T减一等于QJ的条件之下,it等于QI,很显然说的是状态和状态之间的关系,IT等于QJ。
然后再按哎哎可能吗啊,这是IT减一等于QJ,在IT等于QI啊,这么一个概率值,那反过来啊,不是前面的影响,后面,IT减一等于QG的条件之下,T等于QI,那么很显然,这是说的是两个相邻状态之间的转移概率。
而这个转移概率一定是在哪儿,是不是一定是在我们那个状态转移矩阵A里面,但是状态转移矩阵A里面那个AI,这说的是什么那个概率哈,我们直接看定义吧,在哪来着,在这,人家说的也是前后之间的关系。
两个时刻的关系,但是说的是在前时刻等于QI,后时刻等于QG,等于AIJ,但是下面这个式子说的是什么,下面这个式子说的是在前一个时刻等于QJ,后一个时刻等于QI,所以就不再是AIG,而是什么AJI。
很多同学啊这个地方都都问,是不是书上印错了啊,你看看你那个统计学习方法里面没有印错啊,这个地方确确实实AGI,为什么是AGI,就是因为啊在公式的推导过程当中,这个地方说的是前一个时刻等于QJ。
后一个时刻等于QI啊,所以一定是AGI好吧,不管是AI还是JI,在我们的状态转移矩阵A里面,是已经被定义的啊,这个是没有问题的好吧,所以这个是通过我们的状态转移矩阵A,来确定的。
那下面这个式子说的就是什么,下面这个式子啊是一个条件,概率决定哪个随机变量呢,决定是OT,而我们前面也讲到过,在T时刻的状,T时刻的观测只和同一个时刻的状态有关,和其他时刻的状态和观测都没关系。
所以说后边这个条件压根就不起作用啊,压根就不起作用,那这个时候我们再看一下,在T时刻等于QI的条件之下,T时刻等于OT,那肯定是通过谁啊,是不是通过我们的观测概率矩阵B来决定的,不就是那个BIOT吗。
在T时刻等于QI的条件之下,T时刻等于gt的概率BOT啊,所以说从这一步到这一步,完全是通过我们的已知条件,那个拉姆达来决定的,拉姆达里面既包含A也包含B,还有那个派,虽然我们没用到是吧。
但是我们知道这个地方信息数据是有的,那有了这次这个到这一步以后,我们需要停下来分析分析这个结果啊,这是最后我们要推导出来的一个结论,那这个结论有什么用,这个结论其实是非常有用的,第一个其中的三部分。
其中的三部分,第一部分BIOT是B矩阵里面存在的,这里的ADI是我们A矩阵里面存在的,当我们已知拉姆的条件之下,以上两部分信息是已知的,那么得到的第三部分啊,非常有意思。
他得到的是阿尔法T减1J我们现在建立的啊,建立的是阿尔法T2和这个式子的关系,而在这个式子当中的前两部分都是已知量,已知就是已知嘛,就就就算出来结果就带带你去算就可以了,问题是。
我们建立的是一个阿尔法TI和,阿尔法T减1G之间的关系,那这两个关系有什么作用,你会发现很显然,明显的说明的是,DT时刻的阿尔法值,和DT减一时刻的阿尔法值之间的关系,换一个角度。
当我知道了DT减一时刻的阿尔法值的时候,代入到下面这个式子里面,我们就可以计算出DT时刻的阿尔法值,当我有了DT时刻的阿尔法值,同样带入到它所对应的这三部分里面去,我就可以计算出谁啊。
是不是可以计算出那个阿尔法T加一啊,有了阿尔法T加一,我就可以计算阿尔法T加二对吧,这是从前往后的一个计算逻辑,但问题是你这个阿尔法T减一怎么得到呢,阿尔法T减一我要记得到这个值,那么很显然。
阿尔法T减一,是不是可以建立阿尔法和它和阿尔法T减二,之间的关系,有的人RFT加二,你也不知道,那同样嘛一直在往前追溯,我要计算阿尔法T减二,我需要知道阿尔法T减三,T减4-5减六,一直到减。
一直到阿尔法一那个时刻,而阿尔法一里面一定包含的是第一个时刻,而第一个时刻是在SHA派里面,换句话说,有派我就可以计算阿尔法一,由阿尔法一可以计算阿尔法二,由阿尔法二就可以计算阿尔法三,计算阿尔法四。
一个阿尔法T减一计算到阿尔法T,计算到阿尔法,大体换句话说,我们建立的是这个倾向概率的计算逻辑,告诉我们,前向概率之间是有一个所谓的递推关系的,就在这,我建立的是邻相邻两个时刻的递推关系。
那这两个相邻时刻的递推关系告诉我们,当我知道了拉姆达的时候,当我们知道了ab派的时候,第一个时刻的阿尔法值有了,那么以后所有的阿尔法值都可以计算得到啊,都可以计算得到,那有了这个前向概率的作用是什么啊。
一会我们就可以看一下啊,有了这个阿尔法作用还是非常重要的,那么到此为止哈,这个阿尔法前向概率部分它的定义在这放着,有了阿尔法TI,我们需要建立的是相邻两个时刻的阿尔法之间,的递推关系啊。
这个递推关系的关系式也摆在这个地方,每一步的计算都是有依据的啊,为什么要讲这个东西,第一教材上是没有展开讲的啊,他只给出了一个结论,很多同学对这个结论是有困惑的,就是为什么或者怎么得到这个结论。
逻辑就摆在这,大家可以看到啊,这个逻辑推导还是有一定的,这个稍微复杂一点啊,这是第一点,第二点呢说的是什么,就是你希望得到某一个结论的时候,或者说你已经知道这个结论,而希望看一下它的递推关系的时候。
其实无非使用到的就是所谓的基本的概率,计算规则,以及当前这个模型所特定的一些基本假设,或者说是一些这个前提条件,有了这些前提条件,基本假设,再加上两条基本规则,也是可以通过这种分析得到你想要的结论的。
那么关于这个前项概率部分看有什么问题吗,是不是T等于QI的条件,首先前面是个联合概率,就没有条件,他是谁的条件嗯,我不太清楚这个问题,所以最好再稍微整理一下好吧,如果整理一下,说不清楚的话。
你可以截个图,在我们的资料上截下图,然后你再画一下到底谁的条件,好了,前项概率呢我们就介绍到这,那前行概率它有啥用或者怎么用,是个问题是吧,看一下再计算,不要忘了我们的目标是什么。
我们的目标是为了要计算这个PO是吧,POPO呢我们可以把它写成P,从O一一直到O大T啊,这是没什么问题的,PO从O一一直到殴打T,然后同样从这一步到这一步是怎么得到的,原来只有O1的O大T是吧。
O1的O大T,现在呢再加上一个I大T等于QI,I大T等于QI,那么很显然多了一个随机变量啊,多出来这个随机变量你还需要通过什么,通过求和啊,把它还原回去,好还原回去呢,这个地方是QI嘛,所以I从一到N。
那么很显然使用的是什么加和规则是吧,加和规则,那加上这个随机变量的作用是什么呢,再看下面这一步,他可以得到什么,就从这一步到这一步是怎么得到的,从这一步到这一步,很显然我们可以得到式子上告诉我们。
这一部分是等于下面这个式子,而下面这个式子是阿尔法大TI对吧,阿尔法大ti,那么按照我们的这个关于阿尔法的定义,还是那样,你需要把阿尔法大ti展开是吧,阿尔法大ti等于什么,那就比较一下吧。
阿尔法大ti不就是等于等于什么,原来阿尔法TI是从一到小T,你现在是阿尔法大T,不就是从O1点点遇到O大T,这个是I小T等于QI,那现在不就是再加上I大T等于QI,不就可以了吗。
按照我们的简写符号不就变成O1从一到大T,然后呢是I大T等于QI,那你看看这个式子和下面这个式子,对吧,这个式子本身就是关于前项概率,在大T时刻的前项概率的一个展开式嘛,所以这是根据定义来的。
那得到这个式子有什么用,你再看看得到这个式子有什么用,那很显然得到这个式子以后,在整个表达式里面,我只需要把这个阿尔法大TI计算出来,比如这个阿尔法大TI进行全进行一个求和,就可以得到这里的PO是吧。
但问题现在就是这个RF大TI能不能得到,而他大ti我不知道等于多少,但问题在于,我前面,我们已经建立了任意两个时刻的,前向概率之间的关系,阿尔法大TI我不知道,那我好了。
我计算一下阿尔法大T减1I是不是就可以,那阿尔法大T减1I是多少,我也不知道,那我需要计算一下阿尔法大T减2A,同样不知道继续往前倒,一直倒到什么时候,一直倒到那个阿尔法1I。
如果我知道了那个阿尔法1I等于多少,我就知道阿尔法2A,阿尔法2I知道了阿尔法3I,阿尔法大T减1I,一直到阿尔法大TI是不是已经知道了,一旦有了阿尔法大TI知道之后进行一个求和,我就知道了P5。
所以说前向概率的这个逻辑就告诉了我们,任意两个时刻的前向概率,我是可以啊,这个递推关系是可以建立的,而一旦建立了以后,我需要知道这个阿尔法大T的结果的时候,我就可以一直往前倒,那一直往前倒呢。
我就需要知道那个阿尔法一是谁,那这个时候很显然所有的矛盾啊,所有的矛盾都聚焦到了那个阿尔法一上了,那现在也就是说那个阿尔法一,你是不是能够把它计算出来的问题,一旦把那个阿尔法一计算出来了。
你就可以知道阿尔法二,阿尔法三就是阿尔法四,也就是阿尔法打T,而把所有的阿尔法大T都求和,你就知道了,这是你的P阿尔法一是个核心问题,阿尔法一等于谁呢,还是那个老样子,还是那老样子,阿尔法一。
它就是阿尔法一嘛,按照我们前面的定义,你把热烈的阿尔法一展开看看它等于什么,不就完了吗,阿尔法1I阿尔法1I很显然也是个概率,按照我们前面介绍的阿尔法一,I是应该是等于O1。
然后呢是I1等于QY没问题吧,I1等于QY,然后呢这个是个怎么办,下面有没有同学能够给给一点意见,这个联合概率怎么计算,很显然,这是一个关于两个随机变量,O1和I1等于QY的联合概率。
那你想想这个式子的概率值,我们怎么样能够通过一些已知量把它表示一下,换句话说他应该等于什么,按照我们前面讲到的放在这吗,联合概率不知道等于多少,联合概率概率,联合概率不知道等于多少。
你可以把它拆成边缘概率和条件概率,条件概率和边缘概率的形式是吧,这个地方稍微需要仔细一点,就在于谁作为条件O1是作为一个,你看看两个随机变量的联合概率,我拆成,把它拆成了条件概率和边缘概率的乘积的形式。
而你看看这两部啊,这一步这一步说的是什么,这一步说的是,在第一个时刻状态等于QI的条件之下,观测等于勾一,那么这个不就是等于那个BIOE吗,这是注意啊,这是说的是还是那样画图啊,如果你真的琢磨不清楚。
你画图,这说的是在第一时刻,第一时刻I1I1等于QI的下O1吗,那就是由状态决定我们的观测,这不就是那个BEOBIOE吗,我们的观测概率矩阵,那下面这个是什么,下面说这个式子说的是I1等于QI。
I1等于QI,第一个时刻等于QI的条件由谁来决定,是由我们的派I那个,初始向量来决定的,而我们知道,当我们已知拉姆的条件之下,这里的B和派都是已知的是吧,所以说啊那这样的话阿尔法1I就是已知的。
就像刚才我所说的,看这里的狮子,初始值阿尔法1I,阿尔法1I就等于派I乘以BIOE,这个式子怎么得到的,刚才已经说了是吧,阿尔法1I知道了,有了阿尔法1I我们根据DT表达式。
那这个时候当我们知道了阿尔法TJ的时候,我们代入到这个式子里面,就可以计算出阿尔法T加一啊,前当我们知道了阿尔法T,就可以计算阿尔法T加一,再把阿尔法T加一带到这儿,就可以得到阿尔法T加二依次向下。
最终我可以计算出来的就是谁,就是那个阿尔法T阿尔法大T是吧,阿尔法大T,而我知道当阿尔法大T有了以后,进行一个sum求和,这个时候就可以得到这里的PO,而我们PO就是我们在已知拉姆达条件之下。
希望得到的观测序列的概率值,我们的求解对象好吧,看看这一部分还有什么问题吗,当然概率计算远不止这一个,后面还有很多,还有很多个,我们就不一一介绍了啊,但是呢基本的逻辑是一样的啊。
就是从一个量啊得到另外一个量,只不过中间的计算步骤啊,使用我们的java规则,乘积规则和那个齐次性假设啊,那个那个其次假设和观测独立性假设啊,这一系列的这些已知条件,你做一个计算就可以了啊。
这些结果呢就摆在这,有兴趣的同学哈,你会记住自己看一下啊,自己看一下,当然这些中间的结果啊,我们计算过程你是你你有兴趣看,没兴趣就就算,但是这些中间的结果,你知道是可以通过我们的已知量。
可以把它计算出来的,后面我们用的时候直接拿过来用就可以了,好吧,这是关于第一个问题哈,第一个问题,第一个问题解决了以后,我们看第二个问题,第二个问题呢称之为学习问题啊,他说的是已知观测啊。
已知观测要把这个模型构建出来啊,这个问题很厉害啊,要把这个AB派都需要搞定啊,这个问题呢就比较麻烦,为什么麻烦呢,是需要看一下这个模型,我们前面讲到过啊,就是在当前这个模型当中。
状态状态状态观测观测观测,现在呢我们仅仅知道的是观测,就仅仅知道的是这个东西,还需要把ab和派都需要搞定,那这个时候呢最麻烦的问题就在于,I我不知道啊,这里的状态序列我是不知道的。
那这个时候的问题求解就牵扯到另外一个话题,就叫做带有隐变量的计算问题啊,带有隐变量的模型求解问题,那这个时候呢我们可以借助另外一个嗯算法,叫做期望最大算法啊,所以这个时候呢需要我们把期望最大啊。
介绍一下em em介绍完了以后,我们回过头来,把em代入到我们这里的求解过程就可以了,Em3,em算法是用来求解带有不完全数据的模型的,计算的啊,所谓的不完全数据哈。
这里的不完全数据就是我们的观测随机变量,那就是我们的观测啊观测,然后呢完全数据呢就是带着观测,还带着我们的隐变量,那这个时候呢因为不同的这个模型和算法,它们的符号不太一样,我们需要做一个对应关系啊。
做一个对应关系怎么对应,那这里所介绍所谓的隐变量Z啊,这里所谓的隐变量Z,就是我们马尔可夫模型里面的状态序列I啊,他俩是一回事,而这里的所谓的观测随机变量,Y就是我们马可夫模型里面的观测序列O啊。
他俩是一回事,好吧,就是em算法里面用YZ来表示,但是在HMM里面是用go i来表示啊,你知道他俩对应关系就可以了,那下面的问题就变成了,当我们不知道I啊,或者说我们不知道隐变量Z隐变量嘛。
就是我们不知道的时候啊,但是呢我们虽然不知道它的值,但是很显然它是存在的,那这个时候我们怎么在隐变量存在的条件之下,我们要把完全数据的联合概率计算出来的,问题啊,就这么个东西。
看下面当含有隐变量Z的概率模型啊,我们的目标是极大化观测变量Y,关于参数theta的,关于参数theta对参数theta的对称,自然自然函数啊,就是参数theta的对数似然函数的极大化的问题。
那这个时候呢,我们看一下这个对应自然函数对数,虽然函数呢就是在条件之下,西塔之下Y的一个呃连上外率需要注意一下,这里的Y哈是个是个序列啊,因为这里的是个序列嘛,所以这是个联合概率啊。
不要认为这里的Y是一个嗯,这个什么不是只有一个随机变量,你或者说你可以把这里的Y,认为是一个随机向量啊,由若干个随机变量组成的一个随机向量,所以说啊这个时候还是挺复杂的。
复杂还就体现在不仅仅是由我们的这个呃,观测变量Y,还有所谓的隐变量Z啊,还有所谓的隐变量Z,同样哈从这一步到这一步,用的是我们的加法规则啊,这没问题,然后呢从这一步到这一步,我们继续把它展开。
因为这里的YZ是联合概率,所以可以拆成条件概率和边缘概率的乘积,所以这个地方是用的乘积规则好吧,最后呢我们需要得到的就是关于对数,自然函数的对数,似然函数的极大化问题就是下面就是极大化。
下面这个式子七大画,下面这个式子呢高出来,带给我们带来很大的麻烦啊,这个式子还是又有log又求和是吧,他又带着一堆成绩,还挺麻烦的,那最差的极大化怎么办,怎么怎么完成,我们下面有个策略,我们看一下。
因为很显然这个求极大化的过程,我们需要进行一个迭代过程,需要迭代的计算,既然是迭代的计算,我们比较一下对应自然函数LC,它与第二次迭代以后的对手,自然函数LCI之间的那个差值,注意啊,这里的参数。
Theti,代表的是我们在第二部已经得到的那个参数值,因为在第二步那个参数值我已经知道了,所以带入到我的私人函数里面去,这里的自然函数LCI也是已知的,那现在我需要看的是我的优化目标。
LC塔就是这个式子啊,就是这个式子,我的优化目标和在第二轮,已知C塔I以后的那个LC塔I之间,的差值是多少,我分析一下他俩的差值,这是一个常用的策略啊,什么意思呢,就是当这是我们的theta。
这是我们的LCA当我们这个LCA这个很复杂啊,这个函数形式啊,或者说我压根可能就不知道,但是呢我又希望找到它的极值,比如说极大值,那么很显然这个地方是我们要的C大箱,我们很显然是要得到这个最大型。
但是呢这个函数形状我又不知道,那这个时候怎么办,往往我们会在任意时刻找到一个西塔值,作为CA0是吧,然后呢我我既然又不知道这个函数长什么样,那怎么办,我看一下,如果我知道他在lc ti的时候的一个值。
比如这个这个值我知道的,那这个时候我看一下整个的函数,基于这一点的时候的一个函数形状,能不能表示出来,换一个角度啊,就是说如果我能知道它,整个函数和一个定值之间的关系,我找到的时候。
其实整个的函数其实加上一个常量,是不是也已经知道了,当然这是一个简单的一个思路,因为这里的C塔零是在某一个位置上的,一个参数值,这个位置上参数值带入到LC塔以后,这个具体的位置。
是会随着我们的迭代过程发生变化的,也就是说我我要找到一个和某一个时刻的,lc ti之间建立某种关系,有了这种关系以后,我只需要把整个的函数形状表达成,关于某一个时刻。
c ti的这个差值的大小的形状就可以了,而我下面的问目标只需要使这个差值怎么样,是不是仅希望使这个差值尽可能的小,是不是就可以了,那是不是就可以趋近于我原函数的一个情况。
而我们知道使得我这个差值尽可能的小,又使得这个这个差值达到一个,尽可能大值的时候,就趋近于我的原函数的一个极大值的情况,这是我们一般的一个策略啊,所以我们一般需要看一下当前这个LC塔和它。
它在一个具体参数位置上的,那个那个已知函数值之间的差值,我们看一下这个结果是多少,那么看下看下面分别代入哈,分别代入就是把LC塔放在这后面呢,很显然就是LC塔I啊,LC塔ILC塔I嘛。
就等于log p在lc ti在c ti条件之下,Y的概率值啊,这个从这一步到这一步就是个代入,那么下面一个从这一步到这一步,为什么是的就有点复杂了啊,但是仔细一点就没问题啊,这一步在这啊。
这是没问题的问题,就便于这么个式子变成下面这个式子,他俩是怎么得到的,到这儿是怎么来的,其实并不复杂,你可以看到这里的SAMZ还在这里,是PZCYPZC,它条件之下Y这里还能是个PC塔。
条件之下ZPC它条件之下的Z啊,比如说行这一部分在这没问题,那很显然是多了这两部分,那多的这两部分一个在分子上,是一个在分母上,而且这个时候的两部分相同,那也就是说分子分母同乘了一个条件概率。
我们知道条件概率,这样的是不影响我们整个式子的,所以这个时候,也就是说从从这一步到这一步,就是在我们这一项当中的分子分母,分子分母上啊,同乘了一个PYC,它I条件之下Z的概率啊,就这么一步啊。
这个没什么太多可说的,然后呢从这一步到这一步呢,可能会发现哎我们得到的是一个大于等于,比如上面这个式子啊,上面这些式子是大于等于下面这个式子的,为什么上面这个式子大于下面这个式子呢。
我们需要借助一个所谓的琴声不等式啊,这算不等式形成不等式哈,这个我们是数学上的一个不等式性质啊,你拿过来直接用就可以了,有兴趣的同学你可以查一下这个数学课本啊,这个地方我们直接拿来用就可以了。
他说的是什么,他说的是log萨姆拉姆达Y哈,是大于等于sum拉姆达log y啊,你就这么简单看理解就可以了,log萨姆拉姆达Y大于等于萨姆拉姆达log y,那么比较一下。
看一下log sum lambda外四部分是吧,Log some lambda y,log sulambda y按说是大于等于SULAMBDA,log y看看下面大于等于。
lambda log y明白怎么来的了吧,所以就是前成不等式的使用啊,这也没什么可说的,哎呀好了,我们继续往下下面一步呢就不好理解了,就从这儿到这儿是怎么来的。
从这到这会发现这里有个log PCI条件之下,Y的时间概率跑哪去了,就这部分哈没有了,跑哪去了呢,跑这来了,跑这来跑这来吧,你这个logo就没有了,那为什么这个地方呢,我们需要分析一下。
分享很显然这个地方如果是log log变成log a b,比上log log a log b等于log a b log b嘛,这个时候挺好办,但问题麻烦的就在于,它前面还多了一个sum z p y c。
ti条件下Z的概率,那这一项里面没有这部分,所以你就不能把它提供因式提出来,然后变成log log是吧,那问题是嗯能不能把它凑一下,怎么凑一下,就是把这一部分式子,放到前边了,可不可以。
当然可以还是不可以,我们需要计算一下这个前后之间加上以后,是不是发生变化是吧,是不是发生变化,还会发现一个很好的一个结论是什么,一个很好的结论就是这个式子本身上,就是这个式子SZ,然后是PZ条件之下。
yc ti这个式子等于几啊,这是个条件,概率是关于谁的条件,概率是关于随机变量Z的条件概率,而前面又是个SAMZ,我们知道这个式子我不管后面这两个条件啊,不管这两个条件,因为这两个条件是已知条件嘛。
当已知条件之后,关于Z的时候,因为我们知道这里的Y是我们的观测变量,这里的C塔I是我们的上一轮的已知参数,都是已知的嘛,在这两个已知量的条件之下,Z随机变量要进行一个求和,而我们知道这个式子一定等于几。
一等于一,注意哈,这仅仅是这个式子等于一,不代表哈这个式子,换句话说,你看看这个式子里面,随机变量Z在这是不是也有随机变量Z,所以说这个式子即使等于一,那么这个式子也不等于后面这个式子。
你不能把这个式子你不知道不等于一吗,一乘以任何值不都问一嘛,不行,是因为这里的随机变成Z和这里变成Z有关系,而这个地方是个乘积,所以sum求SAM的求和是对这个乘积的求和啊,这个地方需要注意一点。
但是呢这不影响什么,这不影响我发现在这一项上,如果我加上一个p z y c ti乘一个PYC啊,这还有个log,Log p,YCA是不影响的,为什么,因为这里的Z随机变成Z,在后面这一项里面是没有的。
所以这个地方我等于是乘了一个,一一乘以这个式子,而这个时候一凑,你会发现哎,这一项和后面这一项我就可以,形式上就可以把它统一起来了是吧,然后呢,这个地方就变成了LV减log b。
那这个时候的这一部分就自然的出现在了,分母部分上了,好吧啊,这个这个推导过程啊,如果你觉得这个推导过程还有问题,回去以后好好看一下,我们只要结论啊,我们要结论要什么结论呢,我们看看我们现在手头上。
一个得到一个什么结论,我们手上得到了一个LC塔,减去LCI要大于等于这个式子,要大于等于这个式子大于等于这个式子呢,我们看看就像下面这个式子,就像下面这样以后哈,我们因为我们知道啊。
这里的这个LCI是个已知量啊,在DI流的时候是吧,我们把这个减LC的I扔到等号的右边去,因为等号右面去之后,这个地方就变成了加上一个LCI,变成了LC塔式大于等于这个式子啊,就是下面这个式子。
令lc ti加这一部分等于一个B,那么得到的就是LC塔I是大于等于B西塔,西塔I的,LC的I是大于这个式子的啊,换一下看看我们知道一个什么东西啊,我们要求一个LC它的极大值。
但是呢我们通过刚才的分析会发现,我现在的LC塔大于等于下面这个BCACAA,也就是说我得到了一个下界函数,就是原函数的下面一条函数,而我们又知道在下面这条函数如果求极大的话,它的一个极大位置。
应该就越来越趋近于我原函数的极大位置,这是想这是显然的,因为同一个例子,比如说呃,我们班级里面学习成绩最不好的,那个同学的成绩都有一个大幅度的提升,我们学习好的同学肯定他也必须要越来越努力。
就是我的下界函数都越来越大的时候,我的上界函数也趋近于我的最大值,那这个时候下面的问题就转化成了,我只需要使这个B函数它的极大化,来代替原函数的极大化,那好了,那么对B函数的极端化呢,我们分析一下啊。
B函数展开以后,这个式子也挺复杂,但是呢我们加以分析会发现,首先这个lc ti是不需要的或者不影响的,因为它是已知量,在DI里的时候,他已经算出来了,而这里的这个分母部分,分母部分我们也不也不影响。
应该都在大是吧,也不影响,那这个时候只剩下了分子部分,尽可能的怎么样极大化就可以了,那这个函数我们再给它起个名字叫做Q函数啊,Q函数,那么em算法的一个核心就在于,找到带有隐变量的模型的Q函数。
而Q函数就摆在这个位置上,我们需要唯一需要做的就是分析,Z是我们的这个呃状态变量,Y是我们的观测变量,把这个能够对应起来以后啊,对应起来以后构建我们的Q函数,下面的问题就是当我们求原函数。
原函数的极大化问题的时候,转化成了它的下界函数B函数的极大化问题,而通过一系列的分析,我们会发现,B函数的极大化又等价于Q函数的极大化,所以问题就转变成了Q函数,而Q函数当中既包含我们的随机变量。
Z又包含我们的随机变量Y,只需要把它套入到公式里面去,就可以得到原函数的极大化,好吧,看下em算法,em算法其实就两步,第一步嗯先初始化我们的CA0啊,随机给出一个参数位置,然后呢第一步给出异步。
所谓的异步呢就是构建我们的期望,期望呢其实就是刚才那个Q函数,有了Q函数以后,第二步M不就是使我们的Q函数极大化,Q函数极大化的那个最优参数,就是原函数的极大化,最优参数好,那下面的问题就在于回过头去。
下面我们现在有I有OI是我们的隐变量,都是我们的观测变量,现在我们希望找到的是带有隐变量I的,联合概率的极大化问题,那就是原函数我们知道挺复杂,转变成它所对应的Q函数的极大化就可以了。
看看这一部分有什么问题吧,那我们就继续啊,下面其实有了这个工具以后,下面其实就是一个对应的问题,对应求解的问题,你把符号放好了,继续下,嗯好学习学习算法,将我们的观测序列啊。
就将我们的观测序列作为观测序列,O将状态序列作为隐隐变量或者引数据I,那么一马可夫模型呢,就是带有含有隐变量的一个概率模型啊,还有隐变量的概率模型,那这个时候p o lambda啊。
都是我们的那个观测嘛,p o lambda展成PO在I条件之下的PO,然后再乘以pi,就是刚才我们所说的PO是我们的观测变量,I是我们的隐变量,那这时候就完全数据就是OI吗。
完全数据OY那这个时候就完全对散函数,就是log p o i lamba,那这个时候就像刚才我所说的,异步定义Q函数,Q函数就在这啊,对应起来放在这就可以了,那这个时候呢你会发现在Q函数当中。
我们把联合概率拆开以后,把联合概率拆开以后,拆成了一个边缘概率和联合概率乘积,再出一个边缘概率,这个联合概率乘以联合概率,再出一个边缘概率的形式,注意一下,这里的变异概率是在拉姆达一拔。
就说他是在上一次的那个参数,已知的条件之下的边缘概率,所以这个时候的分母部分哈也是不影响我们的,所以我们的Q函数可以进一步,削减成下面这个式子好吧,约减成下面这个式子,而约定成下面这个式子里面以后。
我们可以看到剩下的就是联合概率的形式啊,POY的形式,POI等于什么,下面给出POI的定义,POI定义,注意一下,这里是O和I的联合概率,就是我们的状态序列和观测序列的联合,概率的形式,既然是联合概率。
就意味着当前概率模型要从I1I2I三,一直生成到I大T,并且对应时刻的O1O2,一个O大T也需要生成,也就是说,我们需要把当前这个姨妈可夫模型生成出来,而生成算法在我们前面已经介绍过了,怎么生成。
看一下,先通过派生成I1,然后生根据B生成I1所对应的O1,再根据A生成A1,A1所对应的I1所对应的I2,再根据B生成I2所对应的B2,依次向下生成就可以了,所以说你会发现这个联合概率要拆开以后。
就是根据刚才我们的派币ABABAB,生成我们的整个一马可夫模型就可以了,而生成过程当中啊,而生成过程当中你会发现派不知道B不知道,A也不知道,因为我们现在知道,谁知道我们的目标。
就要把那个兰姆达先生找出来,所以这个地方的ab派啊一概不知一概不知哈,没关系,恰好这个地方做的是一个对数,自然你看了吗,这太有意义了,恰好是个对数,似然函数的一个极大化的求解问题。
而我们知道里程的一个对数,求垒成的球队数就变成了什么,就变成了累加,这个时候就变成了几部分,第一部分派是作为一部分,第二部分B作为第二部分,第三部分A把它作为第三部分,那么整个的累乘变成了累加,累加呢。
我们把它翻成变成三部分的累加,哪三部分呢,就像刚才看到的,这是第一部分,仅包含那个pad累加,这是第二部分,包含我们那个A的累加,这是那个第三部分包含B的累加,也就是说。
刚才刚才的里程通过落个求和就变成了累加,累加呢我们单独把它们归归啊,分分组啊,分分组哪,分成三组,哪三组呢,派的一组,B的一组,A的一组啊,变成这三组的累加,那下面的问题在于我们要对累加的和极大化。
李家的和的极大化的问题转化为了这三组啊,这三组分别极大化的问题,和我们使得第一组极大化求出谁啊,求出派星,第二组极大化我们求出那个B型啊,一样A型,第三组我们一起使它极大化求出那个B型。
这样的话呢有了A型,B型和派星,这个时候就组成了我们的,拉姆达星我们的模型就是了,这是基本的一个思路,那下面的问题就在于使这三部分分为极大化吧,看一下分别替代化分别极大化的问题啊。
其实就是一个带约束条件的,因为我们知道我们在对派进行极大化的时候,我们知道在第一个时刻可能取值的,所有的状态的概率和一定为一,这是没问题的啊,因为我比如说我第一个时刻能取三种状态啊,在等概率的时候。
每一种状态肯定显示1/3,三分之1+3分之1+3分之一是一,有同学说不等不等概率的时候,不等概率的时候,虽然他们的概率值是不一样,但是概率和一定为一啊,这个没问题,所以一定是带着约束条件的极大化问题啊。
带着约束条件的极大化,而这个问题呢,其实按照嗯我们最简单的一个方式,分别对我们的派I求偏导就可以了是吧,派I求偏导让它等于零,得到一个关于派的一个表达式啊,这个时候你把这个表达式表示成关于派的结果。
我们就可以看到,这时候的派I就是所谓的派星I啊,最优的派啊,这个推导过程啊,这个推导过程就不展开了,原理其实是一样的好吧,这是关于派星,第二部是关于那个A型,同样这是我们的那个累加和。
里面关于A的部分条件呢,同样求和为一啊,这个时候还是使用啊,刚才那个逻辑啊,还是刚才那个逻辑,你把A型的最优A的最优解A型找出来,注意啊,这里所有的这些参数啊,这些Z塔,这里的这个伽马。
都是在我们刚才所介绍的那个第一步,概率计算过程当中的中间结果啊,刚才一直在强调啊,第一步的工作就是为后续工作提供中间结果的,这些可以看一下,或者参考一下第一步的工作就可以了,同样这里的关于B啊。
B型式计算也是同样的逻辑啊,同样的逻辑,那么总结一下,总结一下,当我们要求解啊学习算法的时候,输入的只有我们的观测序列,O输出的是我们的一马可夫模型,拉姆达ab派,第一步随机初始化A0B0和派零啊。
得到我们的兰姆达零,那这个时候呢递推递推的过程,刚才已经给出来了,迭代公式已经有了吧,有了迭代公式以后,我们不断的进行收敛收敛,最后就一次得到ANBN和PN构成,我们的蓝不蓝,最后算法就可以终止掉了。
好吧,这是我们关于这个第二步啊,关于这个学习任务的一个介绍,学习任务的介绍,其实你会发现核心就在于QQ函数的构建,为什么要构建这个Q函数,是em算法里面解决的啊。
em算法里面告诉我们要求解带隐变量的模型啊,的联合概率必须要啊构建Q函数,让Q函数最大化就OK了,所以呢有了em算法回去以后再看看,有了em算法以后,这里的Q函数定义符号上对应起来。
那下面的问题呢正好hmm里面告诉我们,对数自然函数是在累乘上做累乘变成累加,分别变成了三部分的和每一部分进行最大化,得到的就是关于三部分的三个量派ab的最优解,就构成了最优的兰姆达星,好吧。
这是关于第二个问题,看看有什么问题吧,那我们看看最后一个问题,最后一个任务啊,做编码或者预测任务啊,他是知道模型以后还知道了我们的状态序列啊,状态观测序列我们要求的是状态序列的,在概率巨大的条件之下。
我们的状态序列需要构建出来啊,这是一个求序列的一个过程啊,求序列的过程,这个过程呢我们使用所谓的维特比算法,维特比算法的核心是一个,类似于我们的前向概率这么一个东西,但是呢它叫做什么呢,它叫做呃。
在T时刻,状态为I的所有单个路径的概率最大值,这个德尔塔ti啊,德尔塔ti他说的是在所有可能的啊,在DT时刻,T,在DT时刻状态为I的所有单个路径的概率,最大值,现在我们的目标是要求一个状态序列。
A1A2点了点状态的一个序列,既然是状态的一个序列,那么比如说像IT这个时刻到T的一个时刻,等于,QY假设哈IT等于QY,那么到DTDT的时候等于QY的,可能所有的可能我们比如说我们从I1开始。
I1C是一个状态,第一时刻的状态它可以是Q1Q2,第二点遇到什么QN从I1出发,从I1出发,从I1这N个可能的概率出发,我们依次可以得到I2I2,同样是Q1点点移到QNN种状态。
那么这个时候从I1的N种状态,那么到I2的N种状态,那么就有N乘以N个路径,那么同样依次往下,I1点点一直到QN,然后呢一直到IT等于QI那么很显然啊,从这种排列组合我们知道其中所有的路径,所有的路径。
我们把其中那个能够到达T的所有路径里面的,那个概率最大的拿出来,把它命名为德尔塔ti啊,这是德尔塔ti的一个含义,那我们有了这个德尔塔ti的这个定义以后,那么同样我们需要建立的是德尔塔TI的一个。
递推关系式,递推关系式,那么就是所谓的D德尔塔T加1I和德尔塔,看一下,和这里的,德尔塔T之间的关系,你看可以看到非常类似于我们那个前行概率啊,德尔塔T加一和这里德尔德尔塔T,其他的两个量。
AGI和这个BIOT加一都是已知值是吧,那这个时候也就是说啊,其实IT是因为是任意一个时刻嘛,你往前倒I2是吧,I2是在所有I1I2,所有可能路径里面的概率最大值,那么从其样同样I3是从I1到I3里面。
所有概率这个呃出现的路径的概率极大值,而我们知道I1到I3,我们只需要知道I1I2,只能决定II2到I3,那么递推关系式嘛就这么一个逻辑,那这个时候我们只需要把这个路径里面。
最概率最大的一个路径节点记录下来就可以了,那马克那个出现在路径上的概率最大的节点,记录下来,记录下来以后,当我们从第一个节点到最后一个节点,便利完成以后,就是我从第一个节点到最后一个节点。
就是那个I大T,我从IE一直按照这个概率最大,这个条件走到I大T的过程以后,那么在这个路径上,所有的节点都可以保证,是出现概率最大的路径节点,而这个路径就作为我当前的最优路径,就是那个预测算法啊。
这就是预测算法维特比算法的一个基本含义啊,它其实最核心的就是在这里的,德尔塔TI的一个定义,好吧,这样的话预测算法不作为我们的重点介绍,了解一下就可以了,如果有兴趣的同学们可以在一块讨论一下。
那这样的话,以上的内容就作为,我们今天关于一马可夫模型的所有内容,我们回过头来做一个简单介绍,四部分啊,四个内容其实是五部分啊,加em算法模型定义,lambda ab拍啊。
这里面的含义回去再看一下第二部分,概率计算,就是那个前加概率的递推关系式,重点在于每一步的递推过程,你需要有一个依据和根规则啊,这个依据和规则你需要确定,第三步学习算法。
你需要带着隐变量的联合概率的计算,需要使用em算法,回去以后看看em算法的逻辑,有了em算法以后,核心就是Q函数定义,这个时候只需要把符号进行一个一一对应,就可以了啊,联合概率的计算。
第四部分预测算法就是维特比算法啊,就是我们的那个德尔塔ti的含义,回去我再看一下,看看这一部分里面还有什么问题吗,到一个什么程度啊,就我们这一周核心聚焦的原理部分啊。
如果我们简单的回顾一下我们这一周的内容啊,我们这一周处理完了这个呃,原理部分很基本的这个术语和概念啊,这些内容呢仅仅是开始,当你接触每一个模型的时候,就像刚才我们所介绍的hmm里面那个呃,倾向概率是吧。
那什么七次马克分,假设这些东西都是术语描述的啊,你必须要能够,还有刚才同学那个同学提出那个问题,我为什么没有理解呢,我觉得可能就是你所那个提出那个疑问,其实并没有把它,通过一些更准确的方式把它表达出来。
所以造成了没有get到是吧,问题就出在这些基本术语的使用上啊,所以这部分内容你每每掌握一个模型的时候,这些基本术语必须要把它掌握,很这个术语的掌握和使用还是非常重要的,沟通的一个基础。
然后看一下我们的嗯,这一个阶段啊,我们介绍完了线性回归,介绍完了逻辑回归对吧,从线性的拧成分类的是吧,然后呢直持向量机软件隔硬间隔和函数和SM啊,这是我们一个逻辑,另外呢觉得数E3C4。5开的数。
核心问题就在于它的特征,就是特征分类的依据是什么,ID3是信息增益,C4。5,信息增益比卡的数是基于指数啊,数的定义啊,数模型的定义,然后呢BOOSTIN加上模型线下分布算法啊。
由这个boosting方法采用决策树作为奇函数,就构成了BT,在BD题里面,我们啊还有那个残差啊,很重要的那个残渣学习是吧,然后呢在GBD题里面,我们通过函数空间的分析。
用我们的损失函数对于模型的负梯度啊,作为我们残差的拟合对象,然后呢x d boost我们非常重要的一个工作,两个改进正则化项加上二阶梯度展开是吧,当然其中还包括那个呃。
那个那个最最优的那个损失分类依据啊,他和前面这三个是不太一样的,是吧,这个你需要了解,然后呢朴素贝叶斯那个推荐独立性假设啊,他是在条件什么条件之下,标签条件之下各个特征之间的独立性啊。
然后呢一码可控模型今天我们也介绍了这,当然我们还包括我们的EMM算法呃,这仅仅是开始啊,其实你会发现,还有很多的内容是没有,包含在我们这个阶段的学习当中的,比如说人工神经网络。
当然这在我们后续课程里面会有啊,也就是说呃到一个什么样的阶段呢,你必须要掌握我们整个模型当中的原理部分,比如说人工神经网络里面,模型结构就是这个模型是什么,长什么样。
你需要知道有的模型结构有最高最核心的,它的误差反向传播算法啊,呃相邻层怎么穿,跨层怎么穿啊,这个你都必须要非常了解,否则的话你看后面越来越复杂,CN无非就是加上池化层和卷积层是吧。
RN那就加上我们的中间的中间状态,加上一个时间循环,当然这种改进,你必须要是严格依赖于前序模型的工作的,基础上,你才能够理解人工神经网络,你你你前期工作这是谁啊,其实就是逻辑回归,逻辑回归,你掌握了吗。
逻辑回归的前序,我就是线性回归,线性回归,你长得怎么样,如果反过来,如果你前面都掌握了,其实到人工神经网络之类,其实相对来说比较比较能够理解的,那么同样后面哈啊CRF呢今天并没有介绍。
但是呢我会把一些材料整理一下,发到群里面,你会看一下,其实CRF和HMM的呃,在模型定义上就有类似的地方,因为它们同属于概率图模型,所以呃分析上其实也有很多相近的地方,当然规则上是不太一样的。
但是这些相近的地方,对你后续的工作其实套路都是一样的吗,你只需要严格分清楚,它在当前模型里面是怎么被定义的就可以了,同样的道理,在cf的学习过程当中使用的工具叫做最大商,M商最大。
那这个时候你需要把最大熵模型了解了以后,套用到cf里面去也就可以了,当然这一部分还仅仅是我们整个学习过程当中,的开始部分,远不是根本就没有结束是吧,所以这个时候有问题很正常,有什么问题。
我们还是需要在群里集中的进行讨论,我们的课程都是这样,我们我我认为我们的课程是信息量非常大的,课程,两个小时里面,我们基本上需要把呃一个模型的细节部分,能够重点的给他一个介绍,所以说啊。
你不可能寄希望于听这么两个小时就听懂了,否则的话我觉得哼首先你就没有必要再听了,第二呢我觉得对你来说,价值或者意义也并不大对吧,当然你听不懂的时候,需要反复的进行理解讨论消化吸收,我们的答疑群一直都在。
当然可能是刚刚课程刚开始,大家还没有习惯这种方式,但是在我们历往届的这种班级里面,都是充分的在利用这个环境,好吧好,我们这一个阶段的学习呢就算是告一段落,刚才已经说了,这仅仅是开始,有什么问题。
我们及时在群里进行学习和沟通好吧,如果没问题的话,今天我们就到这,谢谢大家。
1447-七月在线-机器学习集训营15期 - P1:01-CV-1-行人重识别项目(ReID)背景与基线方法 - 程序员技术手札 - BV1ASste6EuZ
好,Um,各位同学大家啊,晚上好,然后这个我们今天的内容呢,主要是这个CVCONDIVISION的这样一个方面的呃,项目的课程的一个启动的课程,然后上半节课上半节课程的话,我们主要会跟大家去讲啊。
这个方向的项目的一些generality的一些背景,然后我们要做一些什么样的事情,那这件事情有什么样的意义啊,涉及哪些技术点,然后下半场的课程呢,我们就会follow我们的这个呃。
上半场介绍的这个项目的背景,然后深入到我们的这个代码的环节里面去,会从一行一行敲代码的形式,会跟大家去啊讨论和这个深入,就是它的这样一个实现的过程,然后并且呢我们敲的这些代码,其实都是可执行的代码啊。
甚至是能够在我们的CPU的这样一个额,就是在我们的笔记本的这个环节里面啊,都能够去跑起来的,所以这个就是希望大家自己在课后的时间呢,能够啊再复习一下啊,甚至对准我们的一些录播的视频。
然后再把代码给自己敲出来,就不要再问我或者助教,或者其他的同学要代码啊,就是哪怕自己你啊对着这个敲一遍也好,比你直接拷贝过来啊,去这个run1遍是来的有用的多好啊,那我们就开始我们今天的这个内容。
那今天我们主要的啊,topic是这个目标的一个重识别啊,就是我们的ready id啊,也称叫做REIDENTIFICATION,注意这个raid的这个简称呢,简写呢我写在这里啊。
所以就以后大家如果要在项目中,或者什么样的简历中出现啊,他的这个简写的话啊,是希望能够对齐这样的一个额默认的一个,标准的一个形式啊,不要再去杂七杂八去去,去用自己其他的这个方式来啊,显得专业一点。
那其实事实上嗯,其实事实上事实上我们叫目标重识别啊,或者叫啊这个ready id,那本质上它其实会有啊,嗯主要啊形式是有两种,第一种呢是我们称之为叫人体,行人的这个重识别,还有一类呢是啊。
vehicle就是我们的车辆的重识别,那这两个主体的这个重识别呢,在我们的啊计算机视觉的这个技术,识别识别技术领域呢,其实都会有啊,比较啊相通的一些呃算法底层的技术啊,所以我们在我们的项目中。
我们主要会以这个人体的这个重识别,来这个做讲解,然后它所涉及的这些技术套路和代码和框架,其实都挺适配于呃做车辆的这个重识别,所以有兴趣的同学可以在啊我们课程结束之后。
然后再去试试车辆的一些重识别的一些啊,这个尝试一下,然后我们也会啊,一会会提到,就是如何去获取这两个啊场景的这个数据集,好,那我们就首先要去跟大家解释一下,什么叫做这个REID。
那raid呢我们刚才说了是这个目标重识别技术啊,那为什么会出现这样一个技术呢,啊我们知道就是没有任何一项技术,它其实是啊凭空这个想象啊出来的,它总归有一些它的这个啊用处,对不对。
那这个ready id这个技术用处是在哪呢,就是在我们的一些啊智慧城市啊,或者这个智慧交通,智慧安防的这样一个大的背景之下,对数字化的城市,那通常来说呢,就是啊嗯我们知道有很多的这个camera啊。
那camera呢有很多的这个呃相机,是主要是来捕捉我们的一些人脸的,比如说嗯你进银行对吧,或者呃进出一些重要的一些呃要道啊,或者进出一些这个重要的一些场所,那么这种长长长长的这个相机呢。
就是注意这个相机长成这个样子啊,有时候这个相机呢我们也把它称之为叫枪机啊,你有没有看到感觉他是一个啊,比较这个有侵略性的一种啊这种感觉啊,所以他其实是啊,确实他是涉及到这个啊人脸的这样一个捕捉啊。
所以在我们国内呢,其实啊这个数据隐私和这个用户隐私的啊,风险也其实是最近才被提起来,但其实啊在这之前根本没有人care啊,那在欧美呢其实就会做的非常好,就我们在交通的高速上或者路道路上。
我们直接就放这个交通的这个违法识别啊,摄像头,甚至有时候我们看到微博啊,朋友圈啊,就是某一个路口,啪一个杆子上几十个摄像头对吧,但事实上其实在欧美,就大家在以前疫情之前去国外自驾游,你就会发现啊。
在这个西方的国家,它基本上有监控的地方,他其实都会帮你标识出来,就此处有监控,有CCTV啊,或者在这个高速的这个路口呢,他比如说在2km啊,这个之后他要设一个啊抓拍器,那可能他会提前会告诉你。
我们马上要这个拍摄了啊,就他其实是啊会有这么一个,这也就为什么就是啊,AI的这样一个依赖于技术的这样一个发展呢,在国内其实是啊技术迭代挺快,那一方面呢啊就是啊,嗯当然我们的这个从业人员多。
但还有一方面呢啊,其实就是我们的这个数据的这个获取量的,这个比国外呢要来的更加的cheap啊,就是我们的这个嗯这个代价没有那么大啊,因为我们的这个数据隐私的保护啊,做的没有那么好啊,这是扯啊,扯远了。
那我们回到我们的这个今天的这个topic,那我们知道就是这个呢我们称之为叫枪机,也称之为叫人脸的高清的啊摄像机啧,那么他是来抓人脸的,但是你可以看到啊,就是在很多的时候啊,我们的人脸的这个相机呢。
它的成像质量其实是有非常大的讲究的啊,什么叫做讲究呢,就是说我们的人脸的相机啊,对我们的呃这个人脸的这个俯仰角啊,他是需要有一定的这个呃这个限制的,我举个例子啊,就是有些同学可能会啊用这个拍照之后。
可能会用这个美图秀秀等等,类似的这个修图软件来进行修图对吧,但是类似这些修图软件呢就会有一个限制啊,他会说啊这张图片不属于正脸,它无法帮你做几个立体,这个轮廓的这样一个修复啊,所以就类似一样的。
就是如果啊它不能够识别到你的正脸,那我们的人脸的特征的信息,就可能就会被失效啊,所以这就是人脸相机的一个弊端,就他其实是对他的这个拍摄的这个呃,约束条件会比较这个强,而我们的这个raid的技术呢。
其实是不一就不一样了,为什么呢,因为我们raid的技术,其实是对我们整个人体的这个外观来进行啊,recognize来进行识别来辨别的,你可以看到啊,就是我们的这个呃这个人啊。
他在经过某一个路口是长这个样子,但是可能在经过下一个路口呢,他其实正脸是没有被捕捉到,对不对,可能是捕捉了一个侧脸,但是我们从我们的这个穿着外观来判断,基本上是这个人无疑,对不对。
所以我们依然是能够啊识别出这个人,但是此时人脸的识别的这样一个技术是啊,不work是失效了,所以这就是啊为什么,那么我们的REID技术是要来背啊,提出来,所以本质上你可以理解为啊。
人脸的生物特征的识别的技术,和类似这种啊,根据这个外观的这样一个识别的,raid的这样一个技术,它在某种程度上其实是形成了一种技术的,这样一个互补啊,是能够共同去达到啊,我们的这个啊呃这个智慧城市啊。
或者安防监控的这样一个啊需求的,所以这就是啊为什么raid技术啊依然是有效,所以本质上rid他是一个什么样的问题呢,他是这样的一个问题啊,假设啊你有一个查询Q啊,query啊,一个查询Q。
那同时呢你假设在一个大的database里面啊,在一个大型的图像的数据库里面,我们已经有了什么呢,若干张带身份的图像啊,带身份图样就是我知道这个人他的id是几几几,这个人的id是零零几。
所以这个时候的问题就是你的这个query,如何能够去match到你数据库图像里面的某一个,带有身份信息的这个图像,那通常这个database这个图像呢我们把它称之为叫gallery,小G啊。
然后这个也称为叫database啊,所以如果对于一个啊比较理想的raid的系统而言,它其实是能够做到这样的一个mapping啊,这样的一个match啊,然后把这张图像啊找出来,他跟我是非常一致的。
所以我会把啊这个人的身份的信息呢,就会去付给他啊,付给他,所以这样的就达到了这样一个呃,raid的这样一个呃减啊,那么刚从刚才我们的这样一个技术语言的,这样一个描述来看呢,啊同学们应该是大概能够理解了。
就是所谓的这个raid呢啊我们来做识别,对不对,但其实本质上我们还是做了一次什么呢,做了一次搜索对吧,搜索比对,因为我们说要matching嘛,我们要去做一次搜索和比对。
那做这个搜索和比对的这样一个过程,其实啊就是通过我们信息检索啊,或者这样一个图像搜索的这样一个比对的技术,去完成了一个什么样的任务呢,啊完成了一个识别的任务,recognition啊。
大家记住我刚才的这样一个描述啊,啊记住我的这样一个描述,本质上ready是一个这个呃识别的问题,而我们直接去做这个识别,或者说这个分类呢是有困难的,所以我们就改了一个思路,这个思路呢。
就是我们啊用我们这个retrieval的,这样一个技术,就是我们的这个啊检索的这样一个技术,去达到什么呢,去达到一个识别的一个目的,所以这个就叫做我们的这个通过检索的手段去。
啊达到我们的这个识别的目的啊,是这个意思啊,那它有什么样的作用或者意义呢,就有同学可能会问了好,那他的这个意义和作用就在这里啊,我们把它写在这里叫做它的价值,就可以去做轨迹的追踪和这个串联啊。
去做出轨迹的追踪和串联,这是什么样的意思呢,啊你可以想象一下,假设你今天进入了一个刷屏幕啊,刷屏幕,那么你可能啊为了去捕捉我们的用户的,所有的这个轨迹,当然为什么要去捕捉你的轨迹呢。
它其实有背后他的这个商业的,这个数据的价值啊,举例来说,我可能啊就知道你这个人的用户画像是怎么样,你喜欢逛哪些啊店铺也好,或者去逛哪一些这个啊商场也好对吧,那他其实是一个有很大的这样一个。
商业价值的这样一个意义啊,所以,一种非常啊大家能想到的一个解决方案,就是我布满密密麻麻的这样一个摄像头,出来捕捉你的人脸,那为什么是密密麻麻的,因为我们刚才看到啊,类似这样的一些相机啊。
他的角度是比较有限的啊,所以他的可视啊范围也比较有限,所以你为了拍更多的这样一个区域呢,所以你需要有更多的这个摄像头来部署到,Ok,那么对于raid而言呢,啊就是我们其实是不需要那么受限对吧。
我不要拍清楚你的人脸,你只要整个外观就可以了,所以通常raid在我们的这个实际的工业应用中呢,我们会选择这样一个圆形的相机啊,有时候也把它叫做这个鱼眼相机,或者这个半球形相机。
那对于这个半球形的这个相机呢,它的这个可视广角呢,就来的更加的来的更加的大啊,来的更加的大的话呢,那其实就额呃会显得什么呢,会显得嗯把整个成本就会拉下来,因为他不需要非常高清的这样一个啊视野。
OK所以这个就是半球形的这样一个相机好,这个是一个简单的一个科普了,所以general上来说呢,我们其实就是啊有挺多的这个啊,不同的这个相机是在分布在不同的shopping mod,这样一个区域里面。
那么这个时候呢我们的这个某一个人啊,某一个人就进入了我们shopping mode的某一个区域,然后进入这个区域之后呢,那可能会在不同的这个轨迹路径啊,形成一条路径,对不对,但是这个时候啊。
我在每一个摄像头下面,我可以run一个什么呢,检测追踪的一个算法啊,就detection and tracking啊,也就是在每个摄像头下面啊,比如说这个区域里面啊,我知道啊,你某某人啊从这里进来。
然后从这个视野出去,但是这个时候呢,然后在另外一个视野里面呢,OK啊我是从这里进来,从这里出去,OK这个时候呢我会给他分别配分配一个2号id,哪怕一号id和2号id是同样一个人,比如说小明。
然后在不同的这个摄像头下呢,我所有的id都会去啊,就是编码不同的这个啊信息,那其实这个意义就没有那么大了,因为我就不知道我的这个某一个人,自然人他去经过了哪一些嘛。
因为我所有的经过的我都让他打上了新的id啊,所以raid的这个价值呢,就在于,我能够去把所有的这个啊追踪的这些轨迹呢,都串联起来啊,也就是说我会把一号和2号,我会认为他是同样一个id啊。
这样的话我就能够啊,做了这样一个身份的这样一个合并啊,merge啊,我就知道他是某一个人,那这个合并的这个方式呢,其实就会通过我们raid刚才说的,通过检索比对的方式来进行识别。
比如说啊我把下面的上面的加做啊这个gallery,然后下面的就是我们的查询Q,然后这样的话我就能够啊,比对出哪些其实是命中了的,OK这个就是我们的这个raid,那你试想一下,就是你把所有的人的轨迹。
它都合成起来了一个轨迹,那么毫无疑问这个客户的,或者说这个用户的这个啊顾客的用户画像呢啊,基本上也就啊出来了,因为你想想看啊,基本上是不是啊,每个人可能要不就是什么运动风,轻奢风或者这个奢侈品风。
或者什么lady office lady风是吧,或者啊可能有一些多元的组合对,那这样的话我们的这个用户啊,而我们的这个商家呢,其实就可以有更多的这个商业的一些啊玩法啊,在后面啊。
回头我们可以跟大家去简单介绍一下好。
那这里呢我们简单的介绍一下,就是在我们的这个raid的这样一个里面,有哪些的啊技术上的一些挑战啊,难点啊,我们可以看到就是啊raid还是其实比较啊复杂,比较难的啊,尤其是在一些啊这个真实的这个场景中。
对吧,然后因为姿态呀或者呃背包啊,或者有一些撑伞啊,或者骑车啊啊等等啊,其实它会有一些不同的变化,甚至呢就是啊,有时候这个呃因为季节的一些原因吧,那可能啊,或者一些男生可能更倾向于穿这个呃。
这个深色的衣服,然后女生呢可能啊花色就啊多一些啊,或者呢因为一些呃光线的一些明暗的变化,可能也会导致有一些差异,对其实就是啊有挺多的这些啊成像的一些质量,成像的一些啊困难吧,就导致了我们的匹配。
可能也会出现一些不同的这个啊挑战啊,这个就是刚才我们说的一些啊,技术的这个互补啊,就是我们的REID,作为这个人脸的这样一个,生物特征的识别的技术,可以去做一些互补,而事实上其实在我们的一些实际的啊。
工业界的一些部署啊,应用的来说呢啊也是这样,就通常在我们所有的shopping mall的这个出入口,就是我会啊布我同时布置我们的人脸的相机,以及我们的这个啊REID的这个圆形相机。
也是半球形相机和我们的这个枪机啊,会同时来部署啊,为什么呢,因为这样的话我会在啊出入口,我会完成一次啊绑定啊,这个绑定就是说我既然是在同一个摄像头嘛,我就知道诶这个人脸和这个人体呢。
他其实是能够被啊这个绑在一起的啊,我就知道了哪个人体的这个外形啊,他跟哪个人脸的face id是能够啊绑在一起。
好那刚才说了这些人对不对,那车呢其实也是一样啊,就是我们可以看到就是我们的这个车辆啊,就是也是能够做一些车辆的入id啊,那有同学通会说了,人我能够理解啊,就是啊每一个个体是有差异的,对吗啊。
那车你怎么理解呢,OK那车其实是嗯当然了,就跟人一样对吧,我们的车牌也是唯一的身份的I啊,id的这个信息的id对吧,就是能够去定位到,但是其实啊,在我们的这个实际的应用中呢,其实也有很多的这个困难点啊。
比如说有一些假牌套牌的现象对吧,甚至有一些新闻你可以留意,就会发现,A在同一个这个商场或者地下停车场里面,诶兄弟两辆车居然是啊同样一个牌照啊,这就有问题了对吧,然后另外的呢就是啊。
虽然我们在这个啊现实生活中,我们同款同色啊,他有很多的这个车对吧,就是啊那可能比如说啊大众的这个帕萨特,那可能每一年啊他其实啊都会有这个升级嘛,啊当然可能相隔一两年的这个升级,外观迭代就比较小。
那早期的这个帕萨特和现在的帕萨特,那其实差异还是啊比较大的啊对吧,早期的可能是啊上汽帕萨特更这个圆润啊,就是然后现在呢会更加的这个啊这个时尚啊,低矮啊,更像迈腾啊类似的这些,所以就是呃在相近的时候呢。
我的外观其实也挺接近的,这就增加了我们车辆raid的这个难度啊,所以就是从真正的这个应用的价值角度来说呢,啊车辆的raid依然有它的这个价值,就刚才我们说了,我们能不能快速从外观来区分出啊。
同款同色不同的这样一些车辆,是来帮助我们去啊,辨别我们的这个啊个体和这个实体啧,那这个图上呢就举了这么一个例子,就是假设啊,某个这个额肇事车辆来进行逃逸了对吧,然后我们来进行这个区域的这样一个。
公安的一个布控和抓捕,那即使他对这个车牌做了一些修改改动,或者说啊用口罩去蒙住了我们的车牌,那我们依然能够通过我们车辆外观的这个信息,比对的这样一个技术呢,还是能够去定位到他的这样一个运动的轨迹。
然后从而达到这个最后啊,跟踪和抓捕的这样一个目的啊,然后说完了前面的一些啊价值啊,或者说背景的这样一个概要,那我们可以大概简单跟大家去啊聊一聊,就是在这两个领域里面,我们分别有哪些的啊。
比较呃这个主流的数据集,来供我们这些去做一些啊技术的一些尝试啊,或者来做一些技术的这样一个评价,那其中对于person reid这个数据集而言呢,啊我们有一个称之为叫三大数据库的一个东西。
就是三大database啊,三大database,那这三大database呢大概就是长啊,这个样子就是啊market1501,然后杜克啊,然后还有这个CUHK的这个零三啊,就是这几个数据集。
然后啊我们的课上呢,我们会跟大家去重点的去介绍这个啊,market1501啊,这个数据集啊,我们会重点去介绍它,然后使用它来进行这个数据的迭代啊,那事实上其实啊对于这个b a at啊,或者字节啊。
或者这个啊云从啊依土啊,那这些商汤啊,矿石啊,这些这个啊在业内啊比较名气很大的一些啊,互联网或者这个AI的这些厂商,他们都在这个领域和这个赛道上呢,都有过不同程度的这个啊刷榜的这样一个成绩。
然后啊这也足见了,足以见啊,这个啊这个这个证明了就是这个技术点啊,会啊在CV的这些啊厂商里面啊,还依然是能够被看中的。
然后对于这个车辆的REID而言呢,啊我们也会有一个数据集叫做miuk id数据集啊,那刚才说的那个啊,数据集和person和这个VK id呢,啊大家啊都可以去问一助教,要一下这个呃。
在大家的服务器的公共目录下的一个地址啊,然后这样的话你就不用下载了啊,你直接就可以用了,然后对于VO和id的这个数据呢,你其实可以啊看到就是也很有意思啊,就是每一组它其实是同样啊。
一个车牌的这样一组id啊,然后不同组呢它其实就是不同的这个车辆啊,当然他可能就是通过在不同这个啊,地段来进行抓拍的嘛,但有前面有后面啊,比较有意思呢,就是啊他车牌出于这个啊数据隐私呢。
是能够帮你被遮掉啊,就涂黑了,那涂黑了其实也不妨碍就是你识别是什么,这其实也从另外一个角度,它帮你规避了,就是你去通过识别车牌来去鉴别我们的啊,车的这个身份的嘛对吧,因为你都把它涂黑了,那怎么涂黑呢。
也很简单吧,他直接就run一个这个车牌的这个检测的,这样一个模型啊,然后把这里面都mask掉就OK了。
好然后在这个ready额,再有一些呃,求职的JD里面其实呃也有一些体啊,这个体现啊,你可以看到啊,就是我举的这个例子,随便找了一个呃这个大厂的一个offer啊,就是啊JD啊,然后你可以看到看它上面写了。
就是在啊城市安全啊,或者一些智慧城市啊,需要有一些啊情人的raid对吧,或者这个车辆的以图搜图,就车辆的REID的这样一个技术,那事实上其实就是呃对于我们要在课上讲的,这些呃raid的技术呢。
它不仅仅只适用于这个智慧城市这样的,一个方向啊,他还是非常通用的啊,尤其是在我们的这个讲述的过程中啊,都涉及到了general的CB的这个啊啧图像的识别啊,图像的检索啊,特征的比对啊,特征的提取啊。
啊这些常规的啊数据集的一些loader啊,啊这些方向,所以这些还是技术点相对来说会比较,啊通用,啊那么我们刚才说到,就是我们ready i,本质上是通过我们的这个检索的啊手段。
去达到我们这个识别的这个目的,所以自然而然的就是它的一些核心的一些啊,场景啊或者一些玩法,那其实就是在搜索啊,就是搜人啊或者搜车啊啊比对啊等等啊,所以就啊非常的这个显而易见对吧,你可以啊。
比如说在迪士尼啊,这个小朋友走丢了,但是可能在刚刚有过他的这个照片,那你可以给我们的这个啊布一套检索系统,很快速能够进行这个啊识别人,就是通过face id和REID的这样一个结合啊。
通常来说也是我们的这个呃商业的这个应用,以及我们这个实际的啊安防的原因,就是在我们的这个安防系统里面啊,就是我们的警察同志们,他其实会总结很多的一些规律吧,那这些破案的这个规律呢啊。
反过头来其实就会变成啊我们算法应用,就是我们的AI应用上啊,是能够去啊做一些定制化的啊,一些这个,应用的场景啊,举个例子啊,啊在公安里面就可能会认为诶昼伏夜出啊,或者说经常和其他同行人出现的一些人啊。
可能就是有一些潜在的这个啊有啊异常的人,所以类似的刚才我说的这一些啊特征呢,啊这些这些符合这些总结下来一些经验规律呢,我们的公安民警们就把它叫做这个技战法啊,就是技战法啊。
就说啊我们通过这个技战法的这个运用呢,再结合我们的这个啊,人工智能的这样一个技术啊,是能够达到一定的这个高效的,这个啊获取我们的这个线索,和破案的这样一个啊目标,比如说我们有一个人是这个骑了我们电动车。
或者说来偷了我们的这个电动车,然后来进行逃窜,那在某些地方是拍到了他的人脸,那某些这个路段呢只有他的背影或者侧影,那我们联动我们的人脸的识别,和我们的REID的这个技术,就能够把它的这个逃窜的轨迹。
能够把它给成功识别啊。
捕获到,所以刚才我们就提到了,就是啊raid的这个啊核心的应用场景啊,或者说他的核心的这个啊价值就在于什么呢,就在于我们的啊串联,刚才我们说了轨迹的这样一个串联。
所以这样的话呢我们就能够想象得到是什么呢,想象得到他在嗯,啊想象到他在这个呃商业的这个场景里面,是能够去做啊不同的这个应用啊,我举个例子来说。
你可以看到啊在一些这个啊智慧商场啊,比如说他是能够有一些这个呃智能的一些,解决的方案啊,举个例子啊,就是啊,在这个大型的shopping mall里面啊,我可能能够通过顶装的这些摄像头,你可以看到吗。
啊顶装摄像头其实是现在比较流行的一种啊,摄像头吧,你可以看到啊,啊这些呢就是啊很多的这个客流的系统啊,举个例子就是你去万达啊,或者去啊什么样的这个,太古里啊商场那你的头顶上啊。
如果你的头顶上他有一闪一闪啊,就是不间隔的一些绿点点啊,绿灯,那其实很多程度上,他其实就是呃这个类似这种的这个呃,哎摄像头啊,然后这个时候呢就是啊有了这些啊摄像头呢,我们能够做什么呢,很简单。
你可以去对整个商场啊,不同的门店呢去做一次数字化啊,就是富来赋能啊,我们整个商场啊为什么这么说啊,为什么这么说啊,你可以想象得到啊,我们的这个商场的这个客流呢啊是能够呃,啊就是啊对于每个摄像头而言啊。
我可以在门店的内部装,也可以在门店的外部装对吧,所以你很容易就通过我们顾客的这个啊,经过我有多好的这个门店啊,因为我会去检测我的人体框嘛,然后我可以去算一下我们的这个路过的一些啊,人流的这个呃个数。
然后呢在呃进出我们的这个店啊,我们就知道我们啊这个顾客的这个啊,进和出的这个动作,并且呢我们还可以计算一个啊进出时间之差,那就是这个顾客停留这个店铺的这个时长啊,我们就知道了啊,就是他的这样一个效率。
那甚至呢我们可以拉一下这一家店的流水,我们大概就知道了,他的结账的这个比例大概是多少,所以我层层的这样一个递进,我就能够知道了啊,很多的信息对吧啊,这家店到底是不是足够吸引客户啊。
最后他转换成买单的这样一个比例又是多少啊,所以这就是可以成为衡量每一家店铺啊,每一个商场啊,他的很多的这个信息对吧啊,我比如说啊这一个转角处的这家店铺诶,他就是人流量很大,那我的租金就应该被定贵一点。
对不对,那你不定,那你不接受,OK那可能其他的可以去来进行这个商谈,然后我也时时能够去追踪,就是在整个商场的这个客流分布的一些啊,变化啊,就是这也是一个其中的另外一个嗯这个点吧,对然后所以总的来说呢。
就是我们依然是能够从我们的啊用户端,然后我们可以去对每个用户去建立他的啊,客户的这个画像和他的这个喜喜好的行为的啊,偏好的这些用户的画像,那可能也可以针对性的来进行促销,或者推一些优惠券啊。
来做到这些千人千面的一些啊,个性化推荐的一些服务,对这个就是啊他的一些潜在的商业的应用价值,所以对于business intelligence bi的这样一个而言呢。
啊这个这可能是一个比较好的一个啊方面好。
那接下来我们就来说说这个其中的一些啊,技术的一些框架和架构吧,就刚才我们也提到了对吧,就在新零售的这个场景里面呢,我们通常来说我们都会来提这个人或场之间的,这个关系对吧,在我们的一些呃马爸爸啊。
或者这些的一些技术分享里面都会来提这一点,那从我们做CV的人的角度来说呢,啊我们的这个人货场的这个关系,也可以来这个重新来进行这个塑造一下啊,对于人而言,就我们可以来感知人对吧。
我们检测啊很多的这些啊人流量,然后我们来做一些客流的一些分析对吧,然后对于这个人和货之间的这个关系呢,我们可以去做一些啊货架上面的一些摄像头,我们哪些人去拿了哪些货啊,这个我们可以detect出来。
而人和场之间的关系呢,就是我们raid可以来进行赋能的对吧,我们知道了哪些人逛了哪些啊厂啊,哪些这个啊shopping mall的哪些店铺对吧,我们是能够啊做这些一系列这些分析的。
所以稍微展开一点,就是我们的detection就会去训,训练一个目标检测系统,也就我们的这个person的这个detection,production detection的这样一个啊模型。
然后啊身份的识别呢,我们会如果有人脸的信息,在入口的这个shopping more的入口处的话,我们就会用人脸识别来识别它,到底是新的顾客呢,还是啊老的顾客对吧,然后以及在整个商场里面呢。
我们就会通过我们的REID的这个技术啊,这里我们暂时看不懂啊,这些框架没有关系啊,因为我们后面会讲啊,去来识别它的这个person的啊id的信息,然后通过跟这个刚才的人脸的信息,来进行身份的一次绑定。
然后这样的话我们就能够啊多维度的去识别了,我们的每一个人的个体,然后达到了我们刚才说的啊,数字化的这样一个共性,好,然后接下来我们给了一些简单的一些啊,参考的工具啊,仅仅是参考好。
后面我们会带着大家一起来写,相关的一些代码对,然后这个呃上完我们这几次的这个课程呢,就大家啊要不就是你去提啊,这个实现一下我们的person的raid,要么呢就去实现一下我们的啊milk reid。
然后就会提交一下啊技术的这个报告啊,就是写一个word文档或者PPT的形式,然后提交给这个我们的助教和孙老师,就这样,这个就是我们的一个啊比较粗的一个简介,然后接下来呢我们会从代码的这个角度来。
一步步来load我们的data,然后实现我们刚才说的这个啊想法,那在这之前呢,给大家几分钟的时间去啊回顾和思考一下,然后我们刚才讲的这些channel的一些概念。
然后有没有什么样的问题啊,比如说如果有问题的话。
我们可以来啊,在这个讲之前呢。
我们可以来哦答疑一下啊,我给大家的5分钟的时间来去思考,然后以及去啊提问好吧,如果有的话,我就回来回答,没有的话,我们就往后面走,好啊,如果大家没有其他的问题的话,然后后面有问题可以再问。
然后我就会切换到我们的这个代码的页面,然后我们就开始我们的啊coding的这个环节,然后后面的课程的话,我们就会呃类似的这些思路,而类似以代码的这个页面来给大家上课好吗。
大家稍等,我来切换一下页面,好啊,我们应该已经切换回来了,我们的页面,好那这个啊我们先跟大家对齐一下啊,就是我们要做一些什么样的事情啊,这样的话你你才能够明白,就是为什么我们要写啊,接下来的这个代码。
不然你就会confuse啊,就是很觉得很奇怪,我们其实要做这样一件事情啊,就是我们想建立一个framework啊,这个framework呢是能够去解决我们person raid的,这样一个呃呃这个任务。
所以我们比如说我们要去建立一个啊baseline好,我们要建立一个贝斯line,这个baseline呢啊是为了person ready id,那么我们有什么样的数据呢。
啊这个最知名的这个数据就叫market101,啊啊从他的名字呢就可以来分别出来,就是嗯,他是在一个这个啊,1500个这个person id的这个呃范畴里面,建了一个数据集啊。
在一个market这样一个环境里面,所以,请大家问一下ta啊,这是我们的助教,然后他的这个目录是在哪好,这样就不用下载了,所以它的这样一个data的这个形式呢,就是说比如说。
对于它的啊数据的这个形式就会长这个样子啊,比如说啊,D00001号啊,人啊就是person id,然后还有哪些image,比如说image的一,image的二,image的三啊等等啊。
他其实就会啊类似这些,然后对于testing而言呢,testing data呢他可能就会问啊,就会问,他会给你啊一些image,然后分别去问他是属于哪些id的,当然啊就是大家想象一下。
就是你的训练和数据,训练数据和啊验证数啊,测试数据,它的person的id,这个key它会不会有overlap呢,让大家想象一下,会有会不会有overlap呢,嗯其实大部分的同学来说,其实你都会觉得。
有overlap是合理的,对不对,大部分同学你会这么想对吧,但是事实上是呢嗯大家想想看啊,如果说你认为是合理的,那么这里就有一个问题,你难道都希望什么呢,你难道都希望,你所有的呃训练的数据的id。
都依然出现在你的testing嘛,啊,换句话说,就是你所有都寄希望于你要识别的那些人的,id的信息都出现在你的训练数据集中出现过吗,你觉得这样的假设是合理的吗,也就是说啊,如果你要去识别一个人脸。
它必须在出现你的训练数据集中,这似乎是不合理的,对不对啊,为什么呢,因为我们在部署一个人脸系统的时候,我们可能不需要它有很多对模型来进行更新,比如说你使用IPHONE,你可能只需要注册一张图片啊。
你只要告诉他这个人脸是你,但是你不需要让它更新啊,让你发到你的这个苹果的这个服务器上去,让他去训练一个模型,再返回给你,对不对啊,所以你并没有去啊,有这样的一个限制呀。
那你为什么让person reid啊,有这样一个想法呢,所以你的常规的这个想法来说呢,是不需要的啊,所以这个也就是我们person ready id,你要去注意的就是你的这个训练的这个数据啊。
啊你可能啊不见得他是需要啊,这个不见得是需要能够去overlap,只需要什么呢,需要它有一定的这个泛化性啊,就好了就好了,OK啊就是大家需要注意这一点,好,这个就是对我们的这个training和。
testing的这个data的一个大概的一个解释,好,那我们要做什么好,我们要做什么,我们说了,我们要做的事情是,Given a query,Image,Query,Photo。
我们要去recognize这个人的,person i d对吧,我们要去干这件事情,而这件事情我们又把它哦,我把它换一行,这件事情我们又把它通过试image search的方式哈。
或者image是travel的方式来进行啊,求解,就是我们通过这个image search的方式来进行求解好,所以嗯,具体来说我如何通过这个信息界的检索,达到识别的目的呢,那其实你会有一个什么呢。
你会有一个叫GARY的东西,这gallery呢就是刚才我们说的那些training,数据集中的构建来的,Image database,就是来自哪里呢,来自我们的training data啊。
当然可能会来自我们的testing data的,这个啊,只有少量的,身份的信息,比如说每个id只有一张或者两张,所以这就构成了我们的这个gallery,然后我们要做的事情呢就会去啊,对每一个。
假设我的query是Q对吧,假设我们的query是Q,然后呢,假设我们的有一个小GI是从哪里来的,从我们的GARY里面大G来的,那我们要干的这个事情呢,其实要去learn a function。
啊这个function呢啊我们可以把它打一个括号,这个function呢是一个similarity或者distance function啊,function similarity啊的function。
所以我要写HS,然后输入是什么呢,Q和一个GI,我要去learn这么一个function,一旦我认出来了,我就知道了我的查询的图片,Q和我gallery里面的每一个图像的相似度是啥,对吧。
那我这样的话我直接按相似度来导拍一下,我就能够得到我最相似的图像是什么,大家想想看是不是这一回事,所以如果我能倒排完了,那我就达到了识别的目的,因为我知道头几个啊,他一定是命中了嘛。
好这个就是我们的思路,那回到这里来,你怎么去认这么一个function呢,或者怎么去得到这么一个function呢,啊在这里呢我们就很快能够联想到啊,我们肯定Q和GI呢,它肯定不是普通的这样一个信息嘛。
它肯定是已经被什么呢,被我们的这个特征给特征化了啊,所以你想象假设,假设q and g i,分别是什么呢,Feature vector,啊假设Q和GI都是B是vectors,那么S,Q和GI。
怎么来算出来呢,是不是其实就是我们的那个通过什么呢,Q点成我们的g i dot product,对吧,就点乘我们的GI就得到他们的这个相似度了嘛。
那我们的Q和GI怎么得到这个feature vector呢,当然它肯定是同一个维度了,那因为我的Q和GI都是图像,所以自然而然呢,我就会选择我们的卷积神经网络,CNN来做这件事情啊,比如说。
Rsnet50,或者呢在我们的这个课程里面,我们会选择,Mobile net,这个我们讲过的就是,他是一个高效的轻量级的卷积神经网络对吧,能够帮助大家去更快的得到我们的这个啧。
额特征的这样一个这个啊向量啊,推理和训练都来得更加的高效,和这个轻量级,所以我们这些啊都可以去干这件事情,所以这个就很明显了吧,就是我们要做什么样的事情呢,所有的结论都在告诉我们,我们要train啊。
C n n,好,这样的话我们就谈到了,我们前面我们说的那些事情,好那我们课间休息一下,然后大家可以去喝点水上个厕所,然后再回顾一下我们刚才说的,然后我们接下来就可以开始,写我们的这个代码了。
啊那我们回过头来我们继续啊,这样的话,接下来我们就可以开始写我们的啊代码了,然后假设大家已经下载好这个数据集了,然后解压它了,那你可以看到的是什么呢,看到我们的image,它的BTS啊,他是这个64。
然后image的height也是这个64K,嗯假设我们的learning rate好,我们把它配置成0。01,啊假设我们的optimizer用SGD,所以我们可以from,OK所以当然事先你可以。
好type in store下TENSFLOW,Ok,假设我们batch size是128,假设我们训练100个EPOX,然后啊,我们可以定义一下我们的data的这样一个路径啊,假设在你的这个啊。
比如说把你的这个数据放在点这个当前的目录,下面,建一个DATASET目录对吧,然后它会有一个market,1501,然后有一个版本号比15。09,点幺五对吧,假设是这个,好注意大家这个目录啊。
就是可能跟我要保持一致,因为原生的这个啊,training的这个目录可能未必有一些出入啊,就是你可以用我的这个目录的话,你大概是能够更好,我们来进行一些这个id的一些对齐,在在这个目录里面呢。
我们可以看到他大概有12936张图像,啊在训练数据集里面,Import pls,那这样的话我们可以点我们的data的route,就等于我们的OS点pass点,这样的话就把我们的数据的这个root给。
写好了,好然后我们的image,就可以用啊,就是list d i r,然后这个目录,好这里呢需要补充一个,就是我们加一个限制条件,如果X它是JPG格式的话,啊我们才会算它,那有同学可能会问了老师啊。
那这里不就可不就是JPG格式吗,嗯需要提醒大家一点的,就是如果你是Mac系统的话,有可能他后面给你加一些隐藏的一些文件,那这些那可能你也会通过你的后续的图像的,这个途径啊,loading然后啊读进来。
但是你可能会被报错,所以你就很诧异啊,所以我们这里给大家一个啊定心丸,那除此之外呢,我们还可以给大家加一个salt,啊这个内置的函数为什么要加它呢,啊这就确保大家所有人运行是一致的啊。
这样的话啊不至于可能今天你运行第一次啊,它这个list,它的顺序和第二次list的顺序可能就会不一致嘛,啊这样的话就大家还会保持一致,OK啊,所以这个就是image names,然后这里给大家举例一下。
就是这个image name的这个它其实可以被拆开出来啊,什么叫被拆开出来呢,就是呃因为我们这个image name和这个image pass啊,他其实嗯,我们希望它可能可以来做一一对应的啊。
为什么这么说呢,啊因为我们的这个image name,它其实里面会包含了什么呢,啊我举个例子啊,就他长什么样啊,举例他可能是长这个样子,0002下划线C一S1下划线,000451,下划线零三。
OK可能会长这个样子,然后注意在这里的啊,这里面的这个呃一些比如说啊002啊,可能就是他的这个啊person s的这个id是吧,就是啊就是他的一些信息呢,其实是能够表征什么的,表征我们的。
他的这个present id的信息,就是他的ground truth的这个信息,所以这就是为什么我们需要获取他的image,这个name啊,这样的话,后面我们可以去解析它的这个label的这个YOK。
所以我希望大家能够写出这个代码来,就是image的name啊,然后image的pass是等于什么,就怎么来进行解析,好给大家一点时间思考一下。
就是你怎么能够同时获得image name和它对应的image path,来想想看,可以给大家一个提示,就是用我们的这个zip的这个命令,我举个例子啊,假设X是等于,E3,24ok。
然后你去对这个PQ可以求解,那其实就是zip,新X然后此时的P就是列表啊,就是这个一二,然后这个Q呢就是三四啊,是这个意思,就是如果你能理解刚才我说的举的这个例子呢,啊你不信你去运行一下啊。
你其实就能够得到啊,我们想要啊说的这个事情了,所以我们肯定用一个心啊,然后来啊这里面呢我们用这个啊for image,File png in image,一会儿我们会换个行啊,我换个号。
这样大家就能够看得清楚一点,OK啊,这样的话我们就能够得到啊,image name和image pass分别解析出来,这样的话根据刚才我们的说啊,这个提示呢我们就得到present的,ID是吧。
就等于我们刚才的for x in image的name,然后X什么呢,前四个对吧,所以就解析出来了,啊number of percent d就直接等于啊。
我们就直接等于person id originally,当然这里面会有重复对吧,所以我们很容易通过set这个命令啊,就这个函数就得到这个集合嘛,他其实就去重了啊,然后再对这个集合做一个length。
就得到了什么呢,它的,ID数,所以你可以很容易print一下,比如说,Number of peri d,那到这呢就有一个问题了,就是这里的person的id呢,可能是比如说000300004。
他未必是我们想要的这个啊int性,就是比如说奥,比如说我们需要让它从01234啊来得到,那这个时候啊,我们就可能需要嗯这个借助一些啊,更加便捷的方法来转换这个person的id,当然有同学可能会说老师。
那我直接去写一个for循环,然后我从零开始来进行累加,然后我自己来维护它的这样一个对应的关系啊,有什么问题吗啊我会说没啥问题,当然很好啊,OK啊,但这里就是你可能要付出的这个呃,这个心思可能要多一点。
写的代码量多一点,仔细一点啊,就不会有太大的问题,那如果你想偷懒呢,那我也可以给你介绍一个偷懒的办法,好我们就sk learn里面的一些技术啊,基础的一些呃转换的函数就OK了,就比如说。
S k learn,点pre processing,Import label encoder,OK对,好又可以得到这个in table里的encoder,好我们就可以用原来的这个fit一下。
那我们会得到新的person i d,好,然后接下来呢啊,我们可以通过这个split这个函数去啊,把我们的训练的数据和测试的数据来按比,例来划分对吧,当然了就是这里啊有一个基本的一个啊问题。
就是呃我们当然可以自己来写一个代码,来进行维护,刚才我们说的这些train test这样一个划分,当然你如果需要偷懒,那SKN也帮你做了啊,他就会帮你去shuffle一下,当然你要注意的。
就是要维护好你shuffle的时候,你的X和Y的这样一个pair啊,那SKN如果SKN是能够帮你干这件事情,好那这样的话我们直接使用这个函数就OK了,然后就是train test quit。
OK我们换一行啊,让大家看的清楚一点,那就是给到image的pass好,person i d encoded是吧,然后我们会有一个比例叫test size,比如说0。2,那就是八二还分。
然后这里面除了额这里面的所有的参数呢,还有一个比较重要的一个参数,这里也需要给大家,就是如果你啊按照现在的这个逻辑,现在的这个代码量去啊,run的话呢,有一个最大的问题。
就是今天你run1遍和明天你run1遍,可能你得到的training的数据,和testing的数据是不一致的,为什么呢,因为它是随机打乱的,就是随机去shuffle,去split。
但是你当然是希望你每次运行的train,test是一样的,这样的话你好知道你后面的一些调参啊,或者去啊这个嗯去做一些啊决策,你就你就明白你就是有心理更好的谱嘛,至少你的数据是一样的对吧。
然后你做什么样的策略,做什么样的啊优化,那你是知道你这个有没有效果的,那这样的话你就需要给它加一个什么呢,你要给它加一个random的一个id啊,也就是每一次串test split的话。
你是要去有这样一个啊控制的这么一个参数,给到它啊,这个参数叫什么呢,这个参数叫random state,比如说这个random state啊,叫等于这个42,这样的话我们就可以把我们的现在的一些。
大致的一些额统计的信息给打出来了,比如说多少训练数据集对吧,多少VIZATION的数据,好,那有了这些信息的话,我们就可以开始对我们的呃建模了啊,就建模了,那注意就是啊对于我们一个CN而言。
就是我们训练的啊这个输入啊,就对一个CNL我们的这个输入呢,它的input sha是这些啊,就是,batch的信息对吧,然后height,然后channels,当然这个是啊。
如果也有可能就是这个channel是放在前面啊,三在这也是有可能的,这个就看这个大家个人的这个风格啊,就是可以去进行这个配置文件里面来进行设置,好我们先来漏的一个mobile net,那就是。
好我们看一下来怎么操作,嗯不点,我们是mobile ne,好先写下来,然后告诉大家这几个什么意思,OK这个include top呢,第一个参数呢我们把它设成false的原因是,因为呃我们只想用这个。
model来去这个提特征啊,所以的话他后面的这些分类,可能不是特别的重要,因为啊原生的这个啊如果要include top的话,它其实是分1000类啊,因为image net这样一个数据集嘛。
那对我们而言毫无意义,因为我们反正要做这个分类的话,我们要去初始化我们的这个,classification的这个head,所以的话原来去分1000类啊,我们并不关心啊,并不重要,所以我们可以啊。
不需要它,然后第二个就是with等于这个image net,这个的意思其实就告诉你的这个系统啊,告诉你的这个框架,你要去啊,用这个image net这个数据集的这个PRETRAIN的啊参数。
也就是这个时候他就如果没有,是第一次run这个系统的话,他就会去从啊网络上去下载他的这个参数啊,Download,然后阿尔法等于0。5,这个就大家我们在课上讲过了对吧,就是他有一个肉,有一个阿尔法。
这两个参数如果忘了的同学,再回到我们之前的课件啊,就是或者录播来进行review一下,然后这个input shape就没什么好说的,然后这个pulling。
这个pulling呢除了这个max也可以写ABG,就average pulling,然后或者max pulling啊,这个含义的意思就是说啊,经过了这样一个CN的model,就这个CNN。
我其实就会自动的帮你去做这个global的max pooling,或者global的every pulling,也就是说你你会得到一个一维,压成一维的这样一个向量,而不是一个二维的一个特征图啊。
就这个明白了吗,所以我们就会得到这个global polin的这个啊feature,然后我们通过点layers,我们就会得到它一个list,然后他会把每一个layer存成一个list。
然后我们CN的model就是最后一个global的一个play,就可以得到它的这样一个特征,但是我们需要去train我们的CN对吧好,大家想想后面这个该怎么写呢,就你怎么能够TRA你的这个,模型呢。
那是不是应该在我们的这个特征后面,去接我们的分类的层,大家想想看是不是这样,也就是说你有了这个特征,后面我应该要去分你到底是哪个person的id,对吧。
那这个id我们刚才通过label encoder,又把它转成了那个int型,就相当于我们可以直接去做classification,就逻辑是这个样子,所以我们直接加FC,那再加FC。
我们可以去import一下,好我们后面还会要用到activation啊,这两个,所以我们加一个f c dance等于什么呢,Number of perdi,然后对这个呢我们做一个soft max。
但这里的model呃,我们需要import一下啊,我们需要import一下,所以第87行就是增加了那FC,这FC的神经元的个数呢,就是呃原来的呃,这个我们要分类的这个id的这样一个个数对吧。
然后第89行呢就是我对这个FC,然后加了一个SOFX变换,让它变成一个概率分布,那为什么变成概率分布呢,因为后面在我们的损失函数里面,我们会交叉熵,损失函数COSROY。
要对它来进行loss函数的设置对吧,然后最后一个呢就是在93行里面,我们会用一个model来桥接好,我整个模型的输入和输出啊,就是我们整个model了,就是有输入有输出。
那中间串起来的这些其实就是每一个layer,哈OK所以啊这个时候呢,通常我们可以用summary这样一个命令,来去打印出我们的每一网络的结构,和它对应的参数,就是具体而言就是。
这样的话你就能够去得到额他的,我们刚才搭的这样一个model的这样一个detail,细节了,啊不信大家啊,回去可以试试,OK那接下来呢我们会啊有一些data的,loading的啊方面的一些冷知识。
然后接下来这部分内容呢,我们会放到下次的课程讲,然后今天大家看看有什么样的疑问吗,就对今天的内容,OK如果没有问题的话,那就啊我们今天的内容就先到这里,然后如果迟来或者没有听的同学啊。
请这个等孙老师上传我们的录播的课件的之后,尽快的来进行啊跟读和这个review啊,然后我们下一节课会接着我们今天的内容啊,继续讲好吗。
然后我们今天的内容就先这样啊。
1447-七月在线-机器学习集训营15期 - P10:4-特征工程:数据清洗、异常点处理、特征抽取.选择.组合 - 程序员技术手札 - BV1ASste6EuZ
🎼。啊,从这次课开始呢,你们会陆续看到一些。更贴近实际算法应用的这样的一些内容。呃,你们将来有同学如果要出去面试啊,就是从事这个方向的工作。你要出去面试的话。
一一定会遇到面试的过程当中提到的几个板块的内容。有一个板块的内容是大家一直在从前面的课程到今天一直在学的。模型的部分。就是你们会听到一些很夸张的说法,说你去面试的时候,怎么也得首撸个SVM。
或者是呃推一个什么角色术,或者是呃数模型的创新模型等等这样的一些。😊,一些面试题问。但除掉这个理论的部分以外,我们也会很关注你实际应对数据的感知和应用的能力。呃,我指的不是调餐。
这个不你指的这个调餐的部分,对整个模型的。你想或者对整个整个数据驱动方案解决它的效果影响没有那没有你想象的那么大。对,如果你是你的重心放在调三上,我会觉得你是一个没有没有动手去做过相关工作的人。😊,呃。
所以我的我的一个同事,去年的时候呃,我们一起出去校招啊,我说校招,就是我们我们会跑一些城市。比如说呃除了北京以外啊,北京本地以外,我们可能会去上海会去武汉,会去哈尔滨,会去那几个对应的城市嘛。
哈工大呀、华科等等。然后我们会去面试校招的面试,然后一一般一面试就是呃两三天。然后在这个面试过程当中呢,就是我们不同的面试官他大家可能会有不同的风格。坐在我旁边的我的同事最爱问的一个问题是。
那你知道什么样的。😊,数据的。处理和特征工程的方式。这个是我们今天要给大家讲到的课心的内容,几乎那一天面试的所有人都被他问过这个问题啊,当然有一大部分人是能回答上来这个问题的,就是还是不错的。
说明储备还是可以的。在这里头会涉及到一些会涉及到一些具体的数据上的一些操作。和我去应用这些算法的时候,如何能让我的算法的能算法的这个表达力,或者是个算法模型的这个效果更突出的这样的一些点。
那我在今天讲授这个部分内容的时候,我也会给大家呃就是。😊,问到一些你们出去以后可能会被问到的一些问题。然后我让大家一起来思考一下,为什么我们要做这个处理。
当然这些数据处理的具体的这些操作可能就这么些操作,所有人都知道,但是哪些模型需要用到这个操作,哪些模型不需要用的,以及说做这个操作,它可能会带来什么样的。😊,影响什么有什么样的效果。
这个是你需要去理解的。所以我们今天提到这个内容叫做机器学习中的特征工程,叫做face engineering。呃,这个部分呢很神秘,因为你在市面上基本上找不到。一本书去讲这个内容。
你可以找到很多机器学习原理的书。但是在实战的特征工程这块,你会发现并不是太多。所以今天我给大家讲到的是一些里面很核心的一些操作和一些对应的处理。呃,不过大家更多的要关注说为什么我要我要去做这样一个处理。
做完以后,数据会是以什么样的形态去呈现。这是包括这是今天的整体的这个内容。会包括我会带大家聊一点这个关于特征工程这个板块。它的作用或者说我们聊聊一聊它的意义。为什么它会大家会这么关注这个这个部分。
然后我们会聊一聊这些所谓的大家比较关心的数据处理和我真的从数据上去做特征抽取的这样的一些过程。对,然后大家看到的第三个部分是我会带大家过一下,当我想办法产出了很多很多的特征,我脑洞出来了非常多的特征。
我怎么在这个。😊,场景下去选出来真正有用的那些特征。因为当你的维度真的很高的时候,这个对计算资源是一种很大的压力。ok然后所以我们先聊一聊这个词叫做特征工程,叫做fishci engineering。
所以这个特征工程呢特征这个东西指的是从原始的数据当中去抽取出来对预测结果有用的信息。但也没有太大的意义啊,但是大家理解一下,为什么会这样去说,我给大家举一个例子。
你们想的人工智能远没有大家想象的那么智能,人工智能真的需要很多人工的环节在。所以你你不要想着这件事情是我准备好数据了,我把数据往那个模型里头一怼,然后就能出来一个很好效果的。😊,这样的一个模型。
如果这件事情这么简单的话,你们今天还用来学这个课吗?😊,那阿里云和腾讯云或者各家语音公司不早把这个事情做完了吗?对吧这些所谓的auto ML的平台,自动机器学习,自动人工智能的平台,这个事情就完成了。
对吧?实际上远没有大家想象的这么简单啊,模型也没有你想象的那么强的作用。因为可能在很多不太熟悉这个领域的人眼中,我最终能取得好的效果,是用了因为我用了逼格非常高的模型。😊,啊,逼格非常高的模型要用。
但它不是决定型的因素。它只是因素之一。所以这个地方很重要的一个事情是你原始的数据可能是一种很很杂乱的一种形态,呃,会会有另外一些表达形式是计算机读不懂的。举个例子来说。
今天你上淘宝这个小姐姐看到了这只口红会不会买,可能和这个口红的颜色会有关系啊,口红有很多的色号啊,很多读不懂的色号。然后但是这个颜色这个信息怎么表达给计算机呢?😊,他不读不懂的。你不要想着这些文本。
这些。类别型的这些属性可以直接送到计算机里,他能读懂,他读不懂的。所以需要你去做一个表达。那我再说一个事情,你们知道近几年,你们知道近两年dep runninging很热,对吧?深度学习。
大家都在都在往这上面往这个人工智能往深度学习上去靠。所以深度学习这个词儿很很热。那你们有没有想过深度学习为什么会突然在这两年热钱呢?当然它会有些原因,你会告诉我说,老师,因为数据量的规模增长上有啊?
因为现在我的很多硬件资源可以支撑我去学习这些很复杂的神经网络的模型呢。😊,其实根本原因是因为在有一些数据上深度学习的模型的效果确实碾压了传统的模型。那是不是说我们现在学的这些机器学习没有用了。
是这些模型已经过时了,所以深度学习起来了以后,大家都应该去学习深度学习。😊,不是的。在有些场景里面,机器学习做不好的原因是因为你没有给他一个很好的数据表达。举一个例子来说,深度学习最。有。
发挥最好的一些领域。很多时候是多媒体数据的领域。那图像这样的数据,你你是没有办法用更高效的方式表达给这些原来这些模型的。不是说这个啊SVM不好,这些什么数模型不好。
不是是因为你没有把那个信息呈以某一种计算机能读得懂的形式去呈现给它。你在从这个原始的图像数据送给模型的这个过程当中损失掉了很多信息,你表达不充分,所以计算机没有办法从你这个数据。
从你这个这给到的这个数据当中去学习到一个什么样的有用的模式,所以不是模型本身的问题,而是说深度学习这种模型,它更适合去做一个表达学习。对于这种很抽象的这种数据。比如说啊这种图像这样一种数据。
它能够从原始的pixel像素级别的这种表达上。去学习出来一种,去感知出来一种更有效的表达方式。然后后面的部分才是就是和大家现在学到的一样的。这些分类器。就是一个神经网络尾部上,尾巴上也是这些啊。
比如说soft max多分类啊,或者是逻辑回归,你可以认为是逻辑回归啊,就是bysigoid接个soid去完成二分类啊,也是这样的东西。只是它前面层次做了太多的车征抽取,已经能把那个数据表达的非常好了。
所以现在你有表达非常好的这种把把人能够理解的这个信息,以这种比较丰富的形态传送给计算机,它就能拿到很好的效果。😊,所以特征工程这个东西如果要给个定义,实际上他做的事情。
就是说你去结合你的计算机的这种知识,再结合你对于这个场景,对于这个领域了解的这些专业的背景知识,去把你原始的数据处理成这些机器学习的模型或者算法,能发挥更好作用的这样的一种数据的表达形态。😊。
它是这样的一个事情,它是很偏工程的一个事情。也很偏你对数据的一个理解和思考。原因很简单,你们你们千万不要追求太。逼格非常非常高非常非常复杂的模型。😊,我们实际在工业界最喜欢的模型是简单。
但是效果又比较好的模型。因为简单的模型意味着说它的可控度非常高,可意味着说我线上的复杂度会小。意味着说当我出现问题的时候,我能第一时间去解决它它是一个透明的模型,或者说它是一个可解释性非常好的一个模型。
😊,如果你搞一个黑箱模型过来,你搞一个很复杂的神经网络,对吧?你今天很开心,你说我叠了1个1024层的神经网络,这个事情我以前也干过,那叠1个1024层的神经网络,然后一跑发车哎,效果很好。
但你今天你要是你要是这个线上的业务出现问题了。😊,很麻烦。因为你很难去debug。你没有办法第一时间去处理这个问题。所以我们会更希望去把这个场景挖掘的足够的充分,把它的信息足够充分的去表达出来。
送给这些相对不是那么复杂。但是这个效果同样很好的学习模型,然后让他们去解决当前这样一个问题。如果你抽到足够好的特征。我可以告诉大家,你用最简你用简单的模型不一定比你用深度学习的模型效果要差。😊,对。
所以有同学问到说是不是意味着对业务了本身了解更多的人做更可以更做到更做出来更好的特征。是的。😊,数据驱动这个方案解决这个方案的这个问题需要几部分的技能。一个部分的技能叫做开发技能,你需要能够写代码。
因为你有idea,你必须要能够实现,你也必须能够基于这些工具库去完成数据的理解。另外第二部分技能叫做机器学习的理论技能。因为它能够更好的告诉你说,我现在出现的问题,应该调什么样的参数。
调哪部分的参数可能会有什么样的影响,它也许能够收敛的更好,或者说能够在我当前这个场景里面有更好的这个呃模型的这种表达能力。第第三个部分就是我们今天给大家讲到这个特征工程,它会很和你的场景相关。
我们叫做domentdknowledge或者domentd expertise,就是领域内的知识。因为我是一个不懂医疗的人,你给我一些医疗的问题让我去处理,我无从下手。我拿到这些数据。
我都不知道它什么含义。😊,所以总体说来,特征工程就是从原始的数据上想各种各样的办法去抽取出来,说对最后预测有用的这样一些信息,更充分的信息,让模型去学。OK然后这个地方有一个小小的说明。
这个说明我不想多说。总之呢说到就是给大家说一下,在互联网公司当中,你大概会有百分之啊不是互联网公司啊。我找很多同学对那个各种机器学习的数据科学的比赛很感兴趣。你们去刷一个,你们随便玩一个比赛。
你们就知道了,你们大概会有60%到70%的时间都花在数据上。😊,剩下的30%左右的时间花在模型上,为什么?因为模型的套路太明显了。模型的套路太明显了,我我我身边会有一些呃这个数各种数据科学比赛的。
这些大牛。啊,然后包括我本人之前也简单的刷过一些玩玩一些比赛。😊,我可以告诉大家,所有这些比参加比赛的老司机,后面调餐的部分或者是模型的部分,大家套路都很明显。😊。
而且基本上模板就是类似那种不是大家想象的那种非常成型的模板啊,把数据往里头一怼就出来结果的模板。就是说可插拔的这种组件的这种模板,大家手上已经有很多了。所以这个部分大家做到的都差不多。😊,那前面的部分。
你能你能对你的数据有多大程度的理解,你能对从你的数据上拿出来多高效的表达所有用的信息,这个东西会很大程度上影响你最后能做到什么样一个程度。它会影响你到底是呃200名还是20名。
而刚才你说到那些模型的部分,会决定可能在一定程度上能决定你到底是在一名二名还是3名。就是我需要去做一些微调,他们竞争已经很激烈了。在前面。OK所以这些互联网公司的工作,包括你去参加一些数据科学比赛呢。
没有大家想象的那么的f。说我一天到晚就在研究这些B格很高的模型。没有有时大部分情况下呢,数据对数据本身的理解会更重要。你很多时候你需要去跑一些,因为那个公司里头数据量一般比较大。
所以很多时候你可能要用一些分布式的平台去跑一些呃简单一点一些circle,然后你可能要写一些分布式的一些小 job,然后去跑点数据拉出来看一下,那更小一点的数据,中小型的数据,你可能用s也可以完成分析。
对吧?然后你要去结合你的场景去做一些数据的清袭啊,一些业务的分析啊,去看一看我到底现在这个场景底下什么样的特征会更有效啊。现在这版的效果好不好啊,分析一下原因啊。然后。😊。
我有没有更合理的这个表达模式啊,对这个数据啊。然后你们你们甚至听过一句话,在很多的公司里头,它叫做一招LR打天下。就是我们之前学到的那个逻辑回归,在很多很多的中小型公司当中,已经足够他们解决各种各样的。
😊,各种各样的。分类的问题了。呃,特征工程大概有多大的作用呢?呃,我看过很多开go的比赛,大家有兴趣呢你也可以去研究一下,然后会有一些数据科学的一些比赛。比如说很典型的二分类比赛当中。
我们有一个评估指标叫AOC。因为在那个比如说不均衡的样本当中,我们可能不会用accuracy这样的一些评估的标准啊,就准确率这样评估标准。所以。
我们可能在这个情况下会用到一些类似于AUC这样的呃一些评估标准。那如果你去做一些数据层面的处理啊,这个地方有效特征的抽取呢,不只是指的你你去搞一个什么样的操作,从数据里头抽一部分信息出来。
还是说你研究你研究了这个数据的分布,你从这个数据的分布和你这个场景里面,结合这个场景去做了一个合适的表达。比如说我给大家举一个非常呃我之前参加比赛的一个例子啊。😊,我之前我去年参加了一个比赛。
然后那个比赛是要去预测呃一个用电量的一个一个预测的一个比赛。阿里天池上的一个比赛。然后在那个用电量的一个比赛当中呢,我需要去预测下一个月的呃每一天这个某一个城市的一个一个区它的一个用电量啊。
应该说这些高新企业的一个用电量。😊,然后这个比赛当中呢,我我我因为大家都知道这些呃后面建模的部分呢,可能套路大家都很熟啊,所以就开始就哗哗哗撸了一版啊,撸完之后呢,就提交上去,发现说。😊,呃。
就是还行排名。然后当时然后但是有一个问题,就是我自己去看了训练集当中哪些样本预估的不太好。我看了一眼,我发现有一天有一天的用电量,我怎么也没有办法。😊,去。把它拉到和这个标签啊。
就最后的label一样的这个幅度。我就很奇怪,因为那一天我预估的他它的那个呃用电量,我预估的是高的,实际上非常低。所以一定是有什么原因导致的这件事情。然后我就看我说这一天也不是周末。
也不是什么什么法定的这个节假日,为什么这一天用电量会这么低,感觉是大家是要上班的呀?这企业要上班肯定要用电的呀。😊,后来我发现了一件事情,我后来去查了一下日历。
那一年有一个节日叫做抗法西斯胜利什么什么什么节日,然后那一天居然放假了。所以这个东西很奇怪,因为当你当你没有你拿不到这部分信息的时候。😊,你不管你就怎么调你的模型。😡,你的模型都你的模型是不会撒谎的。
它基于他给到的信息只能预估到那个程度。而当你拿到这部分信息以后,明显你把这个标签一放进去,明显那一天的用电量就往下降了,它就是一个放假一个一个节日。再给大家举另外一个例子,我在啊那个例子一会儿再举吧。
就总之这个东西呢就是我看过很多次的比赛当中,大家做一个有效特征的抽取是能到百分位的提升。而你去做一些单个模型啊,单个模型调三的优化顶多就在千分位波动。😊,所以这个事情是这样的,大家要去考虑性价比啊。
所以如果你现在的名次还在几百名,你要进到100名内,那请大家多多关注你现在的数据和你的场景。如果你现在已经在20名之内了。你要去冲刺前面的几名,一名、二名。
那请大家这个时候研究一下那些模型融合模型的一些各种各样的组装啊,一些各种各样的方式去拉低拉高最后的那一1一部分的泛化能力啊,拉高一点点泛化能力。然后同样下面会有一些其他的一些例子啊,一些电商的比赛呀。
一些阿里天使的比赛啊,都是这样,大家都在寻求更有效的数据表达。😊,好,那说到这件事情,我们就从头开始讲这个故事吧。所以在这个故事的一开始,你面对的东西的时候,我需要去取到数据啊。😊。
所以这个地方呢第一件事情是你需要去做一些数据的采集。但好在这个事情呢,采集数据本身并不需要大家这些机器学习的工程师去做。但是啊你需要去考虑什么样的数据,你是需要的。所以在这个过程当中。
你需要去思考思考说哪些数据对最后的这个结果的预估是有帮助的。你思考一下,然后这些数据我们能不能采集的到。因为有些数据它是很有帮助的。但是实际上你是没有办法提前采集到的。我给大家举一个例子啊,你。😊。
在淘宝的场景底下,你每搜一个结果,你会拿到一个结果列表。那他很关心一件事情,就是你在这个商品上会不会发生点击或者下单这样的行为。但是这个过程呢显很显然,在你拿到这批数据的时候啊。
你拿到这批训练数据的时候,你的每一个结果你都可以有一个有一个特征叫做位置,对吗?因为你已经拿到这个结果了,所以你知道它排在哪个位置,就是position。😊,所以你的特征你可以有这个商品的价格呀。
这个商品的一个呃商商所在的商铺的评分的情况啊,我的一个评论的心级情况啊,然后你也可以拿到一些这个用户历史上消费的一些情况啊等等。你可以把这些信息都采集过来,你去帮助你预估当前这个问题。
但是你发现你突然发现说这个地方还有另外一个信息叫做位置。😊,叫做position。你发现说这个太牛逼了,positionsition这个东西呢只要放进去。😡,预估的AUC明显会提高很多。但是他有问题啊。
你实际在解决这个分类问题的时候,你可能你实际去构建这个分类器,可能本身就是为了完成这个培排序这个问任务,你会把那些呃更可能下单,更可能发生点击的那样一些东西放在前面。
对吧排在前面那些商品你会把那些相对可能你发生点击或者发生购买这个可能性更小的一些商品放在后面。所以这个时候呢,你发现说你这个potition这个东西在你做这个预估当前这一次预估的时候。
你是没有办法提前拿到的。😊,所以这个时候大家要多考虑一点这个信息,你不不能把东西直接就拿过来,然后你就直接往里头一怼去生成一个模型。有可能在线上用不了,因为你取不到这分信息,以及线上实时计算的时候。
获取是不是快捷。因为线上的效率同样很重要。😊,所以如果你这个特征需要去反复的计算,很复杂的计算才能得到。那你线生可能要考虑一下。这个地方有一个例子,我举例一下。
我说如果我要预测用户对于商品的一个下单的情况,就是说会在在当前的这个商品上会不会下单啊?如果会的话,它发生下单的概率有多高?😊,或者说我要去做一个商品的一个推荐,我应该采集什么信息呢?
我这方给大家写了一点店家的商品的和用户的,你从三个维度去切入嘛。然后每个维度你再考虑一下他们有什么样的信息可以取到,以及我可不可以把这些信息交叉起来,做一些组合的特征呢?😊。
所以这个地方我会还是涉及到数据采集这个问题啊,就是大家需要去思考的是哪些数据有用。然后真正的这些数据的采集啊存储啊,会有一些其他做数据的同学会帮大家去做啊。
可能这些数据工程师或者是这些啊数那个数据科学家可能不用去做这么底层的工作。所以我们举个例子,我们说如果今天今天有这个7月开了一个。😊,机器学习的一个算法,某个机构开了一个机器学习算法的一个模型。😊。
对吧算法的一个模型。所以这个时候呢,我想构建一个这样的模型,去预测一下,说哎能大家来听这这样一个课,大家来听这样的一个课,然后有兴趣听下去的程度有多高,我应该采集一些什么样的数据呢?😊。
那你这个时候你就可以开脑洞了,对吧?实际上很多比赛的比很多大家参加数据科学比赛的第一步就是先理解场景,然后就开始分析场景,开始开脑洞,想有什么样的特征了。举个例子来说,可能今天如果是呃韩老师过来讲。
可能大家听着就会想睡觉,可能会换成其他的换成唐老师过来讲,可能大家就很开心啊,这个有可能对吧?所以他可能会和这个老师有关系,可能会和这个老师的声音有关系,可能韩老师说话的声音不太好听。
某个老师声音比较好听,可能可能这也是一些影响因素。哎,可能说和今天这个课程的内容的难度有关系。因为这个课程要是太难了,我一堆的公式推导,可能大家就听不下去。
可能如果今天是比较唉这个显展示效果比较好的这个数据,对吧?可能呃展示效果比较好的这样的一部分内容,可能大家就比较有兴趣。😊,对,所以有同学说对了,就是这样去想的话是很没有顺序的。所以有同学很棒啊。
就会给到说这个地方呢我会给到一些信息。比如说和培训机构有关的信息,对吧?比如说和和当前这个老师有关的信息,比如说和同学们有关的信息,和我开课的时间点有关的信息。
和我其他的一些呃信这个这个一起参与的这个参与课程的同学们有关的一些信息,所以你可以找一些维度去切入进去去组织这部分的数据,刚才有同学问到说买点是什么?这个这个不属于数据科学的范畴,就是你用一个APP。
比如说你用一个抖音,那你的上面的每一个行为,你用一个抖音或者用一个今日头条,你上面的每一个行为我都应该去做一个记录,对吧?那记录这个是在前端的对吧?对,就是在APP里头去做对做一些记录,然后把信息返回。
😊,这个和我们这个课程关系不是太大,所以我没有特别去做解释。😊,然后这个地方的数据的格式化,我就简单的说一下就好了。就是你确定一下你你什么样的方式去存储会更方便,方便你将来的读取或者解析啊。
有时候呢我们数据量会比较大,所以我们会去存储在那些啊,比如说HDFS上啊等等。然后啊大家要注意的一件事情是这样的,除掉就刚才我们说的事情叫数据采集,并不是采集到的所有的数据都需要用的。😊。
就是它有可能是会有一些噪声的,可能你们想象不到这个事情有影响程度有多大。首先呢你要知道机器学习模型对于模型而言,你给到他的数据。他是没有任何的区分能力的,什么意思?你今天要学。这个高二的一门数学数学课。
你上书店里头买了一本书,那这些练习题就是你要学习的这样一些样本,对吧?所以你会通过这些题,反复的去做这些题,去学习到一个做题的呃套路和方法。但今天有个问题,万一你今天买的这本参考资料里头有几道错题。😊。
其实你是不知道的对吧?你对那本书非常信任,你觉得说他已经给出来参考答案,他肯定是对的。所以你就拼命的去想,为什么这个参考答案这个思路呃,这个思路是怎么去想的,你想了想着就学偏了,对吧?😊。
所以这个时候有一个说法叫做垃圾进垃圾出。就是如果你给了一些精准度很低,很没有意义的一些信息,或者说有干扰的信息送到模型当中,那这些干扰有干扰的信息同样会被模型学习的。😊。
因为他区分不出来这个东西是不是脏数据,你给到他所有东西他都想学。然后同样这个地方呢,就是所以大家一定要注意一下,这个地方算法大多数就是一个加工机器,最后的成品如何,其实取决于你原材料的好坏。
所以你的算法模型啊就是你的数据这块的处理啊,特征和数据这块处理,基本会决定你最后这个在你当前的这个场景底下,结合你这份数据,你能达到的一个效果的上限。而你的模型只是让它不断的去逼近这个上限。😊,喂。
这个过程会花掉很大一部分的时间。然后他主要在做的事情,实际上是把这些noice data,这些脏数据干掉,就是这些不可靠的数据,这些错误的题目干掉。我我给大家说一个例子。
我在去年的时候参加了一个天池的比赛,也是学员在参加。然后我就我就陪他们一起看一下呗。然后大概呃因为因为那个数据量不是太大,分析起来还比较简单,所以我就快速的撸了撸了一版,提交上去了。最开始的时候。
不瞒大家说,反正在也在200名左右啊,就那个比赛大概有2700支队伍参加,在200名左右。然后后面的那因为那些建模的那些套路大家大家都很熟啊,所以这些工程师直接拿过来快速的搞一搞一把。
可能半个小时或者多久就提交上去了,然后大概在200名。😊,大概这个排名2100多名,大概持续了两天吧,我提交了有晚两个晚上拿了一点时间出来做了一下。然后呃后来我做了一件事情,名次就上升到40名之内了。
😊,就上升到40年之内了,这个世界并不像大家想的,我用了逼格更高的魔芯,没有。后面的所有处理环节一模一样,我仅仅是把那份数据当中,我觉得。偏了的数据或者说噪声数据干掉。仅仅是这样一个操作,它就从。
100多名升到了进入了到40名之内。然后后面的部分啊再进到20名之内,进到15名之内,那个可能要花一些其他的精力去做后续的这个特征,去做一些啊模型层面的一些呃融合啊或者其他的提升这样。
所以这个是呃就是我给大家说一下一些实际的感受,真的是很重要的。然后这个地方有什么样的方法可以去判定这些脏数据nise data,然后。以及判断到这去把这些脏数据去掉呢。
所以这个地方会涉及到一些大家可以看到这个地方涉及到一些方法。最简单的方法是呃有些东西就是不可能的。你看看这个地方身高超过3米的人。
然后买各种各样的生活的节据能买到10一个月能买到10万的这样的呃单个用户或者一些组合特征,对吧?根据你的这个信息去做组合,有些问题啊,这样的一些,然后除掉它以外,还会有一些其他的方法,比如说统计值啊。
就是统计分布统计分布。啊比如说在我这连续值啊,我的一个连续值,连续值的,你们知道分位数这个概念吗?😊,分位数,比如说10%的分位数,你们知道是什么样一个概念吗?分位数是指的,比如举个例子来说啊。
就是现在我有一个年龄这样一个字段。那如果要取整个淘宝的用户当中年龄在呃10%分位数的这样的一个值。我做的事情是把所有的淘宝的用户取过来,让他们根据年龄去排排站。年龄去排败站。
就是从年龄到小到年龄年龄最小到最大,然后去排一个序,然后我去取其中第百从左往右数第10%的那个位置,他的年龄,所以这个叫做分位数。所以很多时候我们去脏数据会怎么去呢?你就会把呃比如说哦举个例子。
我随便举个例子,99%分位数以上的纸卡掉。像这种一个月买脸盆买墩布,买了10万的人很有可能就在99%的分位数以外,就是去头掐头去尾,明白我意思吧?就是大家都会在这个平台上会有消费。
那这个消费它一定是有符合它一定是有大有小的那我让他从小到大去排序,然后把头和尾掐掉,就这个意思OK。😊,这是根据统计呃,然后这个地方还有些其他的数据处理。举个例子来说啊。
第一有一种很重要的数据处理叫做数据采样。😊,叫做数据采样。所以数据采样的时候,很多情况下,大家看到那些样数那些呃我们叫做样本或者那些数据呢,它的正负样本是不均衡的。这种这种场景。
通常情况下是会在分类这个场景里面出现的。在分类的场景里面呢,很多时候你的正负样本是不均衡的,是用balance。举个例子来说啊,在电商里头啊,用户买和没有买过的商品,实际上是不成正比的呃。
或者说他们不是一个数量级的。显然购买这个行为是需要付出代价的,要花钱。所以大部分人只逛不买。😊,那再比如说有一部分的疾病,他的患者和健康人,实际上他的比例是。不均衡的。就是有一些很稀少的病。
他可能患病的概率只有10万分之1、100万分之1。所以这个时候呢,大家想一想,大部分你取到的都是都是健康人。😊,所以这种情况下,你要去构建模型,你需要去构建一个模型,去学习。
区分这两这个健康人和患者或者区分会不会在淘宝这个平台上发生购买这样的行为。很显然,你不能直接把数据放进去。这个时候我肯定只关注大多数的那些样本,少中的那部分样本。我不用太关心,举个例子来说。
我现在以准确率去做评估。那我这个患病的可能性是1%,我只需要把所有人都判断成正常人。我这时候的准确率就有99%,对吗?但这个事情有意义吗?准确率达到99%,这个事情有意义吗?我就想去找到那个病人。
你告诉我说所有的人都是健康的。你告诉我说,这个时候的准确率是99%,这个没有意义的。所以这种时候呢,你的正负样本是不均衡的,你可能要去做一些采样的处理啊,大多数的模型对正负样本比都是敏感的。
比如说逻辑回归。啊,然后这个时候呢你要去做一下采样。比如说你可以随机采样,你可以做一些分层采样,分层采样。为什么要做分层采样呢?举个例子来说,淘宝上的小哥哥和小姐姐他们购买的。😊。
感兴趣的东西肯定是不一样的。你今天做一个。抽样你假如说啊一般不会有这样的情况。假如说你今天数据很倒霉,你今天数据就是你抽出来的所有的小哥哥都落到了啊一份就是落到了。😡。
这个呃抽抽取出来的一个一个数据集当中,然后所有小姐姐都变到另外一个数据集当中。那这个时候呢,你去你再去构建这样的模型,显然是会有问题的。你最好能够保持住这个每一份数据集当中,你的数据。
现在里头的小哥哥和小姐姐的配比,都和我淘宝这个平台上,小哥哥和小姐姐的配比是一致的。最好是这样。😊,对吧?好,所以底下会有一些正负样本不均衡的一些处理办法。举个例子说,最简单的是什么呢?
最简单的是我把正样本或者负样本去做一些采样嘛。所以这个地方呢我可以对正样,我我我写了一些场景啊,有时候我是做一些down。有时候我是做一些 over,或者说叫做过采样啊,这个下采样也叫做欠采样。对。
就是如果我的正样本是十我的副样本是啊一,我可能就可以把十采样出来10分之1,让它尽量的配成1比1或者差不多的这样的一个比例啊。如果我的我的呃量都不太大呢,你可以做一些事情,采集更多的数据啊。
你可以把一的这个部分都重复几次啊,或者说你不用简单的重复,而是用这个地方的一些镜像或者是旋转这样的处理。比如说图像识别当中,你对一只猫去旋转一下去翻转一下去上下平移一下,做一个截段,对于计算机而言。
它看到的数据是完全不一样的。但是对于人而言,它就是一。😊,只猫。这个地方的over sampling还还有一些其他的方法。比如说有些同学可能听过这个方法啊,我不在这个课里头给大家细讲叫SMOTE啊。
smote这是一个处理un balanceance data会用到的一个一个算法。而这个算法呢会造出来一些数据,这造出来的数据呢是在在正样本和负样本之间去做一些线性内差,然后造出来一些样本。😊,呃。
抱歉,我今天没有带手写本,所以写的可能有点丑啊,但是SMOTE啊这个意思。😊,这个意思O。然后呃底下的这个地方修改损失函数呢,也很好理解。你想一想在逻辑回归当中,我是不是把所有的正样本和负样本。
把所有的正样本和负样本,它的los都加在一起啊。有印象吗?我是把它每个样本的los function都加在一起,对吗?那如果你今天有一类的样本占比占了99%。
是不是我所有的损失函数的los都倾斜到上面去了?😊,所以这个显然是不合理的对吧?所以你可以去修改一下你现在的last function,你可以给不同的比重或者怎么样去做一些处理。😊,有同学问到一个问题。
说smote的效果好不好?SMOTE我不太我不太喜欢回答这种问题,因为你没有给我任何的场景,也没有给我数据,就是你没有给我任何的背景信息。你问我一个东西好不好。
你要知道这个世界上呃有一个就是你有很多事情确实是存在就有意义的。所以这个方法在有些场景里面好。在有些场景里面不好。但是很多时候你确实要结合你的数据结匪的实验去看这样的一个结果,你不能直接说它好或者不好。
我见过一些比赛里面用它效果也也不太明显的,也有,然后也有另外一些人号称用这个算法,用这个方法之后,效果有一定程度的提升。所以在这个课里头呢,我会尽量的给大家罗列到所有可能你会用到的处理。
然后你我我对于那种比较清晰的能够告诉大家哪些场景里面效果比较好的,我会告诉大家,但另外一些如果我没有提到,可能这个部分就需要大家通过自己。😊,的实验或者结合自己的数据去看它效果到底好不好,就是没有对。
没有办法直接给到结果,这个意思好吧。好,下面就进入我们重点的部分了。然后这个部分很重要。因为我刚才一上来给大家提到的说,我有一个同事很爱问大家说你知道什么样的特征工程的处理方法呀?他指的就是这一块。
它指的就是这个地方这一块。我看到有同学问到一个问题说没懂修改损失函数解决不平衡不均衡啊,最简单的一个问题啊,最简单的一个问题就是你现在的正样本和负样本的比是99比1。你想一想你最后损失函数当中。
你的损失值是不是在逻辑回归了?如果用逻辑回归,因为我先讲最简单的模型,里面是不是有99%的损失都来源于正样本,有1%的损失来源于负样本了,有问题吗?因为你这幅样本就是这样的嘛。
你每个样本都要求一个los嘛,加起来。😡,所以这个时候最简单的一个处理就是你把这个东西的last function当中少了这一类的los去做加权。它我指的不是说把lo function的形态改变。
比如说不用对数损失或者不用这个对逻辑回归当中对数损失,不是这个意思。就是有些简单的处理,比如说。修改权重对吧?因为它的形态会有一些变化嘛,就是你你最终的损失函数是一个sigma的形态嘛。😊。
类似这样的意思啊,大概大家明白我的意思啊,就是会让你的让你的损失函数上不要有那么强的倾向性去倾向到非常多的那一类。😊,然后这个地方的特征的处理,实际上找指的是不同的类型的数据上,我去做各种各样的处理。
举个例子来说,呃,你会见到各种各样形态的数据。😊,你会见到各种各样形态的数据。比如说比如说你会见到有数值型的数据,比如说年龄,比如说商品的价格,比如说这个房子的一个房龄,这些就是数值型的数据,对吧?
你会见到另外一些数据叫做类别型的数据。比如说你上淘宝上买东西,你那个小姐姐告诉你说,这个口红会有180个色号,然后你就一脸懵逼的问她说180个色号,所以这是不同的取值的类型。然后。
比如说这件衣服的尺寸大,这件衣服的size大小有有S,有M,有L,有叉L,有叉叉L。对吧所以这个东西它是一个一个类别,就是你你可以取不种不同的这种类别。比如再举个例子来说,比如说星期几。
今天星期一还是星期二还是星期三还是到星期天,这也是类别型。O好,像面第三种类型叫做时间型啊,时间型很重要啊。因为它提供了有很多的问题是时续性的问题。
所以我会提供和时间相关的这样的一些信息给到你O然后还有一些更特殊的数据,比如说文本型啊,比如说图像类型啊,比如说你也可以基于我的业务去做一些统计啊,啊,我们分别来看一看有哪些套路是可以去啊做这样的处理。
😊,Of。呃,我先讲,然后对于我这个地方刚才提到的问题,有问题的同学,一会儿在我们休息时间内啊,大家尽管提,然后我来做解答,好吧。这个地方呢我们见到第一种类型叫做竖直形。
叫做numbering这样的类型。所以数直型顾名思义。指的就是我现在这一列是一个连续值呗。所以我先给大家罗列了一下连续值有哪些不同程度的或者不同方式的处理手段。
所以这个地方第一个处理手段叫做幅度调整和规一化。叫做scaling,叫做幅度缩放。什么意思呢?哎,大家都知道我们采集我们会采集很多数据过来。比如说我房子预测这样一个例子,然后我采集到很多列啊。
我给大家随便画一些列啊,那个抱歉,今天那个手写本不在身边,所以那个可能画的不太好,见谅就是我会有很多行很多列对吧?会经给大家说过,每一行呢就是一个一条记录,一个样本。
然后每一列呢就会是呃对应的这个一个维度,一个观测维度,所以你有很多列,你发现这个房子里头啊会有一些列是这个房子的呃几居啊,几居。😊,啊,就几居。然后哎呀这个。就几居这样一个字段。
然后你会有其他的一些字段,比如唉。😡,有其他的一些字段,比如说呃均价就是这块地区的房子的均价。所以这个时候呢就是你发现你的不同的字段之间,它的幅度大小是不一样的。举个例子来说,几居啊。
我假设说有有人有一个豪宅,但豪宅应该也到不了一两百个卧室吧。就是你这个通常情况下,你几居这个应该是在在5以下。😊,就是你那个房子一个一套房子是几居的话,它可能是在呃在5这样一个数字以下。
那那均价呢均价不一定吧。你比如说像北上广这样的地方,很多的呃北上广深这样的地方,很多的区域价格甚至能标到呃4万5万以上,对吧?均价。😊,所以。😊,所以你发现这两列它之间的幅度差异很大。
就有一列大概是也许哎它就是在0到5之间。另外一列是你发现它可以到几万。😊,就是均价而它幅度就大很多。所以所以这个时候哎我我会有什么问题吗?就问大家一下,那这有什么问题呢?你一列的幅度范围小。
一列的幅度范围大,这个有什么不可以呢?模型就不能学了吗?😊,模型当然可以学了,但你回忆一下,有些模型我又拿逻辑回归为例。大家想一想,在logistic regression当中。
我们要做的事情是给每个位置都给一个权重,对吧?所以我会有W1乘以X1加W2乘以X2加W3乘以X3,你现在的X1这个几居,它是一个只在0到5之间的值,你的那个W啊,不不是WX啊。
几比如说X6或者X7均价可以标到几万。😊,你这个时候你去做刚才那个运算,那个W1X1,再加上啊W2X2,你会。啊,WIXI吧。你会发现你有一些字段它的幅度范围非常大,有些幅度范围非常小。
那这个时候会有什么问题啊?大家想一想我的W是不是也要学习出来,幅度相差很大的权重啊,不然的话啊,你的你的均价这个地方几万,你的几居就是0到5,那我W都配一个都配一个幅度差不多的值。
那你几居那个影响因素还有什么关系?我房价上差上1000,你那个几居,你你你多少套房子的N居你都追不上,对吧?😊,所以这个时候就会带来就会让模型很困惑。他在学习的过程当中。😊,因为幅度相差实在太大。
这个时候如果大家去思考一下,我们在逻辑回归当中,我们如果用一个2元来分析的话,我们是一个碗状的一个一个损失函数,对吧?我们要去找到那个碗状的那个lo function,它的底部,对吧?😊。
所以之前我给大家画了一个等高图,等高线的一个图,类似于啊等高线的一个图。所以正常情况下,这个等高线的图应该是这样的。如果你今天的幅度差异很大的话,这个等高线的图可能会变成这个样子。😊,是非常非常尖。
非常非常窄。所以这个时候他在做呃,因为大家知道我的梯度下降是找法线的方向,就是垂直于切线的方向去每次迈进一小步,对吧?所以这个时候大家就会发现它的那个垂法线的方向啊就会。就很纠结,就会抖动。
明白我意思吧?所以所以对于有些模型,比如说逻辑回归这样的模型,他是很怕这个事情的。你给到的数据,现在的每一列有大有小,有些这么大,有些那么小。他学习起来就很纠结。所以这个时候怎么办呢?
我们就会想一些办法把它调整到同样的幅度范围内。比如说有一些scalar,这个地方有一些scalar,比如说最大最小值的scaar,它做一件事情。
它把最大值减去最小值做为一个缩放的幅度去做一个分母去对你原始的数据去做一个做一个转换啊,就是用你现在的这个值,你现在这个值,比如说A去减掉我的最小值。
最小值叫什么叫MINOK这个时候呢我再去除以我的最除以我的最大减最小啊,除以我的max。😊,不好意思,这个写的有点丑了啊,大家理解一下,大概是A减去MIN除以max减去MIN啊这样的意思。
然后所以它会把它变成一个呃一定范围内的一个值,对吧?😊,0到1之间的一个值。OK哎,但是你要把这个地方的最大最小记录下来啊,因为你待会儿对数据去做变换的时候,都需要通过这个公式去做变换。
所以第一个大家要做做的处理叫做幅度缩放。幅度缩放有很多的方式。刚才给大家讲到这个min max scale是其中的一一种,它还会有一些其他的,比如说标准化,叫standard scale啊。
然后呃这个我要给大家。😊,抱抱歉,这个地方我要纠正一下,这个叫做标准化,不叫规一化啊。这个课件有点小问题,就是我们要精准一点,这个的称呼叫做标准化。啊,不是规一化,对,叫standands阶。
所以标准化做什么样的事情呢?就是减掉了这一列的均值,再除以它的啊。方差。这做了一个变换啊啊或者说标准差啊,注意标准差做了一个变换变换,所以它叫做标准化。我我下课以后把那个呃我们的课件更新一下啊。
它叫做标准化。然后这个大家在SK当中去调这个standard scale也可以啊,就直接对数据去fit一下,fi体一下,它就变化了就变化了。然后下面跟另外一些重要的。😊,特征就是各种各样的统计值。
举个例子来说,我我刚才已经说到了一点,我说我要去预估房子的价格,我可能会去采集这个地区的房子的一个均价,一个average的price,然后均价,然后最大最最便宜的价格,最高的价格。然后25%分位数。
75%分位数的价格。所有这样的统计信息大家都可以用。所以这个地方呢基于统计信息去拿到的特征,大家可以在这个地方通过pandas的这个一些crentile这样的呃pandas有一个函数啊。
叫做centile。然后你可以通过类似于这样的一些函数去取到它对应的特征啊,对应的特征。OK然后啊底下这个唉这个操作很重要,就前面这两个我已经说完了,一个是幅度缩放,还有一个是统计值。我也说了一下原因。
然后下面这个地方这个操作很重要,这个操作叫做离散化。😊,我先说理想化是什么样的一个意思?我今天有一列这一列叫做年龄或者叫做价格。这一列显然是一个连续值,对吧?显然是一个连续值。
但是这个连续值我就直接送到模型里头去做计算吗?我拿了一个活逻辑回归出来,我就直接把它送到一个逻辑回归的这个呃结果送到一个逻辑回归的这个模型当中去完成训练吗?😊,想想这个事情一定是合理的吗?
我给大家举一个例子啊,哎,今天我经常会举这个例子,我说今天你你去坐地铁,对吧?你出门你坐地铁,然后你上到地铁上,然后你看你坐地铁的时候呢,就是那个上来了地铁上上来了一个人。
然后你要判断一下说我要不要给这个人去让座,就是这个这个人上来了以后呢,我要不要给他让座。那我我有很多的因素都会影响你让不让该不该让座,对吧?那其中一个因素是这个人的年龄到底有多大。😊。
那你想一下什么样的情况下,你可能会让样座。老人或者小孩对吧?所以上来一个年纪很大的一个步履蹒跚的一个老人,你可能会给他让座。上了一个年龄很小的一个小朋友,你可能觉得说要尊老爱幼,你可能会给他让座,对吧?
啊,带带宝宝的这种妈妈,ok那你可能会让给宝宝。所以这个时候你发现了一个问题,好像好像我这个时候要照顾年龄很小,要照顾年龄很大的人,哎,你在回忆一下我们的逻辑回归,逻辑回归当中,我会去做一个计算。
一加上意的。😊,负的WX。分之1去作为我让座的一个概率P对吗?哎,你想一下这个事情,如果我的W,我年龄这一个字段,如果我的W是正直,我随着我的年龄越大,我的概率P应该怎么样?😊,来。
哪个同学能回答一下这个问题。如果我基于逻辑回归去完成这个现在这个让不让座的这个场景,我的年龄越大。如果我的W是一个正的值啊,就是对年龄而言,年龄的权重是一个正值。那我这个时候年龄越大。
我更有可能会让座还是不让座。X越大WX越大。负WX越小E的负WX越小一加上E的负WX分之1越大。😊,这以是让座,对不对?对,所以你发现但是这样的话,哎我的我好像就照顾不到小朋友了。哎。
那如果我把X取成一个负值呢,取成个负值X越小,他越会让,对吧?那小朋友他会让,但我是照顾不到老人了,所以你就陷入一个很两难的境地。你说现在这个场景太复杂了,这个年龄居然是两段的。😊,我又照照顾小朋友。
也要照顾老人,这个我就很纠结了,我的逻辑回归好像做不到这件事情啊。因为我的W要不就是正的,要不就是负的,对吗?😡,所以他想了一个很聪明的办法。他想了这样的一个办法。刚才的年龄是一个字段,对吧?
一个字段就表示它是一列,就是一列。刚才年龄就是我所有那个表当中的一列。哎,我觉得一列这个东西真的是哎太不好弄了。所以我来我不如来对它做一点小小的变换,我产出来新的三列,这三列分别是年龄小于6岁。😊。
年龄在6到60岁之间。年龄大于60岁。哎,这个时候你发现好办了,为什么年龄这一列变成了三列?😡,我需要在这个里面对我的三列给三个不同的W。哎,我是不是可以单独给小于6的这个区间1个W1给他一个很大的W。
然后给大于60岁的人也给一个很大的W。啊,sorry,这个小于6的给一个很小的W,然后一个负值,一个负值,然后大于60岁的给一个很大的W,这不就解决了吗?中间这个我就不管了。😊,啊,我可以给个零。
你也可以给一个其他的属性啊,这无所谓。就是这个是模型学出来的。但是大家get到我的意思了吗?就是好像。😊,我原本用逻辑回归解决不了这个问题,原因是你的信息不够细,你都给我放到一列里面了。
好像我现在放在这一列里面,我我其实我就很很两难,我要么就照顾年纪大的,要不照顾年纪小的那那我怎么办呢?哎,你既然觉得说你不同的年龄段会有影响。你为什么不把年龄分成段呢?
所以这个离散化本质上就是把年把这样的数值分成不同的段儿。所以他把一个连续值分成很多段,单独把每一段列成一个特征。这个时候你就可以单独的照顾这一段里头的这个数据。😊,明白我意思了吧。
这个操作就叫做离散化哦,它是一个很重要的操作。因为这个操作在呃我了解的同学出去面试啊,就是一般出去面试,问到特征工程这块,5个人能能有4个被问到这个问题,就是你对连续值有什么样的处理。
为什么要做这样的一个处理?有同学刚才回说了一句话,说,trainree model数模型好多都是要离散化的吧。你说错你说错了,你说反了,数模型是不需要离散化的。数模型天生的结构产出的。分支就是规则。
就是离散化的入。要做离散化的是向逻辑回归神经网络。这种模型理数模型不需要。所以呃但是我不了解我不理解我就是我不确定你是不是表达上有一些偏差啊。可能你想说的是说数模型可以产出一些区间或者是规则。对。
数模型可以产出,但数模型不需要对原始数据去做理想化。但是你用于计算的这种模型是需要的。因为你刚才大家已经看到了,我让不让座这个问题,严重的被年龄这个东西干扰了。我照顾不到两头。😡。
所以第一件事情我问大家,这个地方关于离散化这个操作,我给大家解释清楚了吗?😊,关于离散化这个操作,我给大家解释清楚了吗?或者分箱或者分桶。好好,下面我要说另外一个很重要的事情。
我要我要提另外一个很重要的。这个很重要的事情是这样的。哎,我我今天我就我就很纳闷的,就是你要对年龄去做分段,我怎么分呢?😊,对吧你你得告诉我你分的那些边界是什么呀,那我怎么去取这个东西啊?😡。
所以这个地方有两种有两种离散化的,或者它有不同的称呼啊,它也叫做分箱或者分筒。你们如果在其他地方看到了那个叫做分箱或者分筒这样的称呼,它指的也是这样的操作。对连续值啊,对连续值做分箱或者分筒。
但这里头有个问题,就是我去我这边界怎么取啊?😡,你现在这个场景你是可以去敲1个6岁和60岁。但但。比如说我今天上淘宝了,我我看一个商品的价格,我我不知道这东西贵不贵啊。比如说呃举个例子啊。
就是比如说电子产品可能对我还比较熟悉,就我对电子产品可能比较熟悉。那比如说今天这个东西是一只口红或者是一条一一件什么连衣裙,那我就很懵逼了。😊,我对那个东西不熟啊,什么样东西算贵,什么样算便宜啊。😡。
那我怎么去分这个段儿?所以呃这个地方有两种处理方式,第一种处理很很简单啊,就是我们今天讲到的全是实操类型的那个一些处理。所以那个很简单,这些地方呢有两两种处理方式,一种叫做等平切分。等平切分很简单。
就是啊总共呃衣服最便宜是搞活动的5块钱最贵的这个衣服可能价格呃到几千,那就从5块钱到几千,每隔50块钱切一段,每隔50块钱切一段,能明白吧?这叫做等平等距啊,叫等距切分。
所以是等价格距离或者等年龄距离去做切分。我直接说我要分成1段。O那就取了最大最小。然后中间呢按照最大最小,每次跳过呃是那个10分之1的最大最小这样大小或5分之1的最大最小,然后去做一个边界产出边界。😊。
所以这个叫做等距切分,但是等距切分会有些问题。有聪明的同学能告诉我等距切分的问题是什么吗?哎,你想一下,好像好像你你看数据的分布会是均匀分布吗?这个世界上好像是均匀分布的,这种数据好像很少啊。
所以可能大部分的连衣裙,大部分的口红可能都会集中在某一个价格段里。那你这样的话,你切一切有什么用啊?我其他的那些段里头取取不到什么数据,大部分都丢在一个一个段里头了,或者丢在两一两段里了。对吗?
所以没有人告诉你说,我的数据是均匀分布的呀,凭什么你去等距的去切呀,这个好像会有问题吧。😡,所以OK所以这个时候呢,对呀,第二种处理方式我就不等距了。对,有同学很聪明,我按照分位数来切不行吗?
我要求我每个桶里头都有总量的10分之1的数据不行吗?我按照从小到大排排站站好以后,我按照等数量的方式去切就取出来那个边界不可以吗?😊,哎,很棒。所以我看到我们的同学很棒,这个方式叫做等平切分。是的啊。
很好。所以等平切分是指的我做一些统计,我去把分位数取出来。然后我根据我的分位数去去分段。好了,所以离散话我就给大家介绍到这儿离散化一般情况下最棒的方式是用呃就是两种方式都有用啊,两种方式都有用。
然后这个里面呢,如果大家要去用这个地方的pas去做操作的话,有两个函数,一个叫cut,一个叫Q cutcut呢是直接等距去切,就是你给边界,它按照边界去等距去切。然后如果那个那个Q cut呢。
Q cut就是我去算一下百分比,然后我去给你切啊,就是分位数,然后就给你切。😊,好了,然后呃柱状分布我就我就不多不说。然后我们来说一下,刚才有同学问到了一个问题。
说老师我知道有一些数据的处理叫做one化encoding。😊,对,那个读热向量编码和离散化是两回事儿。你们下次如果要出去面试。有人问到的话,你千万不能说这个是一个处理啊,它是两种不同的处理,对。
这个会显得有点不专业。那刚才我介绍,我刚才我介绍到了那个这个数值型。大家看到数值型的话,我要做什么幅度缩放。我要做一些唉统计的运算去拿到一些结果。哎,我要去做什么?我可能会有些模型我需要去做一些离散化。
这样的话,我能够在计算的时候就照顾到不同的段啊,我不会随着年龄越大或者是越小而怎么样单调的变化,对吧?我可以让它不单调,哎,这个就很好。然后我们下面要介绍另外一类数据,就是计算机完全懵逼的数据。
叫做类别型的数据。OK一支口红有180个色号。😊,啊,这个180是纯输啊,鬼扯的啊,我也不知道口红有多少种色号色号,也许这个世界有多少种颜色,口红就可以有多少种色号。然后一件衣服会有很多不同的颜色。
一一双鞋会有很多不同的尺码。然后你的一件衣服呃,可能会有不同的size大小。OK好,所以这样的数据计算机现在就完全懵逼了。😊,我我哪知道什么叫红色,什么叫绿色?什么叫蓝色?😊。
我我怎么知道今天星期一和星期二有什么样的差别?😊,你你我读不懂这个东西,你得告诉数字啊,在计算机的世界里,只有数字,更严格一点点说只有零和一。😊,所以你学到你掌握的这些东西,但其是读不懂的。
所以怎么办呢?这个地方我列了四种操作,我一种一种来给大家讲。第一种操作叫做读热向量编码,也叫做亚变量变换,叫做one hot encoding,哎,也叫做Wmyvari这个transformation。
所以读热向量编码或者亚变量指的是什么样的意思呢?😊,这个时候有一个问题,就是啊我今天去买一件衣服,我看到我看到有个款式衣服太棒了。然后这个款式衣服有三种不同的颜色啊,分别是这个啊红色啊。😊,红色red。
然后呃绿色green,然后蓝色blue,然后啊四种颜色嘛,然后黄色yellow。所以有四种不同的颜色。计算机读不懂了。那怎么办呢?计算机只能读这种数字,我要区分这四种颜色怎么办呢?嗯。嗯。
那我要用数字编码一下,对吧?所以有同学就提出来了一种编码方式,这种也是一种编码方式啊,叫label encoder label encoder。所以叫做1234。然后你很开心,你说老师。😊。
我区分出来了,你看我现在把R用一个字典python里头字典映射成一,把green映射成2,把blue映射成3,把yellow映射成映射成4,这个事情就解决了。😊,让也很开心,哎,但有同学能告诉我说。
我这种编码会不会有会不会有问题啊?😊,就是独热向量编码,呃,为什么我一定要用独热向量编码,而不用1234这样的编码形式呢?至少在逻辑回归这样的逻辑回归这样的模型当中,为什么我不能这样去做呢?哎。
回到刚才年龄的那个例子,你想一想,如果我颜色这个字段,我拿到的权重W是大于零的。哎,我是不是黄色明显概率就会变高啊?😊,如果是小运营的,是不是颜死红色明显概率就会变高啊?
问题是你凭什么让不同的颜色之间有大小关系啊?谁告诉你说黄色比红色要大了。谁告诉你这件事情了,不能红色比黄色大吗?所以就很糟糕这个事情,对吧?哎,我们回想一下,我们可在刚才李散话里头是如何处理这个事情的。
😊,OK我处理不了。😡,那不处理不了,不如我就把它们分到不同的列里面就好了。就是我认为说不同的颜色,它应该是等价的对吧?红色是我的一种颜色,蓝黄色也是我的一种颜色,凭什么你说红色比黄色数值要小。
谁给你的权利,所以你不能这样做呢?你就只能用其他的方式去解决。所以有同学提到一个很好的思路叫做正交化。没错,你调得到这个核心的点了。这个地方最根本的东西就是让。😊,让这些不同的特征之间是平等的。
平等怎么办?对,平铺开来给四列,这四列分别是是不是红色,是不是绿色,是不是黄色,是不是蓝色。所以这个地方R。7。B。喂。如果今天是红色是什么1对吧?其他颜色肯定取不到000,这叫做one hot。
然后如果今天是绿色,肯定是010。0大家ge到这个意思了吗?好像他做了一个什么样的事情啊,好像我们现在一旦发现说哎我引入这种正相关或者大小顺序不合适的时候,我就把它拆开来,我就单独去考虑。
我就单独去考虑这里头的每一种取值。每一个段儿它是不是。😊,是正相关还是负相关?😡,所以这个地方的独热向量编码就是指的你这一列有多少种不同的类别型的取值,我就把它平铺成多少行啊,多少列。sorry。
我把它平铺成多少列。大家明白我的意思了吗?get到我的意思吗?这个就叫做独热向量编码,叫做亚变量。所以你现在逻辑回归就可以很平等的去处理这个地方的红色、绿色、蓝色和黄色了。ok好。
这个操作大家可以通过pas当中的get da miss去拿到get da miss可以从原来的这样一个数据当中。
大家看到啊这个cabin里头yes no这个灯船口岸SC啊SCQ可以去对get missget miss是一个很好用的函数,它可以帮助大家去拿到啊这个地方的。😊,这个这样的一个结果呃。
亚变量变换和读热向量编码是两种称呼是两种称呼。这个东西就像是呃就是奇异果和。呃,这个地方的。哎,奇奇奇果和。不对,就就是猕猴桃是吧?sorry我有点懵,就是奇异果和猕猴桃一样,就是两种不同的称呼。
但是说的是一件事情。对啊,所以我没有单独说亚变量,就是这是一种变换。😊,啊,好,然后类别型的特征啊类别型的特征呢有另外一个处理叫做哈希特征啊,那举个例子什么意思呢?刚才大家见到的叫什么?
刚才大家见到的叫one hot。哎,你们知道为什么叫one hot吗?😊,因为弯号的表示说我只有一个地方是热的哟,我只有一个位置是一哦,其他位置全是零哦。其实除掉onehot以外。
有另外一种变换的方式叫modty hott。marty hott的意思就是哎,我有几个地方都可以同时使用,同时被激活。所以大家来看一看这个地方有一种文本处理的方式。😊。
有三句话叫Johnhn likes to watch movies。Mary likes movies, too。Johnhn also likes football。
所以这三句话我如何去对他做编码呢计算机是读不懂文本的,你们不要对他抱太大的希望,文本他绝对读不懂,所以怎么办呢?做表示啊,所以怎么做表示啊,他想了一下,他说这里头不就1234567899个词吗。😊。
我就立搞一个九个词的词表不就考了,所以他这个地方就搞了一个九个词的词表。john likes to watch movies,mary to, also football。😊,然后我这句话哪些位置有值。
我就变成一,哪些位置没有值就是零,能明白吧?所以这个就是一种呃,它有一点点像mty hot,就是不止一个位置为一哟。我出现过的所有词,这个位置都要填一哟。哎,那这个东西有没有进一步的一个处理呢?
有时候它会有更高级一点点的处理。举个例子来说啊,我随便举一个例子,今天大家可能去你也看一个什么网易的呃新闻客户端,看一个今日头条里头的新闻,他嗯他希望对文本去做一个编码,但是他又觉得你上面这个编码呢。
好像也还挺好的。但是这个编码形式好像有点好像有一点点的。😊,太稀疏了,就是维度好像很高,有没有办法去把这个信息更浓缩一点点,但是又能表现出来它的体现出来它的某某种程度的信息呢?他做了这样的一件事情。
大家都知道那个比如说头条啊,或者是这些呃网易新闻呢,或者是新浪新闻呢,他们手上会有很多的那个领域内的词表。比如说他今天有一个领域叫做财经啊,那财经这个领域呢就是哎呀。对,就是啊财经类。然后会有一些。
比如说体育类。okK所以每一个类别当中都会有一些词表,对吧?所以他这个时候呢,他找了三个不同的领域过来啊,他找了三个不同的领域过来。所以一个领域是财经,一个是体育,还有一个是mabe政治啊这样的新闻。
然后所以在这种情况下呢,你每个领域都有一批词表,他就统计说我第一句话落在这三个词表当中的词有多少个,落在第二个呃这个地方的类别当中的词有多少个,落在第三个类别词表当中的词有多少个。
所以他拿到了这样的一种编码。大家听明白了这个处理怎么来的吗?😊,就是今天我我我有我有很多的词表,我有财经,我有体育,我有政治新闻,然后都是一堆的词表。我就统计说它在里头出现了多少个嘛?哎。
这个有什么用啊?大家想一想是不是能够在一定程度上体现我当前的这个文本的一个。一个一个词的一个倾向性啊,或者内容的一个分布性,分布倾向性啊。所以这种变换呢会依旧依据一个判断,这个地方叫做哈希的判断。
比如说我刚才说的这个哈希判断是判断我落在这些词汇当中的词个数。财经体育和新闻的词表,他们自己是有的。因为你想一想你随便戳开一个你随便去戳开了一个体育新闻啊。
就是你戳开了腾讯的一个体育新闻的这个专栏里面每天有这么多的报道,哪些词出现最高频,他也不知道吗?他已经做过这些统计了,所以他有这样的一个词表,明白吧?就是有一份预先预先存储好的词表。
然后我去判断这些新来的这篇文章落在不同的统,落在不同的这个地方的。😊,类不同类别的新闻当中的次数有多少次词?有多少次?所以你就拿到了这样的一个表达。你看是不是我把第一句话可以表达成1个320。
第二句话可以表达成1个220。第三句话可能会表达成1个102,哎,他们就会有一体现出来一定程度的分布的差异性啊。😊,对吧。没问题吧。所以所以大概大家get到我的意思了。所谓这种哈稀技巧。
哈稀处理就是这样。然后还有一些其他的处理,我我把这个地方的类别型的给大家讲完啊,然后我们再那个歇几分钟,我再给大家讲后续。所以这个地方呢还有另外一种很tririck的处理啊。我给大家说,你们听着。😊。
这个地方呢有几列,第一列叫做性别啊,男女。第二列呢是年龄啊,21、48、22啊,第三列呢叫做爱好,OK叫做爱好。呃,今天。今天。😔,我想去对这里头不同的数据去做一个表示。比如说我想对性别去做一个表示。
我的性别可以基于什么去做表示呢?对,可以基于后面的信息去做表示。比如说基于爱好。这个时候呢有几种不同的爱好,分别是足球、散步和看电视剧。所以足球散步和看电视剧。
你想一想男生和女生的占比是不是一定是不一样的呀所以他把足球散步,他把足球啊散步和看电视剧分别列成这个地方的三列,去统计不同的性别。这种爱好出现的占比有多高?你看男生里头有3分之2的男生都是喜欢足球的。
有3分之1的男生是喜欢散步的。有百3分之00%的男生是喜欢看电视剧的。然后女生当中有32%的女生都是喜欢看电视剧的,有3分之1的女生啊呃,这个当然我我有可能是我的数据的问题啊。
就是3分之1的女生可能是我这个顺序可能有点问题啊,是喜欢散步的,有3分之0的女生可能是喜欢呃踢足球的。😊,大家get到这个地方这个数据是怎么得到的呢?😊,是通过性别做分组。
在每一组当中去统计其他一个类别型的列当中的不同占比。不同类取值类属性取值的占比。所以我讲明白了吗?我讲明白了。O所以这个地方呢,我希望通过另外一列对我这一列的某些属性去做一个表达。我发现说他是能表达的。
因为男生和女生显然他在爱好上会有一些差别。OK好的。没问题啊。对,这个有些同学说,然后呢,然后你就可以在男生的那个样本当中接上这样的一接上这样的一个。😊,三列在女生的那个样本上接上这样的三列。明白吗?
就是它可以作为特征,直接补补充到原来的数据上啊,这个意思。嗯,好的,我们休息5分钟,然后一会儿我回来给大家把后面的内容讲一讲。所以这个地方呢呃休息5分钟的时候,我先回答一下刚才有同学问到的一个问题。
有同学问到说,老师我没明白下彩样什么意思,就当三品什么意思?很简单,你现在会有10万的正样本会有1万的负样本。那我把这10万的正样本当中取出来10分之1等于1万。
我取出来这一份数据去和我这个地方的一份数据构成训练集。😊,明白了吗?当samp做的事情就是对多的那一份去做采样。啊,去对多的那一份去做采样。所以呃10比1,你现在从十里头取出来10分之1啊。
这叫当 sampling。好,有同学问到一个问题,问的很好,你问normalization和 standardization有什么区别?这个问题问的很好。😊,我来跟你带大家说一下这个差别是什么。😡。
标准化是对列做处理的。标准化是对列去做处理的,什么意思?我对我的一个价格这一列去统计价格的呃均值和方差标准差。然后我去做变换。normalization是对行去做处理的。所以我是把一整行的X全都。
把它的平方和加在一起开根号作为我的一个呃normalize一个一个分母,再去对数据做处理。所以我说明白了吗?归一化和标准化nmalization归一化是对行做处理的。
standialization是对列做处理的。OK明白了吧?😊,对,归一化就是把所有一行里头所有的X1X2这一堆东西的平方加在一起,然后再用X去除以根号下的啊这一堆东西的平方和对,归一化是对行,没错。
没有明白这个地方的histtogram怎么用啊。你现在不是有很多的样本吗?你不是有很多的人在淘宝上发生记录了吗?所以有一些行这个地方会是男呢,会是m啊,有些男有些行会是非 male啊。
你把这个男的这一列,3分之1、3分之20接在后面接三列不就好啦。然后把女性的这个地方的零3分之13分之2,在后面接三列不就好了,这个事情就完成了。😊,所以明白这个地方怎么用了吗?就接三列拼接上去啊。
是男的就拼上这三个三个值,是女的就拼上那三个值就好了,这不就是特征吗?😊,明白了吗?明白这个用法了吗?对呀,相当于自己补充的特征啊,没错。啊,你们没有操作过数据是吧?
就是我的意思是把这个地方在这个已有的列上接三列,分别是3分之1、3分之2和0啊,03分之1和3分之2明白吗?😊,我说我说我这么说,大家能明白吗?就是你的数据就是行行列列的形式嘛,每一列就是特征嘛。
每一行就是一个样本嘛。😊,对不对?不会啊,互联网公司的数据不不用不用那个人工去做标注啊,每天淘宝上会有那么多的用户浏览的,哪些商品买了,哪些商品没买,哪些商品点了,哪些没点。你每天打开抖音,你双击点赞。
你浏览的时间长度,你看头条里头的每条新闻,停留的时间长度,这些都是标签啊。我为什么需要人工去标注呢?人工还标不过来呢?你天天在看这些东西,你在给我提供label啊,我我为什么要自己去标?😡。
你天天用抖音的,你天天用头条,你天天用淘宝,用京东的。对吗。明白了吧。哎,我们说点好玩的,因为有人说小黄图需要人工标注那个不一定哦,你要知道物以类聚,人与群分呢,我不需要全部我手工去标注哦,我标一点点。
然后我去看一看哪些人在这些东西上面感兴趣。我再看看这些人去看了其他的什么样的东西,我可能就知道了。在夜深人静的时候,你打开了你的手机,看了什么样的东西,很有可能这个东西。
这一类人看了某些东西就有可能会和这个有关系哦。😊,所以。不一定哦,你要想办法。就是广大的互联网。😊,民众永远可以给我们提供很多的数据。大家get到了吧?😊,哎,真的这些互联网大厂能做的这么好。
不全是不全是那个呃他们的模型做的有多好,真的是数据数据很充分,数据非常充分。呃,我再说一下这个地方的Hisisttogram映射,这个不是一个你你们在你们并没有你们在其他地方并不会看到这个说法。
这个只是之前在比赛里头用过的一个一个技巧。它的原因是因为男性和女性的行为会有些差别。后面这个向量本质上体现出来了,他们在不几种不同的行为上的一个一个分布差异。
所以我把这两部分信息分别接在男性和女性上会能对我区分是有帮助的。比如说男性很显著的其中某一列就会是比较大的值。那女性会是比较小的值。但这个东西不一定不一定是。不一定是一定要做的处理,明白我意思吧?
刚才的那个类别型的那些呃one hot encoding那种是经常会做的啊,或者是有些情况下我们也会用label encoding,有些情况下也会做这样啊。我说一下时间型的这个特征。
就是feature这样的特征啊呃,sorry time time这样的feature time这样的feature呢它很特殊,它可以做连续值,也可以做离散值。我举个例子来说。
今天头条想去预测这想给你去做一个这个推荐,就是说我这个结果它的一个。😊,它的一个给你推荐一个1一系列的这个文章,或者是抖音,想去给你做一个。什么样的视频的一个推荐?对视频的一个推荐。
那大家可以看到这个地方呢,我们需要捕捉到大家一些信息。比如说我可以去看你在我抖抖音或者头条上看到的某个内容,你的一个浏览时长有多长,就是单页的浏览时长有多长,也有可能有间隔时间。
比如说你上次你经常在京东上去买呃洗面奶。然后你距离上次买洗面奶到现在有多长的时间了。😊,所以这两个东西它是。你可以看出来时间是可以作为连续值来用的,可以作为continuousnumber来用的对吧?
但,它同样可以做离散值。就是你看一天当中的第哪个时间段,这个有用的。举个例子来说。呃,饿了么。饿了么现在是属于。😊,是阿里的是吧?OK对,比如说饿了么或者说美团外卖。那那你去看看这个数据。
真的下单的这个可能性显然和它的是否在饭点,这个时间段是非常非常相关的。比如说。一周当中的星期几?啊,就是周末和工作日是有差别的对吧?
工作日和周末okK然后大家知道会有一些什么black blackack Friday之类的一些活动。一年当中的哪个星期,唉,哪个季度会影响天气的,这个是会有影响的对,然后。😊,然后你们也知道。
就是在双十一618之前。大家只加车的,没有人会购买的啊,也有人会购买。对金主爸爸们会购买。一般的普通老百姓,像我这样的普通老百姓可能只会加车啊,等着到了活动期间再买啊,反正也就两三天了,我等得起啊。
然后可能金主爸爸们就不想等,就想直接用啊,所以这个有差别,还是能有很大的差别。所以比如说距离618或者距离双十一的时间,对吧?这个也可能也是一个特征,所以你发现这个很有意思。
然后这些地方有个比赛是以前在开拓上的一个比赛。😊,对,呃,叫做acquired value shop challenge啊,大概是一个电商的一个比赛。然后这个比赛呢这里头有一个很重要的啊。
其实他给的信息就是呃某一个customer,某一个顾客在某一个product商品上啊,一个多贵的一个商品上发生了这个购买。然后这个后面是一个time一个time step,一个时间戳。😊。
然后所以他在这个地方呢取了很多的信息,年月日啊,星期几啊,一年当中的第几周,一年当中第几周是有用的。为什么?哎,你们知道有一些节日叫做什么父亲节和母亲节吗?😊,他们是和一年当中的第几周是有关系的。
所以这个地方你不要觉得某些信息是没有用的。它在有些场景里面是有用的。然后our of the day啊,我不知道可能下班以后上班和下有很多人逛逛购物,它是会有时这个网上购物,它是会有固定的时间点的啊。
比如说。每一每个晚上到了快睡觉的时候,如果有什么某美食博主发了一些呃美食的照片,大家就开始。就很饿,对吧?所以就是our of day这个东西呢会体现一些差异啊。
所以啊所以大家看到的就是这个地方会有一些信息啊,你们以为这个信息这些信息就已经够了吗?哎,我问一个问题啊,这个地方的年月日是什么类型的呀?如果我抽取出来的年月日它是什么类型的呀?😊。
如我做了一个数据表达,抽取来了年月日。它是个类别型的吧。对,字符串嘛就类别型的对吧?所以这个时候大家要再接再去接类别型的处理啊,比如说独热向量编码,明白吧?OK然后比赛呢是需要开脑洞的。
比如说看节假日和购物的关系,所以这个地方呢他把所有美国的节假日信息全都取出来了。去看这一天距离这一个节假日有多长时间啊,这个是会影响会有影响的。OK就像我刚才说的,618和双十一,这个对电商绝对有影响。
你们想都不用想这个这个影响非常大。而且那几天的数据分布明显和平时的分布不一样。呃,我们再讲讲文本。刚才有同学提到文本了。😊,文本的最简单的一种形式,刚才已经讲过了,这个叫做磁带模型叫back for。
为什么?因为我就相当于拎起来了一个袋儿呗,这个袋里头就有出现了这五个词呗,我们就把这把词拎着嘛,对吧?我把这这这个地方的这一把词拎着嘛,我去拎着这个这个袋儿里头的这四个词嘛。
所以你每一行相当于你你打了一个包啊,它叫stand模型叫back for。打了个包顶起来。OK这就是它的一种表示形式。计算机能读懂。呃,然后如果大家要用这个里面的这种形式的话。
它有一个处理函数叫conactizer,叫做筒磁这个。应该叫磁屏向量器,这个磁屏向量器就会把一句话转变成一个什么样的向量。但大家注意这个地方的向量,很显然,里面的衣少零多。明白吧?
就是出现的词显然是少数,这个词表当中没有出现词显然是多数。所以在这种情况下呢,它最后的存储通常都会是一个稀数矩阵,spae的一个matrix。稀疏矩阵。因为这样能节省空间吗?然后有同学会问到一个问题啊。
说老师。有个非常严重的问题。李雷喜欢韩梅梅和韩梅梅喜欢李雷,这明显就是男追女和女追男呢。但是你用刚才的磁带模型糟糕了,都是韩梅眉,都是喜欢,都是李雷,都是仨词,拿一个袋拎起来,我怎么知道谁喜欢谁呀?
这你不就糟糕了吗?你看你后面模型可以去很牛逼的模型啊,你送给他的信息你都分不出来,你就看到三个词,李雷韩梅梅喜欢我哪知道谁喜欢谁。😡,所以你发现你丢失了一个很重要的信息,这个信息叫做顺序信息。😊。
因为李雷喜欢韩梅梅和韩雷,韩梅梅喜欢李雷,你用前面的磁带模型,blackboard拿到是一样的结果。😊,所以怎么办呢?这个地方有一个东西叫Ngram。呃,它和语义没有关系和语义没有关系。
就是大家听的这个顺序啊,这个故事是怎么发展的。故事的一开始呢,他们想了一个很牛逼的方法,叫做style模型,去把文本表示成计算机看。然后计算机就提了一个问题,说老哥,你这个方法不行。
因为韩梅梅喜欢李雷和李雷喜欢韩梅梅都是111,后面一堆的零。😊,对吧我去这两句话我分不清楚,然后你人又告诉我说,李雷喜欢韩妹妹和韩梅明喜欢李雷是两句话。😡,不一样的含义。所以这个地方对丢失了语序信息。
那怎么办呢?那怎么办呢?谁告诉你只能留李雷韩梅梅喜欢呢?你去多留一点不就好了,你把两两相连的词也留下来不就好了吗?你刚才那句话除了编码声,李雷喜欢韩梅梅,你也可以再加上李雷喜欢喜欢韩梅梅啊。
这个就叫做togram叫bigram,就是2元。😊,这个就是2月。这里叫叫做哎呀。不好意思,对,这个叫做tto gra,就是我这个地方的bigrams are cool。
它会直接取出来by gras are cool,它也会取出来bigrams grams are are cool。😊,ok。所以你发现他用了一个非常原始,但是很有效的方式去把语序信息捕捉下来了。
他把两两相连,甚至是三三相连的词全都存下来了。所以这个地方用到了一个类叫做conactizer。当你用conactizer去初始化一个对象的时候,用这个对象直接对我的数据去做一个fe transfer。
它就可以表示成这样的形式。很神奇吧,那句话就变成向量话的表示了。而且这个下面化的表示,计算机还真能读明白为什么?因为你每一列就是一个词嘛。😡,对他不需要去知道这一列是什么词,他只是需要只需要知道说哎。
当我这个词出现的时候,我这个词频繁出现的时候,它会更倾向于是样的一个结果。那个词更出现的时候,它会更倾向的是另外一个结果,他根本不需要去个知道这个是什么词。😊,具体此的物理含义他不需要知道。ok。
所以这个地方第一个大家见到的工具叫countact。Conferprier。文本分类是一个很管广很垂直的一个问题。这个有兴趣后面再给大家聊,它不属于这节课的范畴啊,会相对麻烦一点点。传统的方法。
你可以用这个地方的back words,或者是TFIDF或者是一些其他的方式,再加上各种各样的机器学习的模型去完成普素贝耶斯SVM逻辑回归复杂一点的模型。
可以借助于word embedding词嵌入或者是what to vector转是转成稠密的词向量,再加上啊长短时记忆,或者是这样的一系列神经网络去完成。所以这个再说你们。如果我刚才说的话,对大家而言。
有很多新的词或者是不认识的词没关系,这个仅仅是因为大家呃要一步步学过来啊而已。啊,下面我会给大家讲到这个这个唉这个故事在不断的发展啊,一开始是磁带,然后磁带这个计算机很不满,说你丢掉信息了。
我我我明明明明。😊,谁喜欢谁是有顺序的丢了。所以他把Ngram加进来了。Ngram加进来了,计算机又提意见了。😊,说哎老哥,你这方面好像还是不行啊。😊,你凭什么说一个词。
在我现在这个文本当中出现的频次高,这个词就很重要啊。你这个词出现了两次、三次、四次、5次、6次,它就一定比那些出现一次两次的词要要要那个呃不重要吗?呃,要更重要吗?不一定吧,所以这个故事往后发展。
它就出现了很奇怪的一个问题,就是。你只接我统计的频次我不满足。我希望你能告诉我说这个词对于现在这个文本的一个重要度。不要给我次数给我一个连续值告诉我它的重要度。所以这个怎么怎么算呢?
这是很经典的一类自然语言处理的特征,很重要。这类特征呢对TFITFIDF是很重要的一类统计特征。这类统计特征在大家当年做搜索引擎的时候会频繁的用到它是怎么去做呢?非常的简单。我给大家说一下。
你们就明白了,它有两个部分组成,一个叫做t frequency,一个叫做inverse document frequency。😊,叫做term的频度和逆序啊,文档频度什么意思呢?他觉得说哎我这个词。
我这个词在我现在这个文档里面出现的频次高的话,应该蛮重要吧。然后他转间想了一下,说,我去,万一这个词在全部的文章里头出现频次都很高。那不就是大家都在用这个词吗?有什么用啊?😡,好像这个事情也不太重要。
所以它分了两个部分,一个部分是当前这个词,在我现在这个文档里面出现的次数除以全部文档里头出现的次数来体现它的一个一个term的一个frequ。
然后下面这个地方有个inverse document frequency。它指的是说这个总文档数去除以含T的一个文档数。还有我当前的这个 termm的一个文档数。😊,总之你们想一想这个地方。
他说的事情就是说这个词什么时候重要了呀?当他在文件当中出现的次数。增多的时候这应该很重要吧。哎,但是他如果在整个语调库当中,每篇文章大家都在用它,它好像就是一个滥用词吧,好像也没那么重要。
所以它结合了这两个东西是做了一个计算,大家可以看一下,做了一个计算,拿到了一个结果。OK这个TFIDF就是这样得到的。同时它也很好理解,大家也可以直接理解它是。😊,对,就是你可以看到它能体现出来一个词。
对于一个文档,它的重要程度有多高。啊,下面会有一些其他的方式,这个等到回头再跟大家说,这是一些深度学习的一些方式,它能把一个词映射成一个稠密的词向量。应该刚才刚才大家看到这个是一个稀疏的词向量。
这个很spae,非常稀疏,有很多零有些一现在大家看到这个是一个稠密的向量啊,一个相对比较稠密的向量,就是what to。然后这个这个等到后面有机会再说,因为在因为它和机器学习的模型配合效果并没有特别好。
就是这种语义的表达可能放在深度学习当中会更合适一点点啊,在机器学习当中,至少你用数模型它是不太不太合理的。可能你用一些SVM可能还好一点啊,假似SVM可能是还ok。啊,这个的后面的原理内容比较多。
我们就先暂时的跳一下。如果大家感兴趣的话,你们可以去呃搜一下这个关键词叫word to vectorO。啊,然后呢其实就是各种各样的统计特征了。举个例子来说,这个地方的加减平均。
比如说商品高于平均价格多少啊,比如说用户在某个品类下消费超过平均用户多少啊,比如说用户连续登录的天数超过平均多少啊,然后以及一些分位数,商品属于售出价格的多少分位数处啊,次序排在第几位啊,班上的成绩。
你排在第几位的同学啊,比例型电商里头好中差评的比例啊,你已经超过全国百分之多少的同学呀,对吧?然后这个地方有个比赛是很早的一届,大概14年还是什么时候的一个天池大数据的移动推荐算法大赛。
然后这个大赛呢给到给到了大家一些数据。比如说大家看到这个地方的数据呢,包括有用户的ID有当时在淘宝上的一些商品的ID但这个ID都是做过处理的,就是不能直接和淘宝的那些数据去呃匹配上的。为什么呢?就是。
用户的隐私很重要,就即使说我们在我们在大陆可能呃很多公司做的还没有那么完善,但是用户的隐私很重要,你直接把这些东西甩出来是会会有影响的啊,所以这个时候他会做一些脱敏处理,就是做一些哈西的映射呀等等啊。
然后使得现在呃同一个用户出现的时候,它会是同样一个优子ID。但是你看不到他的名字,你也和淘宝那些U子ID对应不上。😊,所以这个地方呢就给了用户,给了商品,给了他的行为。
比如说这个行为可以是哎浏览哪、收藏啊,加购物车呀,购买呀,对吧?😊,啊,然后比如说用户的那个隐私用户的地理位置,对吧?地理位置,所以这个地方有个叫做吉尔哈西。吉尔哈西呢就是相当于把整个地球切成了很多块。
然后每个经纬度的小方格里头可能会是一块,这样,然后他给了你一个这个小块的一个ID号,然后会有一些item的 categoryry,就是你这个商品的一个类别呀,会有一个time呀,行为时间啊,对吧?😊。
对,然后底下这个字段呢是具体商品的一些信息。比如说商品的ID啊,比如说商品的位置啊,江浙沪包邮嘛,你们知道的对吧?肯定会有影响的吗?比如说item categoryry啊,商品的这个类别啊等等。
然后大家来看一下这个地方的特征处理啊,这是一个当时特征处理的一个呃抽取出来的一部分特征,我们来一起看一下,你就知道这个信息做的有多细了。然后在这里面呢,首先前一天的购物车商品很有可能第二天就被购买。
它找出来一个这样的规则啊,你先不用管了这个东西和特征没有关系。然后以及剔除掉30天内从来不买东西的人啊,就是呃只逛啊,频繁的逛,但是不买的人啊,这个会有一些影响。然后加车N件只买了一件。
基本上剩余的都不会买。😊,尤其是当这N件商品,它的呃它的这个品类,它的类别是一样的。你买了一个买了一个电脑,一般情况下不太可能你加车的其他电脑你也一起买下来啊,比较少这样的情况。然后底下就是一些特征了。
这些特征包括说购物车的购买转化率呀,所以这是一个统计的特征。😊,购买准化率就是说你加车加了多少,你买了多少?😡,就是你最后转化了多少?对吧转化了多少?对啊对。
然后这个地方的商品的热度就是商品的一些统计维度的特征呢,对吧?然后对不同的item对对不同的物品的点击啊、收藏啊、购物车呀、购买的一些总数啊。统计特征对吧?点击收藏购物车购买的平均每个user的技数啊。
统计特征,对吧?变热门的品牌和商品变热门是不是差值啊?昨天卖出去了8000件,前天卖出去了1000件,那是不是1000到8000是不是一个涨幅啊啊,或者说在大前天卖出去了200件。
200到1000到8000,这是一个涨幅,对吧?这个东西开始变成网红的东西开始热了吧。然后最近的第1237天,最近最近的第一天第二天第三天第七天的行7天类的行为数和平均行为数的一个比值啊。
就是这个用户的一个一个那活跃程度有多高啊?商品在类别中的排序啊,对吧?商品交互的总人数啊,这些都是一些统计特征嘛?然后商品购买率及转化率与平均转化率的一个比值啊,然后商品的行为和同类同行为的一个均值啊。
最近的。😊,呃,一天两天三天内的行为啊,按照四类去做统计,就是它不是会有四类嘛?浏览加车啊,点击购买这样。然后最近的交互离现在的时间呢,这就是一个时间型,总交付天数啊,时间行,然后。大家可以去看啊。
这个地方就很多会有很多。对啊,有同学说这个规则是做规则处理嘛,就是有一些有一些是数据清洗,做一些数据清洗的一个处理。然后有另外一些呢是确实会在预估的时候发挥一些作用啊,会发挥一些作用。
所以它会用这样一个总结出来的一个规律去用起来。因为不管你是人为去看数据,还是用细学习的方式去看数据。实际上你本质上是为了捕捉到数据当中的一些规律嘛。对。
所以这个地方实际上我是基于一些统计的值统计的结果值去拿到了一些规律,然后把这些规律用起来,这个意思对。嗯。下面这个地方就是我可以去做一些特征的组合呀啊,没有人说只能用单特征。
所以这个地方呢最简单的方式就是做一些组合。比如说用户的一个ID和我的商品的一个类别去做组合。所以只有当我现在是这个用户啊,而且这个用户又在看这个这个品类的商品的时候,这个字段才取一。
其他的情况这个字段都取0。比如说不是这个用户,哎,那这个字段取0。比如说是这个用户看的不是这个类别,这个字段就取0,能明白吧?就是新产出来一列,这一列呢只有当前面两个东西都取一的时候,他才会取一。😊。
当前面两个东西有一个取0,它就是取0。所以这个就叫做组合型特征。组合型特征。但这种组合型特征就是比较粗暴。有另外一种基于数模型的组合特征是这样的,它先用决策数啊,这个地方决策数可以是各种各样决策数啊。
比如说GBDT比如说随机森林,比如说啊决策数。DC进去去对我的数据跑一遍,跑完以后有什么好处呢?跑完以后,你不是得到了一棵树吗?😡,哎,这个数目就帮你产生了一些分支嘛。每个分支不就是一些条件的组合吗?
比如说性别为难的。这个啊性别为男生的这个这个这个呃省份在在上海okK啊,这样的话是通过。对,通过这个地方的这个这个联网方式是呃移动联网或者说联通啊,OK。然后这个地方有什么用呢?😡。
你的每一条分支都可以是一个特征,你不用走完整个分支,南and上海就是一个分支,对吧?就是就是一一些一小段路径,对吧?它就可以是一个特征,对吧?就是只有当现在是来的是一个男性,同时它是一个上海用户的话。
这一个列才取一。如果不是不满足这两任意一个条件,不满足,它就是零。所以这个有什么用呢?就是你刚才的这个组合完全是你在拍脑洞去组,完全是你在拍脑洞去组。现在这个数模型学出来的一些规律。
你可以用它学习出来的这些规律去组合出来一些组合特征。去组合出来一些组合特征。不一定要是一整条路径,就是这条路径当中的一小节儿,它也可以是一个组合特征。
所以你可以通过这样的方式去总结说哪些特征和哪些特征可以去做组合。呃,最后我们来讲一个部分叫做feature selection。通过前面的方式,你可以产出很多的特征啊,新手大家要慢慢的去感受一下呃。
我去年和另同事去参加一个开拓的比赛,我们从原始的二三十维的特征当中,最后产产出了接近000维的特征。😊,呃,用了各种办法产出了接近4000维的特征,而且我们不是一个一个特征去写的那那写到天荒地老。
就是有一些有有一些办法去写嘛,就批量的去产出一些特征。所以产出了很多特征。然后但是这个时候呢,4000多维的特征呢就会有个问题,就是维度好像有点高,就是跑着会有点慢。😊,这种这种建模过程。
所以这是因为这样的话,另外一方面你来想这里头一定会有很多的维度是。啊,会有很多的维度效果是不太好的。就是它和最后的结果之间是没有太大关系的。😊,所以怎么办呢?把它干掉。所以这个地方呢把它干掉。
就是涉及到这个板块叫做特征选择,叫做featuref。呃,我先要说我要说我说一下它的原因和需要注意的点。一方面是原因是因为它会消耗计算资源,维度很高的情况下,有一些特征的相关度非常高。我举个例子啊。
之前有一个比赛是做这个呃。其实有些比赛呢是做做这个。嗯。房房价预测了,然后里头会有两个字段,一个叫做房子的总面积,一个叫做房子一层的面积。因为你想一下呃,一般来说一层的面积越大,总面积应该也越大吧。
就有些房子它是两层的。所以这两个维度之间其实相关度非常高,但是你要传达来用呢,有点多余。这个意思。所以有些信息它比较相关度很高,它会溶余。有些信息呢就是这是会消耗我的计算资源。另外一方面。
有些特征对结果是有负影响,就是作用不大,甚至可能会有负影响。😊,所以我可能就不用它。然后第二部分我们说一下呃,特征选择和降维这两个部分的差异啊,特征选择和降维。呃。
特征选择是指的我剔除掉一些和结果关系不太大的力或者是特征。降维是指的我在低纬的空间当中保持住高维度的空间当中,所有的尽尽量去保存它有用的所有的信息。所以。这个地方大家要理解一下。
特征选择和降维是两回事儿。ok。呃,三种方式三种方式很简单。第一种方式叫做filter类型叫做过滤型。过滤型什么意思?我去评估每个特征和结果值之间的一个相关程度。怎么去评估这个东西呢?
大家想一想你某个特征的取值是不是这个数据当中的一列呀?结果值是不是也是一列呀?这两列之间的相关程度,我就算一下这两个向量之间的一个相关系数就好了。所以这个时候我们可以有各种方式。
我们可以去计算他们之间的相关度。比如说用一个皮尔森的相似度或者什么样的一个相关度。所以这个方法就是一个一个的特征去看它和标准和参考结果之间的一个相关程度有多高。选出来相关程度高的特征。这个特征啊。
不这个方法它会有缺点,它的缺点是没有考虑到特征之间的关联作用。因为如果你用一个逻辑回归这样的线性模型还好,因为确实是我是一个一个特征放进去的嘛,但有些特征它的作用单维度上来看,它作用不一定会有那么大。
但是它和其他特征去做组合的时候,它的作用会体现出来。😊,但是这种评估方法就是一个一个评估评估每个特征和结果值之间的相关程度。ok。😊,然后这个里头大家如果要用tthon包的话,对。
一般情况下用的是slect key best选出来最重要的K个select percentile选出来其中的百分比百分之多少最重要的特征。所以大家可以看一下这个地方我load了一些data。
eraase的 datata,然后它原本是140乘以150乘以4的,就是150行4列。那如果你初始化了一个slect k best告诉他说,我要取最重要的两个特征,你再对你的data去trans一下。
就是去啊做一个拟合变换一下,你会发现它就变成了150乘以2。150乘以2就两维。然后第二种处理方式叫做rapper,叫做包裹型。包裹型是把整个特征做特征选择看做一个特征子集搜索的过程。所以你想一想。
无非是从原来的特征当中选出来一批特征嘛,选出来一批我觉得很重要的特征,不重要的,我踢掉嘛。所以这里头最典型的方法叫做recursively feature elimination。递归的特征删除算法。
这个特征删删除算法怎么做呢?首先你需要去找到一个可以提供特征重要度的一个模型。比如说逻辑回归,比如说决策数,比如说随机森0。然后你怎么做呢?你用全量的特征去跑一个模型,然后根据我的特征重要度去删除掉。
比如说啊5%到10%的弱特征最不重要的特征,再去跑一遍模型,看一看现在的指标的一个变化。如果指标变化不太大,那说明我现在的删掉这部分特征重重要度不大,就可以把它踢掉。所以这个时候我就把它踢掉。
然后再去删掉5%到10%的弱特征。如果这个时候还没有变化,说明这部分5%的特征可能作用也不大再提掉。然后直到什么时候呢?直到你删掉了一部分尾部的现在最相对最不重要的特征,发现我去。准确率下降了。
这个识别的这个。准则标准最后的这个评估的这个结果变差了。不能删停了,所以这个方法很很粗暴,对吧?就是大家理解一下,其实很简单,就是把特征按照重要度排便序,从尾巴上开始砍砍掉多少,做次实验,砍掉多少。
再做一次实验。所以这个方法叫做RFE叫做非 recursory feature emination。然后这个地方在SK learn当中的包叫做RFE叫做RFE啊,就是RFE大家可以看一下。
这个地方就是用了一个RFE用逻辑回归去选出来啊,最重要的这个啊一个特征。这样啊。😊,呃,最后一种方式叫做embedddied。embody的方式呢是说呃我借助于模型的一些特性。
比如说embody通常借助的方式是线性模型,再加上。L一的正则化就加正则化。L一的正则化。正则化的话就是啊大家都知道是那个W的。一番数或者二番数嘛,那现在的L一正则化就是一范数嘛。
啊简单理解成绝对值也可以。OK啊,所以它取的就是一范数。然后如果你用逻辑回归,再加上这种正则化的方式,L一政则化的话,它会会有一个很有意思的特性。L一正则化有一个有一个效应。
在逻辑回归当中叫做稀疏化效应叫做截断效应,你产出的结果是一个稀疏化的一个结果。😊,我们之前在电商里头,最早的时候,我们特征维度可以拉到3到5亿维。对你没有没有听错,是3到5亿维,但是它是非常稀疏的。
非常非常稀疏的。因为其中比如说电商里头每个商品都会有很多的趋势,连口红都有那么多种不同的色号,对吧?然后连连衣裙都会有那么多种我看不懂的材质,然后各种各样的小的变化,小的款式。
各种各样的女生的衣服的品牌。所以所有这些东西,当你做完这些独热向量编码或者各种各样变换以后,它就升到很高的维度,所以这个时候的维度可能是3到5亿维。然后如果你们加一个L一的正则化的话,你完成模型的训练。
你发现最后只会剩下几千万的特征,其他特征权重全都会变成零,就是学不到权重。😊,权重都是零,这就是纯天然帮你完成了一个特征的选择。你线上实际去做预估的时候,只需要用我有权重的2到3000万的特征就可以了。
这个就叫做embeded的方式。通常情况下,它就是用L一加上逻辑回归,或者是加上line的SVM啊都可以。对,就大家可以在这个地方用线性的SVM也是行的啊,然后也是可以一样可以拿到。😊,嗯。这样的效果。
Yeah。不好意思啊。这个储模板特别好用。然后这个地方的L one based feature selection就是我刚才给大家说的LE阵则基于LE正则化的特征选择,那你可以去用一个哎。
你看这个地方就是一个线性的SVM,对吧?的 SVC啊s vector啊,class file分类器,然后你用了这个select from model,用了一个LE正则化,然后你可以去唉从四维降到三维。
😊,O。啊,好,我来给大家看一点案例嗯。好。给大家看。点案例啊,等我切换一下。哦,安利我好像没有传到我们群文件里,我要打包发给大家啊。然后所以大家。呃,看到这个地方的话,呃,我们会有两个案例,呃。
这样的有一个案例是我自己写的,所以呃这个地方呢是。所以这个地方呢是呃一个中文的案例。还有一个我觉得比较好的案例是一个英文的案例啊,其他的国外小哥哥写的他有很多的分析在里面。
所以我希望大家有时间去看一看这些分析。我会说一说这些分析是如何去做的。呃,但是这个里面对,还是有一些说明的,只不过是那个英文的嗯。啊,有同学在问问题,你们还有什你们有什么问题呢?比如说。嗯。
你们问到说嵌入型能再讲讲吗?嵌入型我你希望再听到什么样的信息呢?它实际上就是利用逻辑回归或者是线性的SVM再加上LE正则化。LE正则化它是有很特殊的效应的对,那我这个地方的推导我就不能跟你们讲了。
有一点点的复杂啊,就是它LE正则化纯天然的作用就是截段性效应。最后拿到结果就是一个稀疏解,稀疏解这时候,我会有很多的很多的特征是拿不到权重的,权重是零,权重是零。所以最后它会。😊,呃。对。
L一大会最后他会拿有很多的特征,拿到的权重是0。你们想一想,在逻辑回归当中,如果我做完了幅度缩放,是不是我权重的绝对值越大,它的重要度就越高啊。所以L一正则化和特征的重要度是没有关系的。
我仅仅是利用LE政则化去它的阶段性效应去做完训练之后,让很多的特征的权重变成0,它并没有影响特征的这个重要度的排序啊,或者其他的一些因素啊,就是最后你看到的结果就是你有4亿多维的稀疏特征送进去。
然后跑完模型以后,它现只剩下来了3000万左右,三四千0万,其他的那些特征都拿不到权重全是零。那特征权重是零,你就不用用它了呀。它不就相当于纯天然完成了一个降维吗?它没有主动的去做降维。
但是它这个特性就使得降维这个事情自然而然的就做完了,就是。有很多的特征,它是取不到这个重要度的,或者说它其实重要度就是零学出来的。这就是他在做的事情。然后这种这个方法通常是用在那种很稀疏很高维的数据上。
就是很稀疏的高维表达的数据。它对稠密型的数据效果是不好的。就是大家我这是我的一个经验啊。如果大家要用那种很稠密的数据,就是你的每一列都有值都有值,而且都是连续值,大家就不要用这个方法了。
你可以用第二个方法,用那个RFE叫recursoryfi,那个方法是可以的。OK所以我大概说了一下适用场景,大家可以呃结合自己的场景去用一下,好吧。对,然后主要在用到的是这三类方法。
可能有同学提到了还有一些其他的方法用的比较少。因为工业键我们要考虑时间的代价,因为我们我们的数据量很大,你不能说让我反复的去做实验,对吧?这个事情不合理。我们真的我们跑个模型都好几个小时的。
而且这已经是分布式的训练了,好几个小时的。你这要让我一直做实验这个很尴尬的对,所以呃一般情况下就是第二种和第三种两种特征选择的方式用的非常多啊,二和三用的很多。然后那个三的话,我刚才说了。
如果你是那种很高维的吸疏数据,一般用它还是还是不错的啊。二的话就是我会呃二都可以。二就是我会先建模,然后逐步的剔除掉不重要的特征。这样啊把从尾巴上开始砍。😊,呃,这个地方的案例呢是一个回归的一个案例。
叫做cago的 bicyclecycl的一个 exampleamp,一个cago的一个一个那个自行车租赁的比赛。所以这上面呢大概做的事情就和大家去骑摩拜呃,摩拜单车,然后OFO小蓝单车。
hello单车是差不多的啊。总之呢就是我会有这样的一些数据。然后这些数据呢需要大家去。😊,做一个这个呃做一个模式的学习,希望能够预估出来呃,这个骑其这种共享单车的数量有多少。然后它会给到一些数据。
所以这个地方呢我们用了pandadas这样的一个工具库,去把这份数据集读进来了啊。这个案例我会在课下打包完整的给到大家。所以这个ca的 bike competition chain。
这个就是一个CSV的文件,我用padas这个工具库,这个地方import pandas sPD啊,就padas这个工具库去把文件读进来。它就会把这个文件读成行行列列的形式。
所以这个文件就是一个这样的行行列列的形式,它每一行会是一条记录,每一列会是一个信息维度。所以第一列是一个日期精确到小时的日期,就几点钟的日期。比如说2011年的呃一点钟凌晨的一点。
2011年的凌晨的4点。第二列是季节,季节没有给明文,就是它不好给大家春夏秋冬这样的铭文,它给了一个编码嘛,反正啊其实也也可以和四季对应上对应上啊。
所以这个呢地方的一可能就表示春天二就可能表示 maybe是夏天或者怎么样O然后liday holiday就是一个零1值零就表示说这一天不是节假日啊,一就表示说是节假日。
然后working day就是是不是上班,这一天weather就是天气,天气呢也有几种不同的类型,它也没有给大家明文,它也是给了编码类别型的这种编码,所以weather可能是说啊大包雨。
可能是说那个晴天万里,晴空万里ok然后temperature temperatureemperature是指的那个呃temperature指的是这个温度嘛,对吧?啊。
还有A temperatureerature,这两个基本上是相关度非常高的。因为这俩一个是温度,一个可能是体感温度啊,然后湿度这个是湿度,这个是风速,然后最后会有三列,这一列呢是。😊。
说你拿那个就是caule就是没有去注册的,意思就是你拿微信或者支付宝扫开来的这个共享单车的数量啊,就是随意的拿了一个支付宝,或者是呃微信扫开来的数量reged指的就是我。
用这个app就是APP我下载了一个摩拜单车的APP我下载了一个hello单车或者什么单车的1个APP,然后去扫开的数量。最后这个count count是一个总数,就是我用支付宝或者微信扫开来。
再加上我用APP扫开来的总和啊,这个意思。所以我们有这么一些信息,我们希望通过前面的那些列去推断最后这个count的数量。
就是最后我到底这一天会有多少辆的未来会有多少辆的这个车去被呃这个小时会有多少车被租出去啊,这个地区所以啊我们用了pandaspadas这个工具库呢,可以先提供一些信息。比如说我发现它的数据是全的。
数据记录很全。😊,我把第一列转成了一个日期型的列,为什么?因为我待会要抽取日期的特征呢?我要抽取日期的特征。所以这个地方我先转成日期,再从日期当中选出来了年啊,小时星期几,我觉得这种影响重要度很很高。
因为你想这工作日和周末骑共享单车,肯定是分布肯定是不一样的。周末肯定是哪个时间点都会有人在骑。而工作日很显然是早高峰和晚高峰会比较。😊,比较多啊,当然这个不是我拍脑袋说的事情啊,我看了这个数据的分布。
大家也同样待会儿啊,你看到的后面这个cago的EDA啊,EDA就叫做explor explorationplordata analysis探索式的数据分析。那你就会看到这样的一些情形。😊。
然后你往下看这个地方是啊前十行数据,然后我要做一些特征工程。我已经做了特征工程,包括什么对日期型处理。发现了吧?对日期行处理。然后啊我我在前面还做了一些one hot encoD,比如说星期几。
当然这个地方你看你用什么样的模型啊,我这个地方用的树模型啊,用的random forest random forest regressor啊,然后就是如果大家用逻辑回归,大家用逻辑回归这样的分类方式。
你一定要对数据去做一个。😊,离散化哦,不one hot encoding或者是离散化这样的处理。如果大家用数模型,比如说决策数,比如说随机森林,你不需要去做这个事情。
所以下面的两个部分呢大概是一些那个呃调餐的一些工作。这个我们会在明天的课里头给大家讲到。大家可以先去看一眼这个地方主要的特征工程是这样的,把星期几取出来。对,把星期几取出来。
所以这个地方的day就是星期几小时就是第几个小时,然后月份就是几月份,然后这个地方。季节季节不,明天我会给大家讲,我会给大家补充一些其他的呃案例,不是也讲这个案例啊,就是我还会有其他案例补充。
但是这个里头有一部分明天的内容啊,我大概我说清楚了吧,就是这里头有一部分明天的内容,调餐的内容。😊,所以这个地方的season是星期几,是星啊,不sorry,抱歉啊,口误season是季节。
那我问大家一下啊,如果我现在用的是逻辑回归这样的模型,我的season,我这个地方的这个呃weather天气,我这个地方的月份啊,天和小时,我都要做什么处理呀?😊,我都要做什么处理呀。粗暴一点点。
我就做一个独热向量编码呗。如果不粗暴呢?如果不粗暴,前面这个没有办法,季节和天气,我觉得大家用毒热向量编码就可以。那那我这个时候如果要对月份对天1个1111个月当中的第几天或者呃。
不不是一个月当中第几天sorry,说错了,星期几月份星期几和小时有没有一些其他的处理办法呢?😊,no no no no,不是标准化。离散化呀。对对对对,很好很好很好,大家很棒。离散化。
因为想一想我我问大家一个问题啊,我刚才已经提示过大家了,我说上下班的高峰期和非上下班的高峰期数量是不一样的哦。所以大家请把这个地方的小事切一切。😊,你你用很粗暴的方式,你当然可以用one hot了。
一天无非就是24个小时。但是那种方式会把每个小时单独拎出来看。有时候我更关注是其中的一段儿。所以我可能需要把几点钟到几点钟这一段儿定出来。所以这个有时候用离散话或者是分桶分箱处理会更合适。
包括星期几也一样,我可能觉得星期一到星期五是一段呢,我可能觉得星期六星期天是一段呢。对。啊,这个地方不一定是不一定是就是这个地方大家可以去看一下什么样的切分方式会是比较合理的切分方式啊。有同学提出来说。
用等频对,这是一个解决办法。然后那个下面的调三的部分,我先不给大家说,这个呢会和明天有关系。所以我们来可以明天回头再再看一下啊,然后这个地方的cago的EDA model呢是另外一个。
我希望大家有时间去看一看的一个。😊,这个呃一个notebook。然后这个notebook呢我没有给大家做汉化。因为这个notebook本身就是国外的一个小哥哥写的,它里头包含了一些内容。
这个内容就包括说告诉大家这份数据集是什么样的一个数据集,其实就是刚才我们看到的呃共享单车的数据集,做一个数据的汇总特征工程缺失值的分析,异常值的分析。对,然后这个地方的关联分析,数据分布的可视化。
然后一些频次的可视化。呃,缺失值的填充。然后用线性模型去做线性回归去做拟合,然后加正则画像在用了不同的模型去做组合,所以会和明天的内容也有一些关系。我先带大家过一下这个地方的数据我就不多说了。
和我刚才那份数据一模一样,就是同一份数据,然后它这个地方解释了一下daytime啊、season啊holiday啊working day啊、天气啊等等。所以这个地方呢给了大家一些解释,然后数据。😊。
同样读进来一样的方式,cable bike competition的一个training data读进来。然后这个地方data summarym就是我去看一下有多少条样本,总共会有1万多条样本。
有12列,然后瞄一眼数据长什么样。我看一下每一列是什么样的类型。然后我来做一些特征工程。这个地方特征工程呢,他说了一下,他说我需要去构建一下新的列哟,哪些列啊,我要根据日期去构建小时。
根据日期去构建说星期几根据日期去构建说几月份然后我需要把这个地方的季节holiday和这个working days啊,变成类别型,你看to cat把它变成类别型的列,这样的话我可以去做后续的处理。
然后我把日期这一列干掉。因为日期这一列当我抽完信息之后,它就没有太大的作用了。所以这个地方就做了一些处理,大家可以看一下啊,一个一个的处理。这个处理是我构建新的一些列取出来日期里面的小时啊,星期几啊。
几月份呢季节呀天气啊,然后具体的操作,我就不给大家那个解释一些on个一行一行解释python的代码,这个大家搜一下就搜到都是的操作。对,就把d取。😊,出来以后,你可以直接去取它的那个。
你有不同的方式去做啊,这个地方它用的是apply,从里头去切,那你也可以把它转成today time转成日期型之后去取,它可以取到它的属性。然后把这个地方的小时啊,那个星期几啊,月份啊,季节啊。
全都变成类别型的S type就是把转成类别型转成字符串或者类别型,这样然后drop unnecessary columns把不要的列干掉。这个地方的day time就不要了,干掉它。
然后他去做了一些分析,比如说分析这里头不同类型的那个特征的数量有多少,分析一下这个地方的缺失值没有缺的,全满全是百分之百全满分析一下异常值,啊。
这个地方分析异常值用的方法叫做相线图叫box plot它是一个基于统计的方法。大家看到的这个箱子是一个连续值的字段做统计得到的结果。这个箱子中间那一条横线是它的50%的分位数。
比如说年龄有年龄这样一个字段,对吧?😊,那年龄这个字段的50%的分位数在它举实就是中间那一条横线,它的箱子的上下边缘,箱子的这个上面和下面啊。
边缘是75%和25%的分位数就是从小到大75%和25%的分位数。然后上面那个边界和下面这个边界是基于统计值,把这个箱子的高度往上挪了1。5倍,然后往下挪了啊一定的倍数。然后所以得到了上下界。
他认为在这两条界之外的都是异常值。当然了,这是一些统计的方法,它不一定那么好用,就是大家。啊,这画了一个图,带大家看一下,有些维度是会有异常值的。所以你可以基于它去去一些异常值。所以它去了一些异常值。
去异常值怎么做呢?对,统计的方法,他去把上下界取出来了,然后判定一定要在上下界之间的对,在上下界之间的啊,它其实是求了标准差,就是扫开共享单车的数量,它的这个分布的标准差。
用了这个标准差的3倍去作为一个边界。所以如果你现在的数量减去我的均值在我标准差的3倍以外,我就认为你是一个异常值。如果在三倍之内,我就认为是正常值。所以它用这样的方式去做了一个截断。
O然后底下是一些关联分析,分析不同维度和不同维度之间的相关性,颜色越深,表示它的相关程度呃,正相关程度越高,颜色越浅,表示它的负相关程度越高。所以这个地方会有很多的是啊。啊,sorry,说错了。
颜色越浅,说明它的相关程度越高,颜色越深,说明它的负相关程度越高啊。所以这个地方呢我发现所有对角线都是一,因为自己和自己的相关系数一定是一。那非对角线呢对非对角线会有一些维度相关度很高。
比如说大家看这个地方的reged和我的countt就是我通过APP扫码开扫扫码的这些车的数量和我这些共享单车数的总量显然是很相关的嘛。所以这个相关度达高达0。97。😊,对,所以这个就是一个相关分析。
底下这个地方是一个数据的一个分分布分析。所以他看了一下天气对于我扫开这个车的数量的影响,风速对于我的影响,湿度对于我的影响,你发现的一个情况是,随着温度变高一点点,风速变得稍微高一点点。
好像扫开车的人的数量会更多。然后随着温度变啊湿度。sorry湿度变得高了,就可能会下雨。下雨的话可能骑车人就少嘛,所以湿度越高,它的数量一般情况下是越少的。
然后是一些分布这个地方呢就是用的一个啊叫做KDE啊,这个叫叫做概遇密度。然后他把这个频次的分布啊,直方图给大家画出来了。所以呃可能做了一些变换,它这个地方取了一个log吧,做了一个变换。😊。
底下有一些其他的,呃,包括说哎我按照季节来看,我按照季节来看每个小时它的变化状况来,大家告诉我一件事情。上面这幅图我。不多说,我说中间下面这幅图中间这幅图中间这幅图你们看出来了什么?😡。
有4条曲线是那种有两个尖儿的,有两条曲线是一个。有一定弧度的。为什么星期一到星期五sorry不是4条曲线,5条曲线。为什么星期一到星期五会有两个尖儿?😡,为什么星期一到星期五会有两个两个高峰?
会有上下班的高峰期嘛,显然周末就平稳很多嘛,所以没错啊,就是数据分析是一个很大的支撑。就是你们看到这么多同学去玩那个数据科学的比赛,他们都要做数据分析的,就是不做数据分析,拍脑袋拍出来的特征。
效果都不好的。对,拍鸟袋拍出来的效果都不好的,一定要做数据分析。所以这个地方就是给到大家一些,你可以去读一读它的代码啊,常用的工具就和函数就这么些啊,在这个代码里头都有体现。
然后他在这个地方呢去点了一些缺失值的填充,他缺失值填充呢,没有填均值,也没有填这个中位数,他是填充是用的那个预估的方法去填充的。因为你想一下,如果你今天在淘宝上,你以为你不填你是小哥哥还是小姐姐。
你以为你不不填小哥哥还是小姐姐,我就不知道你是小哥哥还是小姐姐了吗?你天天在淘宝上看那么多的数,看那么多的东西,点那么多的东西,我会分析不出来,你是个男生还是女生。😊。
对吧所以我完全可以基于其他维度的信息去预估出来,你是一个男性或者是女性,或者说去预估出来这个地方的一些其他的信息。比如说打雷了,下雨要收衣服,对吧?
所以这个地方呢呃就是基于一些什么湿度啊或者风速啊或者什么东西,你可以去预估一下天气嘛,湿度很高的时候,温度肯定不会太高嘛,对,那讲就是大概这个意思啊,大家能明白,对吧?😊。
然后底下这个地方呢就是一些建模和它的一些对模型的融合啊,这个案例很好。然我没有去改动它里头的具体的内容啊,然后我希望大家有时间去读一读啊,基本上是这样的一个流程,还比较好。这个流程。
所以这两个案例我我一会儿下课就打包发给大家。对我下课就打包发给大家。这里头有一部分调参的内容我没讲,因为是明天的内容,我会继续给大家讲到,然后明天我还会有一些这个其他的资料可能会给到大家这个意思啊。
EDA是一个缩写叫做explation啊,data analysis。😊,就是。对啊,X。Plororation data。analysis啊,对,就是分探索式的数据分析。
因为一开始没有任何的人知道这份数据长什么样啊,这个意思O。啊,所以它是一个缩写啊,好的,今天的内容我就给大家讲到这儿,好不好?我把这些案例和数据打包一下,发给大家,你们去读一读明天课,我们接着聊模型。
今天我们聊了数据,明天我们接着聊模型,聊完以后就完整了。这个这两个案例你就都能看懂了。😊,OK好的,谢谢大家。你们有问题就在QQ群里头艾特我去大家交流一下。好。😊。