机器学习40讲_28_27_万能模型梯度提升与随机森林
你好,我是王天一。
今天我和你分享的主题是万能模型,梯度提升欲随机森林。
在上一讲中,我和你分享了提升法和装待法。
这两种典型的集成方法,他们都可以用在决策树模型上,对多棵不同的树进行组合。
然而直接使用这两种集成方法呢只是初级的策略,将他们的强化板用在决策,树上可以得到更加强大的万能模型,也就是梯度提升决策数和随机。
森林。
梯度提升的思想来源于对提升方法的推广,显示的提升方法呢本身可以解释为对一个合适的损失函数的优化。
如果说将这里的损失函数的选择扩展为任意的可微函数,并且将提升方法和自优化当中的梯度下降结合起来,得到的就是梯度提升。
梯度提升呢它是把提升方法视为函数式的迭代的梯度下降算法通过迭代的选择指向负梯度方向的函数,也就是弱学习器来优化函数空间上的代价函数。
在这个ADAB oos当中,每个弱学习器的短板呢是通过权重的加强来得以凸显,而在梯度提升中凸显的方式被替换成了梯度。
要理解梯度提升方法的妙处呢,还是要先从回归问题说起。
在解决回归问题的时候,模型的输出FX和真实值y之间的差值啊,把它定义成HX,等于y减去FX.这个值呢被称为残差。
它表示了数据当中模型所不能刻画的那些部分,要使用传统的单一模型的话,它对于残渣是无能为力的。
但是集成方法的引入,给处理残渣提供了新的思路,那就是用新的机学机器去拟合这个残差作为对上一个模型的求证。
如果这个残差能被精确拟合的话,那相当于我得到的结果也是精确的结果。
只要将拟合真实值y和拟合残差h的模型给它集成起来,就可以得到更加精确的拟合结果。
这个过程呢类似于日常生活当中的这个猜数字的游戏要猜测未知的数字呢,我要先选择一个初始值,那先随便选一个来猜你告诉我大了啊,或者小了之后,我再根据这个猜测值和真实值之间的这个大小关系啊来进行调整。
随着一轮一轮猜测的不断进行啊,那么猜测的结果呢就会越来越接近于真实的这个位置。
数字这个逼近真实值的过程,它实际上就是不断的来对残渣进行拟合的过程,思考一下回归问题当中的梯度下降。
那你就会发现,它和残渣的拟合实际上是等效的。
如果说以均方误差函数y减去FX的平方除以二作为损失函数的话,那么对x计算出来的梯度,它就等于FX减去y回顾一下前面定义的残差,你会发现残渣和负梯度两者其实是完全一致的对残渣的拟合呢,实际上也就是对这个模型负梯度的拟合。
而根据残渣来更新集成之后的模型,实际上呢也就是相当于根据负梯度来进行更新。
这样一来呢梯度提升方法就变成了广义上的梯度的下降。
这里呢我们不妨对原始的梯度下降和今天说的这个梯度提升,两者做个比较梯度下降,算法当中的负梯度和梯度提升方法当中的残差。
虽说在数学上是等价的,但是呢意义不一样。
负梯度呢指向的是单个模型参数更新的方向啊,我所有的这些操作都是在一个模型里进行。
那么残差呢则表示了集成模型当中下一个计学器拟合的目标梯度的不断下降,它能够让模型的参数逐渐的收敛到最优参数上。
而残渣的不断拟合呢,则让集成之后的模型越来越接近于真实的数据的生成机制。
从这种等价关系出发,以梯度的角度来构造提升方法,会带来更多的便利。
其中最重要的一点是什么呢?损失函数的重新定义梯度提升方法本身是建立在负梯度和残差之间等价关系的基础上。
可是一旦有了这种等价关系呢,我们反过来又可以放弃狭义的这个残差。
从广义的损失函数负梯度这个角度去构造提升方法。
这样的过程呢其实也就是从特殊到一般啊,再从一般到特殊的这个认识的思路。
之所以要引入其他的损失函数呢,是因为均方误差,它存在这些固有的缺陷,首当其冲的就是没法用于分类问题。
即使是在回归问题当中,均方误差对于异常点的敏感性也会影响到它的使用离群的异常点呢,会给军方误差带来显著的增加。
啊,因为我们前面介绍过异常点呢,可能源于这个生成机制的不一致,所以呢会给军方误差带来比较大的增加。
而基于军方误差的回归算法呢,它在拟合的时候啊,他不知道这个异常点是来自于另一个分布啊,或者叫非我族类。
他总会想方设法的把这个异常点纳入到正常的数据生成机制之内,这无疑呢会降低模型的拟合能力。
那我迁就这一个异常点,然后把正常点都给影响到。
相比之下的话啊,负梯度呢它通过引入这个交叉熵,既可以解决分类问题啊,也可以回避掉异常点的影响,从而呢有利于模型的扩展啊,当然呢使用其他形式的这个损失函数也是可以的。
以决策树作为机械机器,使用这个梯度提升方法进行集成,得到的就是梯度提升的决策树缩写叫GBDT.在每一个轮次的提升过程当中呢,GBDT都会使用决策树来拟合,计算出这个负梯度,也就是参差。
所以整个模型呢也就是一大堆决策树的这个组合。
那么在解决分类问题的时候,GBDT当中的这个负梯度啊,可以表示成样本归属于每个类别的真实概率和上一轮预测概率的这个差值。
那么这个差值呢作为残差出现啊,被回归数去拟合拟合出来的值,和上一轮预测概率求和得到的就是这一轮的输出。
啊,那么这样一轮一轮不断的迭代下去啊,这就是GBDT. Gpdt呢它是利用提升方法生成的这个全能模型。
全能模型在装袋方法上的对应是什么呢?是随机森林。
随机森林它是由若干个随机数模型所组成,每一个单独的随机数呢都采用自助采样作为数据重采样的手段,同时呢只会选择少量的特征,用于生成这个数结构。
这样生成的随机数呢也无需进行前减值或者是后减枝的这个操作。
这个模型实际上是两种随机化的方法属性随机化,还有数据随机化的组合。
这两种随机化方法就像是倚天剑,还有屠龙刀。
那么刀剑互啄之后,才生出了随机森林这样一部旷世的秘籍属性,随机化的思想也叫随机子空间方法啊,是由香港学者holding camp啊。
首先提出的属性。
最佳的好处在哪呢?在于说让每个单独的机学习器不会过分关注在训练集当中具有高度预测性或者描述性的特征。
这样的特征呢,虽然说在训练数据当中举足轻重,那我选出这个特征就能够把数据给它区分开。
但是呢对数据的解释却限制在了狭窄的范围之内,未必能够对测试数据进行精确的预测。
随机抽出的不同属性呢,它会构成不同的随机子空间。
那么我在不同的随机子空间之内去训练不同的单个决策数的话,其实呢这就是集成学习当中非常重要的这个多样性的体现。
归根结底,属性随机化的作用还是在于说机器学习当中老生常谈的那个问题,就是提升万化性能,抑制过拟合。
对于每一个单独的决策树来说,如果在训练集上能够达到百分之百的正确率,那它所生成的分类边界就适用于所有在所选择的这个属性之上和训练数据,具有相同取值的新数据。
那么即使这些新数据在没有用于这棵啊随机数分类的属性上有不同的取值啊,也没有关系。
假设说这棵树我只用到了属性一啊,那么在新数据来的时候,我只看它的属性一的取值啊,属性二十三四五六七八一个概都不管。
这样一来呢,森林里的每一棵树就在不同的随机子空间啊,也就是在不同的角度上进行了泛化,从而呢给模型整体的泛化带来了更多的可能性。
相比之下呢,传统的减脂策略啊,无论是预减脂还是后减脂,都是针对将所有属性视为一个整体的决策树来进行这个政策化。
这个效果呢就来的不如随机子宫间。
好,所以说这个后庭cam在随机子空间的基础上,进一步提出了随机森林的方法啊以及这个名称。
但他的工作呢侧重点在于说生成随机化的分类,判别式从头到尾都没有涉及对于数据的这个自助的重采样,而正是这个重采样,恰恰被视为随机森林的核心。
数据的随机化是由从统计学半路出家的。
莱奥布雷曼啊,我们在之前呢文章中也提过这位老先生所提出的,它在此基础上呢,进一步发展出了我们今天所熟知的这个随机森林的模型。
数据随机化。
它最主要的作用在于说去除各个独立模型之间的相关性。
这个呢和装袋方法它的思想是一脉相承。
单个决策树他会对自己的训练集中,潜在的噪声高度敏感。
但是呢只要不同的树之间具有良好的独立性,这种敏感特性呢就不会扩散到整个的森林当中。
除此之外,数据随机化的作用还体现在包外样本之上。
对于装载法这种有放回的采样来说,大概会有三分之一的数据在训练过程当中从头到尾都不会被抽到。
那这部分未利用的数据呢,就是所谓的包外样本。
报案样本呢它实际上可以起到验证级的作用,可以证明在报案样本上我计算出来的错误率,那它就是真实错误率的一个无偏的估计。
这呢就给算法的评估提供了一个比较靠谱的参考。
通过这个验证集上的错误率啊,你能近似的估计这个真实的错误率。
自助采样还可以用来判定这个不同属性的重要程度以及检测数据集当中异常点。
当然这其中的细节呢,今天就不做介绍。
随机森林,它是一种比较复杂的模型,从不同的角度去观察的话,可以和不同的模型建立起来联系。
由于单个样本可以出现在森林里不同的决策树当中,在不同的决策树之上又会归属于不同的这个叶子节点。
所有和这个样本归属于同一个叶子节点的这个其他的样本啊,都会对它产生影响。
那么这样看来呢,随机森林它实际上就是局部化的近邻模型的一个拓展。
但是它和传统的这个k近零不同不同,近邻点的权重呢并不相等。
这权重到底等于多少呢?取决于每一棵树的结构,还有训练数据的结构。
当然,如果将这一思路再延伸一步呢,还可以建立起来随机森林,还有另一种局部模型。
那核方法两者之间的联系除了局部化之外呢,随机森林也可以看成是对数据进行分布式建模的一个场。
每一个样本本身是定义在高位空间之上,但属性随机化呢它起到了降维的作用啊,我每次只挑选出一部分属性啊,那么这不就是特征选择的一个降维吗?将样本映射到随机空间当中啊,再在不同的低维空间之上,从不同属性出发来定义出来同一个样本。
这呢和深度学习的想法不谋而合。
你可以回忆一下我们在介绍深度学习的时候,那个分布式表示的这个性质。
只不过随机森林呢它并不具备深度学习的这个层次化的结构不是串行的,是并行的,而是直接将分布式的表征赋予同等地位进行一个扁平化的组合。
这呢虽然可以简化运算啊,但也限制了它表达能力的一个提升。
再一次可以n当啊,这两种万能模型都定义在我们zsemble模块当中,分别是guildient、 boosting、 classifier,还有random、 forest、 classifier.将这两种模型应用在前面使用的这个线性不可分的数据集上可以得到不同的,但是都是正确的分类边界。
但是呢这个轻量级的实力啊,只是用来对模型产生一个直观的认识,将他们俩应用在这样简单的数据集上呢,有点杀鸡,用牛刀的意思,点击文稿,你可以看到两种模型的这个分类结果。
最后让我们来看一看集成学习当中的一个理论问题啊,就是误差和分歧的分解。
在集成方法当中,假定最终的输出结果,FX是每个基学习器单独输出的这个线性的组合,这里的线性系数呢全部大于零啊,而且和等于一。
那么每个基学习器的分歧就可以表示为AIX,等于FX减去FIX再求一个平方。
这里的这个FIX就是每个基学习器单独的输出。
集成模型的分歧呢是所有机学习器分歧的线性组合,它可以看成是所有独立的输出,对这个加权平均的结果,求出来的加权的方差。
如果说直接拿每个机械机器的结果和真实的输出YX做比较的话,就可以得到集成模型分歧和均方误差之间的关系。
那么点击文稿,你可以看到这个推导过程,将每个机械机器单独的分歧和误差啊,以及集成模型整理的误差,三者在数据的概率分布上做积分,那就可以得到它们在整个数据集上的数学期望。
有了这个期望之后啊,我再以原始的加权系数,对上面的数学期望进行线性组合,又可以得到模型误差的集成,还有分歧的集成。
那么集成模型的泛化误差就是这两者之差,也就是误差的集成和分歧的集成之差。
这样的一个式子呢就是泛化误差的这个误差和分歧分解。
他解释了集成学习当中强调多样性的原因。
表达式的第一项是继续机器关于真实结果的债权平衡误差。
第二项呢则是继续机器关于集成结果的价权平方误差,各个机器机器之间它们的相关性越小,那它们和集成结果之间的差别就越大。
计算出来的分歧呢也就越大,通过增加个体的方差来减小集体的方差啊,这就是集成学习的奇妙之处。
误差分级分解表明呢极正学习成功的关键在于每个基学习器的和而不同和呢指的是每个机械机器都要有良好的性能。
不同呢指的是机学机器的原理之间应该存在着差别。
但在实际当中啊,你要找到这个理想的配置的话啊,除了这个大量尝试的话,好像也没有其他的办法。
今天我和你分享了梯度提升决策树,还有随机森林这样两种万能模型,包括以下四个要点。
第一,梯度提升决策树和随机森林,都是在各类问题上表现优异的通用模型。
第二,梯度提升决策树是提升方法的推广,利用上一轮次的梯度信息来构造决策树。
第三,随机森林是装袋方法的推广,利用属性随机化和数据随机化构造决策书。
第四,误差分级分解解释了集成学习强调机学习器多样性的原因。
在介绍线性回归的时候,我曾提到,随机森林虽然可以取得较高的精度,但是在可解释性上却不能让人满意。
这意味着模型不能给出关于数据的一般性规律,那它的价值呢也就会大打折扣。
那么,你是如何看待魔镜性能和可解释性之间的矛盾的呢?欢迎分享你的观点。