首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >机器学习第15天:GBDT模型

机器学习第15天:GBDT模型

作者头像
Nowl
发布2024-01-18 20:09:42
发布2024-01-18 20:09:42
4580
举报
文章被收录于专栏:NowlNowl_AINowlNowl_AI

GBDT模型介绍

GBDT(Gradient Boosting Decision Tree)也叫做梯度提升决策树,它的主要思想也是集成学习(由名字可以看出GBDT的弱分类器是决策树 ),即训练多个子模型,结合子模型来得到最终结果,但他们也有一些区别


Boosting

Boosting是GBDT与传统集成学习的一个主要区别

传统的集成学习训练过程中,分类器之间不会有任何联系,模型各自独立训练最后结合得出结果

而Boosting训练过程中,分类器会根据上一个分类器的结果来调整,重点关注上一个分类器的误差点,从而更好地提高模型性能


残差

我们接下来来看看分类器之间是怎么联系的,残差代表分类器预测结果与真实值的差距

假设我们有一个预测数字的任务,目标值是40,则会有这样一个过程

  • 第一个分类器预测结果为30,则残差为10
  • 第二个分类器去拟合残差,这时第二个分类器的目标值变成了10,以此类推
  • 最后得到的残差为0,完成任务

可以看到Boosting的思想是每一个分类器去拟合前一个分类器的残差,最后每个分类器的结果加起来就是真实值

GBDT的缺点

  • 由于每个分类器要等待上一个分类器的结果,故模型无法并行训练,消耗的时间可能较多

python代码实现

代码

这段代码使用的数据集是虚拟的,我们这里主要学习模型是如何构建的,在实际任务中将数据集替换为真实数据集即可

代码语言:javascript
复制
# 导入必要的库
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.metrics import accuracy_score

# 创建虚构的数据集
X, y = make_classification(n_samples=1000, n_features=20, random_state=42)

# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 初始化并训练GBDT模型
gbdt_model = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1, max_depth=3, random_state=42)
gbdt_model.fit(X_train, y_train)

# 预测
y_pred = gbdt_model.predict(X_test)

# 评估模型性能
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy}')

模型参数解释

  • n_estimators: 子分类器数量
  • learning_rate: 学习率
  • max_depth: 决策树最大深度

结语

GBDT是一种优化的集成学习方法,采用了拟合残差的新思想,广泛应用于分类任务和回归任务中,它还有两个优化方法:XGBoost和LightGBM,之后会做具体介绍,敬请期待

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-12-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • GBDT模型介绍
  • Boosting
  • 残差
  • GBDT的缺点
  • python代码实现
    • 代码
    • 模型参数解释
  • 结语
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档