【机器学习|学习笔记】集成学习之随机森林(Random Forest) 与 梯度提升树(GBDT,Gradient Boosted Decision Trees)算法详解?

【机器学习|学习笔记】集成学习之随机森林(Random Forest) 与 梯度提升树(GBDT,Gradient Boosted Decision Trees)算法详解?



欢迎铁子们点赞、关注、收藏!
祝大家逢考必过!逢投必中!上岸上岸上岸!upupup

大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文。详细信息可关注VX “学术会议小灵通”或参考学术信息专栏:https://blog.csdn.net/2401_89898861/article/details/148877490


✅ 一、背景简介:为什么提出 Random Forest 和 GBDT?

  • 早期单一决策树虽然可解释性强,但有以下问题:
问题说明
高方差对数据敏感,容易过拟合
高偏差简单模型无法拟合复杂分布
稳定性差小数据扰动模型结果变化大

为了解决这些问题,集成模型被提出,其中:

  • 🎯 随机森林(RF):通过Bagging + 特征扰动,降低方差。
  • 🚀 GBDT(提升树):通过Boosting,逐步拟合残差,降低偏差。

🔍 二、原理对比:随机森林 vs GBDT

对比维度随机森林(RF)GBDT(梯度提升树)
集成方式Bagging(并行)Boosting(串行)
模型顺序各树独立并行训练每棵树依赖前一棵树残差
目标降低方差降低偏差
特征选择每个节点随机选部分特征全特征使用
样本选择Bootstrap 采样所有样本都用,部分加权
决策树深度通常较深通常浅(防过拟合)
超参数调节相对少超参数更多
训练速度快,可并行慢,串行
对异常点鲁棒敏感
回归损失平均残差拟合(如平方损失)

🧪 三、Python 实现:随机森林 vs GBDT

✅ 数据准备:

from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
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, stratify=y, random_state=42)

✅ 1. 随机森林(Random Forest)

from sklearn.ensemble import RandomForestClassifier

rf = RandomForestClassifier(
    n_estimators=100,  # 树的数量
    max_depth=7,       # 每棵树的深度
    max_features="sqrt",  # 特征采样策略
    random_state=42,
    n_jobs=-1
)
rf.fit(X_train, y_train)
y_pred_rf = rf.predict(X_test)
print(f"🎯 Random Forest Accuracy: {accuracy_score(y_test, y_pred_rf):.4f}")

✅ 2. GBDT(Gradient Boosting)

from sklearn.ensemble import GradientBoostingClassifier

gbdt = GradientBoostingClassifier(
    n_estimators=100,      # 迭代次数
    learning_rate=0.1,     # 学习率
    max_depth=3,           # 弱分类器深度
    subsample=1.0,         # 可设为 <1.0 增强泛化
    random_state=42
)
gbdt.fit(X_train, y_train)
y_pred_gbdt = gbdt.predict(X_test)
print(f"🚀 GBDT Accuracy: {accuracy_score(y_test, y_pred_gbdt):.4f}")

📊 四、可视化对比学习过程(Boosting 示例)

import matplotlib.pyplot as plt

test_scores = []
for n in range(10, 101, 10):
    gbdt = GradientBoostingClassifier(n_estimators=n, max_depth=3, learning_rate=0.1)
    gbdt.fit(X_train, y_train)
    test_scores.append(gbdt.score(X_test, y_test))

plt.plot(range(10, 101, 10), test_scores, marker='o')
plt.title("GBDT Test Accuracy vs n_estimators")
plt.xlabel("Number of Estimators")
plt.ylabel("Accuracy")
plt.grid(True)
plt.show()

🧠 五、总结对比表:随机森林 vs GBDT

维度随机森林(RF)GBDT(提升树)
并行支持✅ 支持❌ 串行计算
训练速度
准确率中高较高
易调参容易较复杂
抗噪声能力较差
是否易过拟合是(需控制)
特征重要性可解释可解释
应用场景快速 baseline、多分类高精度任务(排序、点击率等)

✅ 六、如何选择?

应用场景推荐算法原因
模型训练速度关键随机森林并行高效,调参简单
模型精度优先GBDT(或 XGBoost)精度更高,灵活性好
特征数量多,维度高随机森林抗高维
少量数据、精细建模GBDT可拟合非线性关系
工程部署简洁RF稳定易部署

总结一句话:

  • 🎯 随机森林更鲁棒更快,GBDT 更精细更强。选择取决于你的数据规模、精度要求和系统复杂度需求。
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐