在分类任务中,除了逻辑回归、SVM、决策树等简单模型外,还有例如随机森林之类的集成模型,GBDT就是其中一类代表的梯度提升模型。
1.梯度提升(Gradient Boosting)的概念
在求解函数最值问题中,变量的最优解是在参数空间内搜索,梯度下降法是基本的数值方法之一,以最小值为例说明基本步骤:
1.初始化
2.for i in range[0:N]:
- 求解梯度
- 更新
则最终解为
如果将变量扩展到函数空间,考虑给定数据集,建立对的回归模型,需要优化损失函数。即求解损失函数的最优解,即
。求解的步骤与梯度下降法一致,基本步骤仍为:
1.初始化:
2.for i in range[0:N]:
- 求解梯度
- 更新
则最终解为
如果将上述介绍的模型定义为CART模型,即可得到Gradient Boosting Decision Tree(GBDT)。当然基模型也可以使用其他分类器或者回归器。
GBDT的特点是:
- 基于简单决策树的组合模型
- 沿着梯度下降的方向进行提升
- 只接受数值型的连续变变量
- 其优点是:准确度高,不易过拟合
2.GBDT 模型简介
2.1原理(以分类树为例)
结构
用若干个分类树结果加和的方式来逼近,是二分类标签,是分类树的个数。
损失函数
- 第步累计函数的损失=累计k棵树的精度损失+累计k棵树的复杂度惩罚
- 待求变量:第棵树
- 目的:让累计的损失最小化
以负二项对数损失函数为例介绍损失函数:
关于相加性: - 预测的类别不能相加
- 概率不能相加
-
对数几率是可以相加的
求解步骤:
1.初始化模型
初始化模型一般为常数,与样本分布无关,例如:
2.计算损失函数的负梯度(最小化损失函数):
3.构建回归树,并计算回归树的每个叶子结点的取值:
其近似解为:
4.然后更新得到的模型为:
5.迭代下去可以得到
注意:
- 模型不是分类树,的结果不是类别,需要尽心概率转化:
- 模型不是分类树,是损失函数对的负梯度
- 选择的损失函数不同,得到的梯度也略有不同
3.GBDT的升级版:XGBoost
3.1原理
GBDT模型是将损失函数进行线性逼近,本质是对损失函数做一阶泰勒展开:
如果用多项式代替线性,将泰勒展开到二阶,就得到精度更高的下降法:
,
其中
由于为常数,所以对损失函数的最小化,等价于对的最小化。
是模型在预测精度上的为残差,代表模型的复杂度,在XGBoost中模型的复杂度一般表示为,代表叶子结点个数,为叶子结点的取值,避免过拟合。
综上,加入第棵树后的损失函数的表达式(忽略常数项)可以近似为:
为了让最小化,的取值是
此时,
3.2确定树结构
假设树的结构已经确定,则为树的得分,我们的任务是得到得分最小的树。理想情况下,可以枚举所有的可能挑选得分最小的结构,当样本或变量较多时,枚举法几乎不可能。,因此采用近似算法:
1.贪婪法:生长一棵树,寻找最优特征以及最优分裂点形成子树,当数据量较大时,速度较慢
贪婪法2
2.近似法:在贪婪法中用分位点代替每种可能的取值,降低了精度但速度快
近似法
3.3其他优化
优化3.4 特征重要性
特征重要性主要步骤
4.XGBoost模型在信贷风控中的应用
在构造XGBoost模型用于违约预测时,依然需要对数据做预处理工作和特征工程。需要注意的是:
- 极端值的处理不是必须的,因为在构建每棵树时,CART模型对于极端值不敏感;
- XGBoost模型可以处理缺失值,即对缺失值单独分枝,但python包中响应的模块不能读取缺失数据,因而需要处理缺失值;另外,若缺失值占比很少,不需要单独分枝,要对缺失值尽心处理。
网友评论