Bagging(Bootstrap aggregating)、随机森林(random forests)、AdaBoost

本文深入介绍了Bagging、随机森林和AdaBoost算法,通过scikit-learn库在Wine数据集上的应用进行比较。Bagging通过集成多个决策树改善模型稳定性,随机森林通过特征子集选择进一步降低过拟合风险,而AdaBoost则通过连续训练弱分类器并调整权重来提升整体性能。三种方法各有优缺点,适合不同场景的应用。

引言

在这篇文章中,我会详细地介绍Bagging、随机森林和AdaBoost算法的实现,并比较它们之间的优缺点,并用scikit-learn分别实现了这3种算法来拟合Wine数据集。全篇文章伴随着实例,由浅入深,看过这篇文章以后,相信大家一定对ensemble的这些方法有了很清晰地了解。

Bagging

bagging能提升机器学习算法的稳定性和准确性,它可以减少模型的方差从而避免overfitting。它通常应用在决策树方法中,其实它可以应用到任何其它机器学习算法中。如果大家对决策树的算法不太理解,请大家参考这篇文章:决策树ID3、C4.5、C5.0以及CART算法之间的比较,在下面的例子中,都会涉及到决策树,希望大家能理解一下这个算法。

下面,我介绍一下bagging技术的过程:

假设我有一个大小为 n 的训练集D,bagging会从D中有放回的均匀地抽样,假设我用bagging生成了 mDiDij 。由于我有放回的进行抽样,那么在 Di 中的样本有可能是重复的。如果 j=n ,这种取样称为bootstrap取样。现在,我们可以用上面的 m 个训练集来拟合 m 个模型,然后结合这些模型进行预测。对于回归问题来说,我们平均这些模型的输出;对于分类问题来说,我们进行投票(voting)。bagging可以改良不稳定算法的性能,比如:人工神经网络、CART等等。下面,我举一个具体的例子说明一下bagging。

假设有一个训练集 D 的大小为7,我想用bagging生成3个新的训练集 Di,Di7 ,结果如下表:

样本索引 baggingD1 baggingD2 baggingD3
1 2 7 3
2 2 3 4
3 1 2 3
4 3 1 3
5 5 1 6
6 2 5 1
7 6 4 1

那么现在我就可以用上面生成的3个新训练集来拟合模型了。

决策树是一个很流行的机器学习算法。这个算法的性能在特征值的缩放和各种转换的情况下依然保持不变,即使在包含不相关特征的前提下,它依然很健壮。然而,决策树很容易过拟合训练集。它有低的偏差,但是有很高的方差,因此它的准确性不怎么好。

bagging是早期的集成方法(ensemble method),它可以重复地构建多个决策树基于有放回地重新采样,然后集成这些决策树模型进行投票,从而得到更好地准确性。稍后,我会介绍决策森林算法,它可以比bagging更好地解决决策树overfitting的问题。这些方法虽然会增加一些模型的偏差和丢失一些可解释性,但是它们

BaggingBoosting是两种常见的集成学习算法,以下是它们的原理、应用及区别的相关信息: ### 原理 - **Bagging**:BaggingBootstrap aggregating,是一种并行方法,多个基学习器彼此独立。它通过自助采样(Bootstrap)从原始数据集中有放回地抽取多个样本集,为每个样本集训练一个基学习器,最后将这些基学习器的结果进行综合(如分类任务采用投票法,回归任务采用平均法)来得到最终结果,主要目的是减少方差,适合高方差模型,且每个学习器权重相等 [^2]。 - **Boosting**:Boosting是串行方法,每个基学习器依赖前一个学习器的结果。它从初始训练集训练出一个基学习器,根据这个基学习器的表现对样本进行调整,使得先前基学习器做错的样本在后续受到更多关注,然后基于调整后的样本训练下一个基学习器,如此重复,直到基学习器数量达到事先指定的值T,最终将这些基学习器加权结合得到最终结果,主要是减少偏差,适合低偏差模型,每个学习器的权重动态调整 [^2]。 ### 应用 - **Bagging**:Bagging的典型代表是随机森林random forests),在许多领域都有广泛应用,例如金融领域的风险评估、医学领域的疾病诊断等,可用于处理高维数据和防止过拟合 [^3]。 - **Boosting**:常见的Boosting算法有AdaBoost等,常用于数据挖掘、自然语言处理等领域,如文本分类、情感分析等任务,能够有效提高模型的准确性 [^3]。 ### 区别 - **训练方式**:Bagging的基学习器是并行训练的,彼此之间没有依赖关系;而Boosting的基学习器是串行训练的,后一个基学习器依赖前一个基学习器的结果 [^2]。 - **侧重方向**:Bagging主要致力于减少方差,适用于高方差的模型;Boosting主要是减少偏差,适用于低偏差的模型 [^2]。 - **模型权重**:Bagging中每个学习器的权重是相等的;Boosting中每个学习器的权重是根据其在训练过程中的表现动态调整的 [^2]。 ### 代码示例 在Python中,使用scikit - learn库可以方便地实现BaggingBoosting算法。以下是简单的示例代码: ```python from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split from sklearn.ensemble import BaggingClassifier, AdaBoostClassifier from sklearn.tree import DecisionTreeClassifier # 生成示例数据 X, y = make_classification(n_samples=1000, n_features=10, n_informative=5, n_redundant=0, random_state=42) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # Bagging示例 bagging = BaggingClassifier(base_estimator=DecisionTreeClassifier(), n_estimators=10) bagging.fit(X_train, y_train) bagging_score = bagging.score(X_test, y_test) print(f"Bagging accuracy: {bagging_score}") # Boosting示例 boosting = AdaBoostClassifier(base_estimator=DecisionTreeClassifier(max_depth=1), n_estimators=10) boosting.fit(X_train, y_train) boosting_score = boosting.score(X_test, y_test) print(f"Boosting accuracy: {boosting_score}") ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值