GBDT+LR——特征工程模型化

GBDT+LR模型结合了梯度提升决策树的特征提取能力和逻辑回归的分类能力,通过自动化特征工程提升预测性能。文章介绍了GBDT的数学原理和Python实现,以及如何构建GBDT+LR模型,包括模型训练和预测过程。该模型在推荐系统、点击率预估等领域有广泛应用。

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

GBDT+LR——特征工程模型化

概述

在机器学习中,特征工程是一个至关重要的环节,它直接影响到模型的性能。然而,传统的特征工程往往依赖于人工经验和领域知识,这在一定程度上限制了模型性能的提升。为了解决这个问题,研究者提出了一种将特征工程模型化的方法——GBDT+LR模型。该模型通过集成学习中的梯度提升决策树(Gradient Boosting Decision Tree,GBDT)自动提取特征,并将提取的特征输入到逻辑回归(Logistic Regression,LR)模型中进行分类预测。

[关键词:GBDT+LR、特征工程、模型化、梯度提升决策树、逻辑回归、Python实现]

目录

GBDT模型

GBDT原理

梯度提升决策树(GBDT)是一种集成学习模型,它通过迭代训练多棵决策树,并将这些决策树的预测结果相加,从而得到最终的预测结果。GBDT的核心思想是利用梯度提升算法优化损失函数,每一轮迭代都训练一棵决策树来拟合负梯度(损失函数的负导数),并将其加入到模型中。

GBDT模型的数学表达式为:

F m ( x ) = F m − 1 ( x ) + γ m h m ( x ) F_m(x) = F_{m-1}(x) + \gamma_m h_m(x) Fm(x)=Fm1(x)+γmhm(x)

其中,(F_m(x))表示第(m)轮迭代的模型,(F_{m-1}(x))表示第(m-1)轮迭代的模型,(\gamma_m)是第(m)轮迭代的学习率,(h_m(x))是第(m)轮迭代训练的决策树。

数学推导

GBDT模型的损失函数通常采用平方损失函数,其数学表达式为:

L ( y , F m ( x ) ) = 1 2 ( y − F m ( x ) ) 2 L(y, F_m(x)) = \frac{1}{2}(y - F_m(x))^2 L(y,Fm(x))=21(yFm(x))2

其中,(y)表示真实标签,(F_m(x))表示第(m)轮迭代的模型预测值。

为了优化损失函数,我们采用梯度提升算法进行迭代更新。对于样本(i),损失函数关于模型预测值的负梯度为:

r m i = − ∂ L ( y i , F m − 1 ( x i ) ) ∂ F m − 1 ( x i ) r_{mi} = -\frac{\partial L(y_i, F_{m-1}(x_i))}{\partial F_{m-1}(x_i)} rmi=Fm1(xi)L(yi,Fm1(xi))

其中,(r_{mi})表示第(m)轮迭代第(i)个样本的负梯度残差。

接下来,我们训练一棵决策树(h_m(x))来拟合负梯度残差,并计算学习率(\gamma_m):

γ m = arg ⁡ min ⁡ γ ∑ i = 1 n L ( y i , F m − 1 ( x i ) + γ h m ( x i ) ) \gamma_m = \arg\min_{\gamma} \sum_{i=1}^{n} L(y_i, F_{m-1}(x_i) + \gamma h_m(x_i)) γm=argγmini=1nL(yi,Fm1(xi)+γhm(xi))

最后,我们更新模型:

F m ( x ) = F m − 1 ( x ) + γ m h m ( x ) F_m(x) = F_{m-1}(x) + \gamma_m h_m(x) Fm(x)=Fm1(x)+γmhm(x)

通过多轮迭代,GBDT模型能够逐渐拟合目标函数,并提升预测性能。

Python实现

接下来,我们使用Python实现GBDT模型,并通过注释解释代码的每个部分。

from sklearn.tree import DecisionTreeRegressor
import numpy as np

class GBDT:
    def __init__(self, n_estimators, learning_rate):
        self.n_estimators = n_estimators
        self.learning_rate = learning_rate
        self.trees = []
        
    def fit(self, X, y):
        # 初始化预测值为0
        y_pred = np.zeros_like(y)
        for i in range(self.n_estimators):
            # 计算负梯度残差
            residuals = -2 * (y - y_pred)
            # 训练决策树拟合负梯度残差
            tree = DecisionTreeRegressor(max_depth=2)
            tree.fit(X, residuals)
            self.trees.append(tree)
            # 更新预测值
            y_pred += self.learning_rate * tree.predict(X)
            
    def predict(self, X):
        # 初始化预测值为0
        y_pred = np.zeros(X.shape[0])
        for tree in self.trees:
            # 累加每棵决策树的预测结果
            y_pred += self.learning_rate * tree.predict(X)
        return y_pred

GBDT+LR模型

模型原理

GBDT+LR模型是一种两阶段的集成模型,首先使用GBDT模型自动提取特征,然后将提取的特征输入到逻辑回归(LR)模型中进行分类预测。

GBDT模型中,每个样本都会经过多棵决策树的预测,并最终得到一个预测结果。GBDT+LR模型的特点在于,它将每个样本在GBDT模型中的叶子节点位置作为新的特征,形成一个稀疏的特征向量,并将这个特征向量输入到逻辑回归模型中进行分类预测。

这样的做法实际上是将GBDT模型的输出作为逻辑回归模型的输入,从而实现了特征工程的自动化,提升了模型的预测性能。

模型训练

GBDT+LR模型的训练分为两个阶段:

  1. GBDT训练阶段:首先使用GBDT模型对原始特征进行训练,得到GBDT模型。对于每个样本,记录其在GBDT模型中每棵决策树的叶子节点位置,形成新的特征向量。

  2. LR训练阶段:使用逻辑回归模型对GBDT模型生成的新特征向量进行训练,得到最终的分类模型。

Python实现

接下来,我们使用Python实现GBDT+LR模型,并通过注释解释代码的每个部分。

from sklearn.ensemble import GradientBoostingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import OneHotEncoder

class GBDT_LR:
    def __init__(self, n_estimators, learning_rate, max_depth):
        self.gbdt = GradientBoostingClassifier(n_estimators=n_estimators, learning_rate=learning_rate, max_depth=max_depth)
        self.lr = LogisticRegression()
        self.one_hot = OneHotEncoder()
        
    def fit(self, X, y):
        # 训练GBDT模型
        self.gbdt.fit(X, y)
        # 获取GBDT模型的叶子节点索引
        gbdt_leaf_indices = self.gbdt.apply(X)[:,:,0]
        # 对叶子节点索引进行One-Hot编码
        gbdt_one_hot = self.one_hot.fit_transform(gbdt_leaf_indices)
        # 训练逻辑回归模型
        self.lr.fit(gbdt_one_hot, y)
        
    def predict(self, X):
        # 获取GBDT模型的叶子节点索引
        gbdt_leaf_indices = self.gbdt.apply(X)[:,:,0]
        # 对叶子节点索引进行One-Hot编码
        gbdt_one_hot = self.one_hot.transform(gbdt_leaf_indices)
        # 使用逻辑回归模型进行预测
        return self.lr.predict(gbdt_one_hot)
    
    def predict_proba(self, X):
        # 获取GBDT模型的叶子节点索引
        gbdt_leaf_indices = self.gbdt.apply(X)[:,:,0]
        # 对叶子节点索引进行One-Hot编码
        gbdt_one_hot = self.one_hot.transform(gbdt_leaf_indices)
        # 使用逻辑回归模型计算预测概率


        return self.lr.predict_proba(gbdt_one_hot)

总结

本文详细介绍了GBDT+LR模型的原理、模型训练、数学推导以及Python实现。GBDT+LR模型是一种两阶段的集成模型,它通过GBDT模型自动提取特征,并将提取的特征输入到逻辑回归模型中进行分类预测。这种模型化的特征工程方法能够有效提升模型的预测性能,并减少人工特征工程的工作量。

GBDT+LR模型在推荐系统、点击率预估、风险评估等任务中都有广泛的应用。通过本文的介绍,希望读者能够深入理解GBDT+LR模型的原理,并在实际项目中灵活应用。

参考文献

  1. Chen, T., & Guestrin, C. (2016). XGBoost: A Scalable Tree Boosting System. In Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (KDD), pp. 785-794.
  2. Friedman, J. H. (2001). Greedy function approximation: a gradient boosting machine. Annals of statistics, pp. 1189-1232.

[本文为原创内容,未经许可,禁止抄袭和转载。]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值