GBDT Meets LR
2022-11-17

 

GBDT+LR模型简介

简而言之,GBDT+LR是特征工程模型化的开端。

此时的GBDT,不是用来做预测,而是基于原始特征生成新的特征。

LR模型简单,能够处理海量的数据,但是依赖于人工做特征工程。

GBDT是由多颗回归树组成的树模型,后一棵树将前面树模型预测的结果与真实结果的残差为拟合目标。每棵树生成的过程是一颗标准的回归树生成过程,因此回归树中每个节点的分裂是一个自然的特征选择过程,而多层节点的结构则对特征进行了有效的自动组合,也就非常高效地解决了特征选择和特征组合的问题。

因此,使用GBDT对训练数据进行特征选择与特征组合,然后将其结果作为特征加入到训练数据,再使用LR模型进行预测。

GBDT生成特征过程

GBDT特征选择

假设GBDT由3颗决策树组成。对当前的特征数据x,经过决策树的映射:

决策树映射结点one-hot编码
第1颗树3[0,0,1,0]
第2颗树1[1,0,0,0]
第3颗树4[0,0,0,1]

将上述的one-hot编码进行合并,可得向量:[0,0,1,0,1,0,0,0,0,0,0,1],定义该向量为gbdt_feat。此过程也可以理解为使用GBDT模型对数据进行了Embedding。

将该向量与原始的特征数据进行合并,即可得到新的特征数据:x_new=concat(x,gbdt_feat)

接下来,将x_new作为特征数据,使用LR模型进行训练即可。

 

GBDT+LR模型训练过程

假设训练的原始数据为data,下面详细说明如何基于GBDT+LR进行模型训练。

GBDT生成特征

  1. data中的类别型数据进行one-hot编码,编码后的特征数据为data_gbdt
  2. 使用data_gbdt数据训练GBDT模型;
  3. 使用GBDT模型对data_gbdt数据进行预测,得到每个样本在各颗树中的index。如LightGBM模型,可以使用predict(pred_leaf =true);
  4. 将index进行one-hot编码处理,合并后,得到gbdt_feat特征向量,此向量即为GBDT模型输出的新的特征数据。

LR模型训练

  1. 构建新的训练数据:data_new=concat(data,gbdt_feat)
  2. data_new中的数值型数据进行归一化,得到归一化后的特征数据data_new_norm
  3. data_new_norm作为训练数据,使用LR模型进行训练、预测。

示例代码

Display Advertising Challenge

 

参考文档

  1. predicting-clicks-facebook.pdf (quinonero.net)
  2. 2.2.1 GBDT+LR (datawhalechina.github.io)
  3. zhongqiangwu960812/AI-RecommenderSystem: 该仓库尝试整理推荐系统领域的一些经典算法模型 (github.com)