【揭秘】GBDT:机器学习界的超级英雄

梯度提升决策树(GBDT)作为集成学习中的佼佼者,以其在分类和回归任务中的卓越性能,赢得了广大数据科学家的青睐。本文将带您深入探索GBDT的神秘面纱,并展示如何使用sklearn库高效实现GBDT。

一 什么是GBDT

介绍GBDT之前,让我们先介绍下提升树(Boosting Tree)

提升树是以 分类树 或 回归树 为基本分类器的提升方法。 提升树被认为是统计学习中性能最好的方法之一。

提升方法实际采用加法模型( 即基函数的线性组合)与前向分步算法。 以决策树为基函数的提升方法称为提升树( boosting tree)。对分类问题决策树是二叉分类树,对回归问题决策树是二叉回归树。

提升树利用加法模型与前向分歩算法实现学习的优化过程。 当损失函数是平方损失和指数损失函数时, 每一 步 优化是很简单的。 但对 一般损失函数而言, 往往每一步优化并不那么容易。 针对这一问题, Freidman 提出了 梯度提升( gradient boosting) 算法。它将问题转变成在损失函数梯度上寻找下降最快的方向,近似地求解。

GBDT 与提升树类似,模型依旧为加法模型、学习算法为前向分步算法。不同的是,GBDT 没有规定损失函数的类型,设损失函数为 L ( y , f ( x ) ) L(y,f(x)) L(y,f(x))

Gradient Boosting 是 Boosting 中的一大类算法,它的思想借鉴于梯度下降法,其基本原理是**「根据当前模型损失函数的负梯度信息来训练新加入的弱分类器」**,然后将训练好的弱分类器以累加的形式结合到现有模型中。采用决策树作为弱分类器的 Gradient Boosting 算法被称为 GBDT

二 sklearn中的GBDT实现

在这里插入图片描述

让我们来看看如何使用scikit-learn库来实现GBDT算法。

梯度树提升Gradient Tree Boosting或梯度提升树(Gradient Boosted Decision Trees,GBDT)是Booting对任意可微损失函数的推广。GBDT是一种准确有效的现成程序,可用于各种领域的回归和分类问题,包括Web搜索、排名和生态领域。

集成模块 sklearn.ensemble 通过梯度提升树提供了分类和回归的方法。

注意:在LightGBM (参看 [[LightGBM]](http://scikit-learn.org.cn/view/90.html#1.11.6 投票分类器))的启发下,Scikit-learn 0.21引入了两种新的梯度提升树的实验实现,即 HistGradientBoostingClassifierHistGradientBoostingRegressor。当样本数大于数万个样本时,这些基于直方图的估计可以比GradientBoostingClassifierGradientBoostingRegressor 快几个数量级。他们还内置了对缺失值的支持,从而避免了计算的需要。这些估计器将在下面基于直方图的梯度提升[Histogram-Based Gradient Boosting](http://scikit-learn.org.cn/view/90.html#1.11.5 基于直方图的梯度提升)中更详细地描述。

下面的指南重点介绍 GradientBoostingClassifierGradientBoostingRegressor,它们可能是小样本大小的首选,因为在这个设置中,装箱可能会导致分割点过于接近。

  1. 导入必要的库:

    from sklearn.ensemble import GradientBoostingClassifier
    from sklearn.datasets import load_iris
    from sklearn.model_selection import train_test_split
    
  2. 加载数据:

    # 加载鸢尾花数据集
    iris = load_iris()
    X, y = iris.data, iris.target
    
  3. 划分数据集:

    # 划分训练集和测试集
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
    
  4. 创建GBDT分类器:

    # 创建GBDT分类器实例
    gbdt = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1, max_depth=3, random_state=42)
    

    调参是提升GBDT性能的关键步骤。以下是一些常用的调参策略:

    • n_estimators:控制弱学习器的数量,需要权衡模型复杂度和过拟合风险。
    • learning_rate:学习率较小意味着需要更多的弱学习器来达到相同的拟合效果。
    • max_depth:控制决策树的深度,防止模型过于复杂。
    • subsample:样本抽样比例,小于1可以减少过拟合。
    • max_features:划分时考虑的最大特征数,可以是整数或百分比。
  5. 训练模型:

    # 训练模型
    gbdt.fit(X_train, y_train)
    
  6. 评估模型:

    # 预测
    y_pred = gbdt.predict(X_test)
    
    # 计算准确率
    from sklearn.metrics import accuracy_score
    accuracy = accuracy_score(y_test, y_pred)
    print(f"Accuracy: {accuracy:.2f}")
    

  • 15
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据AI

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值