当前位置: 首页 > news >正文

梯度提升树与随机森林对比详解以及python实现

有关于梯度提升树(Gradient Boosting Decision Tree, GBDT)和随机森林(Random Forest)的详解如下

一、核心思想对比

1、随机森林 — 群体的智慧(Random Forest)

  • 核心思想: Bagging + 特征随机性。
  • 哲学:“三个臭皮匠,顶个诸葛亮”。我独立地训练一大批“弱”模型(通常是深度较大、强力的决策树),然后让它们投票(分类)或取平均(回归)。每个模型都尽可能准确,并且相互独立。
  • 关键:通过引入行采样和列采样,有意地让每棵树只看到一部分数据、一部分特征,从而确保树与树之间的差异性。这种差异性可以降低模型整体的方差。

2、梯度提升树 — 精益求精的学徒(Gradient Boosting Decision Tree, GBDT)

  • 核心思想:Boosting
  • 哲学:“站在巨人的肩膀上”。我顺序地训练一大批“弱”模型(通常是深度较浅的决策树,如不超过5层)。第一棵树学习任务,第二棵树学习第一棵树犯的错误(即残差),第三棵树学习前两棵树剩下的错误,如此反复。
  • 关键:每一棵新树的目标都是修正前一棵(或前几棵)树的错误。通过不断迭代,模型在之前表现不好的数据点上持续改进,从而逐步降低偏差。
  • 随机森林像一个专家委员会。每个专家独立研究问题并提出自己的方案,最后通过民主投票决定最终方案。即使有个别专家出错,也不会影响大局。
  • 梯度提升树像一个实习生团队。第一个实习生做完工作后,由第二个实习生检查并修正第一个的错误;第三个实习生再检查并修正前两个留下的错误…… 经过多轮迭代,最终成果会非常出色。

二、训练过程对比

特性随机森林梯度提升树
基学习器决策树(通常深度较大,低偏差高方差)决策树(深度很浅,如树桩,高偏差低方差)
集成方式BaggingBoosting
树关系并行生成,树与树之间相互独立串行生成,后一棵树依赖于前一棵树的结果。
数据使用对训练集进行Bootstrap抽样(有放回抽样),每棵树用不同的子集训练。每一棵树都使用全部训练数据(但会为每个样本分配不同的权重)。
目标/标签每棵树学习原始数据的真实标签。从第二棵树开始,学习的是残差(真实值 - 当前模型预测值),即负梯度方向。
随机性来源1. 数据行的Bootstrap抽样。
2. 分裂节点时特征的随机抽样。
1. 每棵树训练时也可对特征进行抽样(如XGBoost)。
2. 主要随机性来自于模型对数据顺序学习的依赖性。

三、梯度提升树的python库实现

梯度提升树在Python中有多个强大的库实现,其中最著名的包括scikit-learn中的GradientBoostingClassifier/GradientBoostingRegressor,以及专门优化的XGBoost、LightGBM和CatBoost。下面将分别介绍这些库的基本使用方法。

1、scikit-learn的GradientBoosting

from sklearn.ensemble import GradientBoostingClassifier, GradientBoostingRegressor
from sklearn.datasets import make_classification, make_regression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, mean_squared_error
import numpy as np# 分类示例
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分类器
gbc = GradientBoostingClassifier(n_estimators=100,        # 树的数量learning_rate=0.1,       # 学习率max_depth=3,            # 每棵树的最大深度subsample=0.8,          # 子采样比例random_state=42
)# 训练和预测
gbc.fit(X_train, y_train)
y_pred = gbc.predict(X_test)
print(f"Accuracy: {accuracy_score(y_test, y_pred):.4f}")# 回归示例
X_reg, y_reg = make_regression(n_samples=1000, n_features=10, noise=0.1, random_state=42)
X_train_r, X_test_r, y_train_r, y_test_r = train_test_split(X_reg, y_reg, test_size=0.2, random_state=42)gbr = GradientBoostingRegressor(n_estimators=100,learning_rate=0.1,max_depth=4,random_state=42
)gbr.fit(X_train_r, y_train_r)
y_pred_r = gbr.predict(X_test_r)
print(f"MSE: {mean_squared_error(y_test_r, y_pred_r):.4f}")

四、随机森林的参数与梯度提升的参数对比

由于随机森林(Random Forest)和梯度提升树(Gradient Boosting)都是基于决策树的集成方法,所以有些参数是共有的(如树的相关参数),但也有一些参数是各自特有的,因为它们基于不同的集成思想(Bagging vs Boosting)。

1、核心参数对比表

参数类别参数名称随机森林梯度提升树作用与区别
基础参数n_estimators树的数量(通常较大:100-500)树的数量(通常较大:100-1000)两者都重要,但GBDT对数量更敏感
random_state随机种子随机种子保证结果可重现
树结构参数max_depth通常较深(5-15),不限制过拟合通常较浅(3-8),防止过拟合RF树是强学习器,GBDT树是弱学习器
min_samples_split节点分裂最小样本数节点分裂最小样本数作用相似,都用于防止过拟合
min_samples_leaf叶节点最小样本数叶节点最小样本数作用相似,控制树生长
max_features√(重要参数)√(可选参数)RF中用于增加多样性,GBDT中用于正则化
学习过程参数learning_rate×(不存在)√(核心参数GBDT特有,控制每棵树的贡献程度
subsample√(Bootstrap采样)√(随机梯度提升)RF默认1.0(有放回),GBDT可小于1.0
loss / criteriongini, entropydeviance, exponential损失函数/分裂标准,选择不同
正则化参数正则化项×(通常无)√(L1/L2正则化)GBDT特有,控制模型复杂度
http://www.dtcms.com/a/601779.html

相关文章:

  • C语言编译器推荐 | 选择适合你的开发工具
  • 网站域名和空间网站产品优化方案
  • java.net.http 包详解
  • K8s Service核心功能:稳定访问与负载均衡
  • 有向图的可达性分析
  • 网站开发西安网页设计基础项目考核
  • INT305 Machine Learning 机器学习 Pt.8 Bagging 和 Boosting
  • React+Ant design
  • C++四种类型转换cast,其在参数传递时的作用
  • 什么网站可以做图赚钱网站建设主体设计要求
  • 云手机的核心价值
  • L10_参数验证
  • 免费网站制作手机软件的appaso排名优化
  • Java是编译型语言吗?解析Java语言的编译与执行过程
  • Hugging face微调 GPT-2模型
  • 1.3 半监督学习黑科技:如何用少量标注数据提升模型性能,节省90%标注成本?
  • 声学超材料与AI驱动的声振仿真优化设计
  • 罗湖建设公司网站建设企业推广app
  • 2025最新版Python 3.14.0安装使用指南
  • Keil5创建新工程时找不到STM32芯片
  • 重庆企业免费建站网站开发前台后台怎么交互
  • html5可以做交互网站吗西安模板建站公司
  • PostgreSQL 可视化监控利器 —— pg_top 安装与使用全攻略(查看正在执行的SQL占用的资源)
  • C语言 | 文件操作详解与实战示例
  • Spring ThreadPoolTaskExecutor 与 CompletableFuture.supplyAsync 常用实践
  • 网站太卡怎么优化wordpress meta key
  • 现在入局自助KTV,算晚吗?
  • 用Microsoft Visual Studio Installer Projects 2022打包程序,同时安装VC++的运行库等
  • 南宁网站制作建设建设网站需要哪些语言
  • C语言在线编译工具 | 提升编程效率与学习体验