梯度提升树之DBDT算法的介绍

主要内容:

1.梯度提升决策树(GBDT)原理

    1.1模型介绍

2.GBDT算法步骤

     2.1GBDT算法在分类问题上的操作步骤

     2.2GBDT算法在预测问题上的操作步骤

     2.3GBDT函数介绍

3.GBDT示例

4.GBDT特点及应用

5.GBDT算法的应用——信用卡是否违约的识别

1.梯度提升决策树(GBDT)原理

决策树分为回归树与分类树,分类树的结果不能进行加减运算,回归树的结果是数值,可以进行加减运算,比如身高和年龄等。分类树的损失函数一般用最大熵,回归树的损失函数一般永均方差。GBDT中的决策树是回归树。

 如何在不改变原有模型的结构的基础上提升模型的拟合能力?增加一个新的模型,拟合其残差。

 1.1模型介绍

梯度提升树算法实际上是提升算法的扩展版,在原始的提升算法中,如果损失函数为平方损失或指数损失,求解损失函数的最小值问题会非常简单,但如果损失函数为更一般的函数(如绝对值损失函数或Huber损失函数等),目标值的求解就会相对复杂很多。

梯度提升算法,是在第𝑚轮基础模型中,利用损失函数的负梯度值作为该轮基础模型损失值的近似,并利用这个近似值构建下一轮基础模型。利用损失函数的负梯度值近似残差的计算就是梯度提升算法在提升算法上的扩展,这样的扩展使得目标函数的求解更为方便。

2.GBDT算法步骤

 

 2.1GBDT算法在分类问题上的操作步骤

 

 2.2GBDT算法在预测问题上的操作步骤

 

 2.3GBDT函数介绍

 

 

3.GBDT示例

对于GBDT算法的具体实现,较为出色的是 XGBoost树提升系统  。下面是在 Python环境下使用 XGBoost模块进行回归的调用示例,首先用 pandas构造一个最简单的数据集df,其中x的值为[1,2,3,4],y的值为[10,20,30,40],并构建训练集矩阵T_ train_xbg。代码如下 
import pandas as pd
import xgboost as xgb
df = pd.DataFrame({'x':[1,2,3,4],'y':[10,20,30,40]})
X_train = df.drop('y',axis = 1)
Y_train = df['y']
T_train_xgb = xgb.DMatrix(X_train, Y_train)   #xgb.DMatrix()读取数据
params = {"objective":"reg:linear","booster":"gblinear"}  #设置参数
gbm = xgb.train(dtrain=T_train_xgb, params=params)   #训练模型
Y_pred = gbm.predict(xgb.DMatrix(pd.DataFrame({'x':[4, 5]})))  #预测结果
print(Y_pred)

 

 由于数据量小,预测有较大的误差。

 4.GBDT特点及应用

特点:

  • 超参数比较多,可用交叉验证的方法选择最佳参数;
  • 非线性变换比较多,表达能力强,不需要做复杂的特征工程和特征变换;
  • Boost是串行过程,难以并行化,计算复杂度高,不适合高维稀疏特征;
  • 样本中异常值较多时,可将平方损失用绝对损失或Huber损失代替’。

应用场景:

  • 线性/非线性回归
  • 推荐系统

 5.GBDT算法的应用——信用卡是否违约的识别

数据集下载(下载后需要把第一行删除!):https://archive.ics.uci.edu/ml/datasets/default+of+credit+card+clients

代码参考博客:https://www.cnblogs.com/tszr/p/10060935.html

 

通过与AdaBoost算法对比可知,

GBDT模型在测试数据集上的预测效果与AdaBoost算法基本一致,进而可以说明GBDT算法采用一阶导函数的值近似残差是合理的,并且这种近似功能也提升了AdaBoost算法求解目标函数时的便捷性。

 

posted @ 2019-10-31 20:17  不学无墅_NKer  阅读(1136)  评论(0编辑  收藏  举报