ML 学习站
跳到正文

集成学习

Bagging、Boosting、Random Forest 与 XGBoost 思想。

30 分钟4 / 51,937
加载中...

集成学习

三个臭皮匠,顶个诸葛亮——集成学习(Ensemble Learning)就是这个朴素思想的算法化。

核心思想

单个模型(无论决策树、神经网络还是 SVM)都有局限性:有偏、方差大、或者容易过拟合。集成学习把多个弱模型组合起来,得到一个强模型

集成要有效的两个关键条件:

  1. 基模型之间要有差异(多样性)— 5 个一模一样的模型,投票也没用
  2. 基模型都要比随机猜好 — 拉一群乱猜的模型投票,结果还是乱猜

三大流派

Bagging:并行训练,投票决定

Bootstrap AGGregatING。核心流程:

  1. 从训练集有放回采样 N 次,得到 N 个子集
  2. 在每个子集上独立训练一个基模型
  3. 预测时投票(分类)或平均(回归)

代表:随机森林(Random Forest)

在决策树基础上,加两个随机:

  • 样本随机:每棵树用 bootstrap 采样子集
  • 特征随机:每次切分时只考虑随机子集的特征
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_breast_cancer

X, y = load_breast_cancer(return_X_y=True)
model = RandomForestClassifier(n_estimators=100, max_depth=10, random_state=42)
model.fit(X_train, y_train)
print(f"测试准确率: {model.score(X_test, y_test):.3f}")

Bagging 擅长降低方差——单棵决策树容易过拟合,100 棵树投票就稳了。

Boosting:串行训练,纠正前人错误

核心思想:后面的模型专门学前面模型分错的样本

代表:AdaBoost、Gradient Boosting、XGBoost

Gradient Boosting 的精髓是用梯度下降的思想在函数空间里优化:

  • 第 1 个模型 f1 拟合数据
  • 第 2 个模型 f2 拟合 f1 的残差(就是 f1 错的部分)
  • 第 3 个模型 f3 拟合 f1+f2 的残差
  • ...
  • 最终预测 = f1 + f2 + f3 + ... + fN

XGBoost / LightGBM:工业界事实标准,比传统 GBDT 优化了:

  • 二阶导数信息
  • 树的剪枝
  • 并行化
  • 缺失值处理
  • 正则化
import xgboost as xgb

model = xgb.XGBClassifier(
    n_estimators=200,
    max_depth=5,
    learning_rate=0.1,
    subsample=0.8,
    colsample_bytree=0.8,
    random_state=42,
    eval_metric='logloss'
)
model.fit(X_train, y_train, eval_set=[(X_test, y_test)], verbose=False)

Boosting 擅长降低偏差——通过不断学习残差,把弱模型变强。

Stacking:层层堆叠

最复杂最强大的集成方法:把多个不同类型的基模型的输出,再喂给一个元模型(meta-learner)做最终预测。

随机森林  →  预测1  ─┐
XGBoost   →  预测2  ─┼→  元模型(LR)  →  最终预测
SVM       →  预测3  ─┘
from sklearn.ensemble import StackingClassifier
from sklearn.linear_model import LogisticRegression

estimators = [
    ('rf', RandomForestClassifier(n_estimators=100)),
    ('xgb', xgb.XGBClassifier(n_estimators=100)),
    ('svm', SVC(probability=True))
]

stacking = StackingClassifier(
    estimators=estimators,
    final_estimator=LogisticRegression(),
    cv=5
)
stacking.fit(X_train, y_train)

Bagging vs Boosting 一图对比

维度BaggingBoosting
训练方式并行串行
降低什么方差偏差
容易过拟合不太会容易,需要早停
训练速度快(可并行)
典型代表Random ForestXGBoost, LightGBM
适合数据大数据中小数据

实战经验

小结

  • 集成学习 = 多个弱模型组合 = 强模型
  • Bagging(并行,降方差):随机森林
  • Boosting(串行,降偏差):XGBoost、LightGBM
  • Stacking(堆叠):效果最好但最复杂,容易过拟合
  • 表格数据首选 XGBoost 系

练习思考

  1. 随机森林的"特征随机"和"样本随机"分别起了什么作用?如果只用其中一个会怎样?
  2. XGBoost 的 learning_rate(学习率)调大或调小,模型会怎么变化?为什么通常需要配合 n_estimators 一起调?
  3. 用 kaggle 上的 Titanic 数据集,分别用随机森林和 XGBoost 跑一遍,看谁准确率高。

章末小测验

检验你对《集成学习》的掌握程度。

1

Bagging 和 Boosting 的核心区别是?

2

XGBoost 为什么是工业界表格数据的事实标准?

讨论区(0)

加载评论中...