GBDT
目前工业界应用最多的回归树算法是XGBoost,XGBoost算法基于GBDT算法。
传统回归树
下图通过购物金额和上网时长预测用户年龄,传统回归树通过单棵复杂回归树拟合数据。
GBDT回归树
GBDT回归树是一个森林,由多棵回归树共同构成预测结果。
回归树不同于决策树,回归树的结果是可以相加的。
例如购物金额<1k得到用户年龄15,经常提问得到年龄分数-1。因此购物金额<1k且经常提问的用户年龄预测值为14。
XGBoost
XGBoost是一个工业框架,同时也是一个算法框架。
XGBoost通过多棵回归树拟合数据,每棵回归树拟合当前残差。
回归树拟合问题实质上也可以看做损失函数最优化问题。
GBDT可以视为XGBoost的一个特例,即损失函数为平方误差(MSE)。Ω函数代表正则化,防止过拟合。
XGBoost通过迭代优化下面的目标函数实现数据拟合,KaTeX parse error: Expected 'EOF', got '' at position 31: …1}+f_{t}(x_{i})̲代表前t-1棵回归树之和加上第t棵回归树预测值,XGBoost的目标是使得回归树总和接近目标值y。(i代表第i个样本)
对目标函数使用泰勒展开
得到目标函数
在第t棵树时已经是一个固定值,因此可以忽略,上述表达式可以继续化简。
为什么GBDT是XGboost的特例?
XGBoost公式
GBDT损失函数
对损失函数求一阶偏导数,可以发现这就是GBDT算法中所要拟合的残差。
对照XGBoost公式可以发现,GBDT实质上就是去掉了正则化和二阶导数的XGBoost。
正则化
XGBoost正则化包含T——叶子节点个数,W——叶子节点分数。
将正则化表达式带入XGBoost公式可以化简得到下面的式子。
其中,G代表一阶导数,H代表二阶导数,可以根据训练数据得到。
训练目标是最优化Obj函数,因此对W求偏导数==0,此时可以得到Obj函数的极值。
将w代入表达式可以得到下面的化简后的目标函数表达式
分裂节点
XGBoost回归树分裂基于信息增益进行分裂。
子树分数来源于目标函数,目标函数优化目标是最小化,取反后优化目标为最大化,因此分裂的原则是分裂之后信息增益最大。
理论上,为了获得最大的分裂增益,需要尝试所有的分裂组合,即将一个类分为两个类所有可能的组合,但是会造成组合爆炸的问题。因此在实际应用中,通常采用近似算法或贪心算法。
XGBoost实际应用
基于一份癌症预测数据集使用XGBoost算法进行训练,XGBoost算法可以得到非常好的效果。
XGBoost相比于其他算法拥有非常好的解释性,为了拟合癌症数据集,选择了395棵回归树进行拟合,下图为其中一棵回归树的决策图。
共同学习,写下你的评论
评论加载中...
作者其他优质文章