泛统计理论初探——再谈梯度提升树之优化方法

数据挖掘-再谈GBDT算法

再谈梯度提升树
   在上一篇文章中,我们简要介绍了GBDT的思路和基本的实现步骤,本次文章主要是介绍如何各个细节去优化梯度提升树GBDT的模型准确率和稳健性,以及防止GBDT模型过拟合的技巧。我们将从下面三个大方向去介绍如何优化GBDT模型,分别是损失函数的选择技巧、超参数的优化方法、正则化选项的加强,从而使得模型的准确率史高、泛化性更好、稳健性更强。
   在选择损失函数的时候,以梯度提升回归树为例,常见的损失函数就是欧式距离的平方损失函数和绝对距离的绝对值损失函数,如果实际问题中的数据比较少并且没有太明显的异常值的话,那使用上述两个损失函数任过即可。但是当数据中存在一些异常值的时候,使用平方损失函数就会让异常值显著的影响模型,所以使用Huber损失函数,它是绝对值损失函数和平方损失函数的结合,以一个分位点作为临界值,低于临界值就使用平方损失函数、高于临界值就使用绝对值损失函数。
在这里插入图片描述
   当训练模型的时候,上述损失函数的选择需要先查看数据的分布,而对于超参数的设置,需要反复地训练模型并观察预测结果来进行确定。下面我们介绍GBDT里常见的超参数优化。
   1、树的最大深度,当数据非常多的时候,需要使用设置这个参数,防止过度学习造成的模型过拟合,设置最大深度可以帮助模型增强稳健性和泛化性。一般该参数可以设置5到200,具体设置看具体问题。
   2、最大特征数量,当特征非常多的时候,也可以设置这个参数当作降维,因为如果维度有好几百甚至上千的时候,不设置该参数会导致训练极其缓慢,而该参数决定了在划分的时候考虑的变量多少,一般该参数可以设置为总的特征数的开平方根,这样可以有效降低训练的时间。
   3、最大叶子节点数目,当特征数量较多的时候,通过限制这个参数可以有效地防止模型过拟合。当然如果特征本身就不多的话不需要设置这个参数,如果需要设置这个参数可以通过K折交叉验证等方式确定。
   在介绍了超参数的设置技巧和损失函数选择后,我们来介绍正则化的技巧,正则化也是为了防止GBDT过拟合并且增强模型的预测泛化性。正则化技巧主要是下面三种:
   1)进行树的剪枝,也就是上述的对CART树进行预剪枝或者后剪枝,其中预剪枝是事先设定一个熵变化的阈值,如果信息熵变化的值小于这个阈值,那么不可以继续创建树的分支;而对于后剪枝来说,也是事先设置熵变化的阈值,就是在CART树生成完毕后对每个子树进行合并尝试,如果小于这个变化的阈值则可以进行合并,合并以后的叶子节点类别用“大多数原则”确定。
   2)步长和迭代次数的限制,通过在每棵CART树的输出结果上去乘以步长n,n的取值范围是0到1之间,一般来说如果n较小比如接近0,可以认为需要多轮次的迭代;而n较大则是正则化的约束迭代次数,用来惩罚训练的次数。
   3)控制子采样比例,显然这个比例也是一个参数,范围控制在0到1之间。之前文章里谈到的随机森林里其实也要子采样方法,但是那里是有放回的子采样,GBDT的子采样是没有放回的子采样方法。该值可以设置为0.6到0.8之间,因为设置的太小或者太大都是不合适的,因为虽然这个比例参数可以防止过拟合,但是会增加拟合的误差。
   对于GBDT模型来说,显然它比一般的单棵CART回归树的预测要准确,相对来说GBDT因为是Boosting方法里,效果比较好的一种方法,它可以处理各种类型的数据,并且使用起来不麻烦。同时该模型的稳健性较好,当损失函数使用分位数损失函数或者Huber损失函数的时候,会降低对于异常值的敏感度。并且GBDT模型是不需要像神经网络一样事先对数据进行归一化或者标准化处理的,它的模型可解释性和随机森林等树类型的模型都是比较好的,比较直观的。
   但是梯度提升树的缺点就是很难并行处理问题,在大数据量和高维度特征的一些问题下,使用该方法会导致训练耗时比较久,并且当遇到标签种类较多但是标签数据较少的稀疏数据问题是比较难以处理的,在这方面GBDT是不如神经网络的。并且GBDT是学习样本的知识和模式的,如果在训练集有标签没有出现过的话,是比较难以在测试集里预测出来的。
   总的来说,GBDT模型是比较经典的模型,它和随机森林一样都是比较好的集成学习模型,在目前深度学习的时代下,GBDT模型常用来特征的选择或者在神经网络之前做一层预训练的输出,因为它自身模型的特点可以用来被作为特征组合和选择的,所以使用者要合理的运用GBDT模型。

猜你喜欢

转载自blog.csdn.net/qq_26727101/article/details/108159948
今日推荐