利用GBDT模型构造新特征

本文介绍了一种利用GBDT模型创建新特征的方法,该方法通过训练GBDT模型并利用其叶子结点信息生成新的二进制特征向量,进而提高机器学习模型的预测精度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实际问题中,可直接用于机器学习模型的特征往往并不多。能否从“混乱”的原始log中挖掘到有用的特征,将会决定机器学习模型效果的好坏。引用下面一句流行的话:

特征决定了所有算法效果的上限,而不同的算法只是离这个上限的距离不同而已。

本文中我将介绍Facebook最近发表的利用GBDT模型构造新特征的方法1

论文的思想很简单,就是先用已有特征训练GBDT模型,然后利用GBDT模型学习到的树来构造新特征,最后把这些新特征加入原有特征一起训练模型。构造的新特征向量是取值0/1的,向量的每个元素对应于GBDT模型中树的叶子结点。当一个样本点通过某棵树最终落在这棵树的一个叶子结点上,那么在新特征向量中这个叶子结点对应的元素值为1,而这棵树的其他叶子结点对应的元素值为0。新特征向量的长度等于GBDT模型里所有树包含的叶子结点数之和。

举例说明。下面的图中的两棵树是GBDT学习到的,第一棵树有3个叶子结点,而第二棵树有2个叶子节点。对于一个输入样本点x,如果它在第一棵树最后落在其中的第二个叶子结点,而在第二棵树里最后落在其中的第一个叶子结点。那么通过GBDT获得的新特征向量为[0, 1, 0, 1, 0],其中向量中的前三位对应第一棵树的3个叶子结点,后两位对应第二棵树的2个叶子结点。

Facebook GBDT

那么,GBDT中需要多少棵树能达到效果最好呢?具体数字显然是依赖于你的应用以及你拥有的数据量。一般数据量较少时,树太多会导致过拟合。在作者的应用中,大概500棵左右效果就基本不改进了。另外,作者在建GBDT时也会对每棵树的叶子结点数做约束——不多于12个叶子结点。

下面是这种方法在我们世纪佳缘的一个概率预测问题上的实际效果。我们只使用了30棵树。第一个图是只使用原始特征的结果,第二个图是原始特征加GBDT新特征的结果。图中横坐标表示预测概率值,纵坐标表示真实概率值。所以预测的点越靠近 y=x

这条参考线越好。显然,使用了GBDT构造的新特征后,模型的预测效果好不少。

仅使用原始特征原始特征加GBDT新特征

对了,已经有人利用这种方法赢得了Kaggle一个CTR预估比赛的冠军,代码可见https://github.com/guestwalk/kaggle-2014-criteo,里面有这种方法的具体实现。

References

  1. Xinran He et al. Practical Lessons from Predicting Clicks on Ads at Facebook, 2014. 

梯度提升树(Gradient Boosting Decision Tree, GBDT)是一种强大的集成学习方法,广泛应用于分类和回归任务中。它通过迭代地构建一系列决策树,并将每棵树的预测结果加权组合起来以优化目标函数。以下是基于已有代码如何使用GBDT构造分类模型的一个通用步骤说明: ### 修改流程 #### 步骤1: 确保环境已安装必要的库 如果你尚未导入相关的机器学习库,则需要先引入`sklearn`等支持GBDT建模的相关工具包。 ```python import numpy as np import pandas as pd from sklearn.model_selection import train_test_split from sklearn.ensemble import GradientBoostingClassifier from sklearn.metrics import accuracy_score ``` #### 步骤2: 数据预处理 确保数据集已经被清理、归一化以及划分训练测试集合完成。 假设你的原始特征矩阵存储于变量 `X` 中,而标签向量保存在 `y` 中,你可以按比例拆分数据如下面示例所示: ```python # 划分训练集与验证集 (例如80%的数据用于训练) X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42) ``` #### 步骤3: 构造GBDT分类器 接下来实例化一个GBDT分类模型,并设置一些超参(比如最大深度max_depth)来控制过拟合情况: ```python gbdt_clf = GradientBoostingClassifier( n_estimators=100, learning_rate=0.1, max_depth=3, subsample=0.8, random_state=42 ) # 拟合模型到训练数据上 gbdt_clf.fit(X_train, y_train) ``` #### 步骤4: 验证及评估性能 利用验证集检查当前模型的表现准确率或其他指标是否满意: ```python predictions = gbdt_clf.predict(X_val) accuracy = accuracy_score(y_val, predictions) print(f"Validation Accuracy: {accuracy * 100:.2f}%") ``` 如果对初步的结果不满意可以尝试调整上述提到的学习速率learning_rate或是树的最大深度参数值再重新训练一遍新的模型直至达到期望效果为止! --- **注意**: 实际应用过程中还需考虑更多细节部分包括但不限于特征选择工程方面的工作;此外针对特定场景下的最佳实践也可能会有所差异,请依据自身业务需求合理设计解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值