📜  机器学习中的 Bagging 与 Boosting(1)

📅  最后修改于: 2023-12-03 15:40:19.839000             🧑  作者: Mango

机器学习中的 Bagging 与 Boosting

简介

在机器学习中,Bagging 和 Boosting 是两种常用的集成学习方法。它们可以通过将多个弱学习器集成起来,提升模型的泛化能力,进而达到更好的预测效果。

Bagging

Bagging(Bootstrap Aggregating)是一种基于自助法的集成学习方法。它的基本思路是从原始数据集中随机抽样构建 T 个新的训练集,每个训练集都包含原始数据集中 N 个样本,但有的样本可能会重复出现,有的样本可能会被遗漏。然后在每个新的训练集上训练一个弱学习器,最终将这 T 个弱学习器的预测结果进行投票或取平均值,作为集成模型的最终预测结果。

Bagging 的优点在于,通过自助法构建多个训练集,有效地增加了数据集的多样性,从而降低了集成模型的方差。此外,由于每个弱学习器都是在随机抽样的训练集上训练出来的,使得 Bagging 能够更好地应对嘈杂数据和过拟合问题。

Boosting

Boosting 是一种迭代的集成学习方法。它的基本思路是通过迭代的方式,每次在原始训练集中提取出一部分数据进行训练,然后根据学习器的效果进行调整,使得下一轮训练集更加关注之前被错误分类的样本。最终将这些弱学习器加权融合,形成最终的集成模型。

Boosting 的优点在于它能够逐步减少偏差(Bias)。在每一轮训练中,弱学习器都会关注之前被错误分类的样本,从而更好地适应数据集的分布,进一步减少偏差。此外,Boosting 也具有一定的抗噪能力。

实现

在 Python 中,我们可以使用 Scikit-learn 库中的 BaggingClassifier 和 AdaBoostClassifier 类来实现 Bagging 和 Boosting。

Bagging
from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier

# 创建一个基于决策树的 Bagging 分类器
bagging_clf = BaggingClassifier(
    DecisionTreeClassifier(),  # 弱学习器
    n_estimators=500,  # 弱学习器的个数
    max_samples=100,  # 每个训练集的样本数量
    bootstrap=True,  # 是否采用自助法
    n_jobs=-1  # 并行运算
)

# 训练模型
bagging_clf.fit(X_train, y_train)

# 预测结果
y_pred = bagging_clf.predict(X_test)
Boosting
from sklearn.ensemble import AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier

# 创建一个基于决策树的 AdaBoost 分类器
adaboost_clf = AdaBoostClassifier(
    DecisionTreeClassifier(max_depth=1),  # 弱学习器
    n_estimators=200,  # 弱学习器的个数
    learning_rate=1.0  # 学习率
)

# 训练模型
adaboost_clf.fit(X_train, y_train)

# 预测结果
y_pred = adaboost_clf.predict(X_test)
总结

Bagging 和 Boosting 是两种常用的集成学习方法。Bagging 基于自助法,通过构建多个训练集来增加数据集的多样性,降低集成模型的方差;Boosting 则是基于迭代的方式,通过逐步减少偏差,得到更加精确的预测结果。在实际应用中,可以根据数据集的特点和模型的需求,选择一种适合的集成学习方法。