【机器学习】集成算法:bagging策略包含详细案例


前言

Bagging是一种基于集成学习的算法,是一种广泛使用的机器学习技术。Bagging的全称是Bootstrap Aggregating,其思想是通过将许多相互独立的学习器的结果进行结合,从而提高整体学习器的泛化能力。本篇博客将介绍Bagging算法的工作原理,优点和缺点,以及如何在Python中实现。

一、工作原理

Bagging算法的工作原理非常简单。首先,它从原始数据集中使用有放回的随机采样方式抽取多个子集,这些子集的大小与原始数据集相同。然后,它使用每个子集独立地训练一个学习器。最后,当需要进行预测时,Bagging算法将所有学习器的预测结果进行结合,以得出最终的预测结果。

原理过程

    1. 将原始数据集D随机划分成m个子集D1, D2, …, Dm
    1. 对于每个子集Di, 训练一个基学习器Hi
    1. 对于每个测试样本x,将其输入到所有的基学习器Hi中,并得到对应的预测结果{yi1, yi2, …, yim}
    1. 将所有的预测结果进行结合,以得出最终的预测结果y

二、优缺点

Bagging算法具有以下几个优点:

  • Bagging算法可以显著降低模型的方差,提高模型的稳定性。通过使用多个相互独立的学习器,Bagging可以减少模型对训练数据的敏感性,从而更好地适应未知的测试数据。
  • Bagging算法可以并行计算,加速模型训练的速度。由于每个基学习器都是独立训练的,所以Bagging算法可以并行处理多个子集,从而加速训练过程。
  • Bagging算法不容易出现过拟合。通过使用随机抽样的方式来生成多个子集,Bagging可以避免模型对训练数据的过分拟合。

Bagging算法的缺点包括:

  • Bagging算法对于噪声数据比较敏感。由于Bagging算法对于每个子集都会训练一个基学习器,因此如果某个子集包含大量的噪声数据,那么对应的基学习器的性能可能会下降,从而影响整个模型的性能。
  • Bagging算法在处理分类问题时,容易出现过于一致性问题。如果不同的基学习器都对同一个测试样本做出了相同的错误预测,那么Bagging算法将无法有效纠正这个错误。

三、实战案例

  • 构造训练测试数据集,这里我们只拿后两个特征值来训练
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
iris=load_iris()
X=iris.data[:,2:4]
y=iris.target

X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2)
  • 决策树bagging策略模型
bgg_clf=BaggingClassifier(
    DecisionTreeClassifier(max_depth=2),
    n_estimators=10,
    max_samples=155,
    bootstrap=True,
    random_state=42
)

bgg_clf.fit(X_train,y_train)

这个采用看决策树模型,生成50棵决策树,最大样本为50,根据自己的数据量选择

  • 预测结果
y_pred=bgg_clf.predict(X_test)
from sklearn.metrics import accuracy_score
print('准确率:',accuracy_score(y_test,y_pred))

在这里插入图片描述

  • 对比实验
    我们把上面的个bagging模型与单个决策树进行比较
tree_clf=DecisionTreeClassifier(random_state=42)
tree_clf.fit(X_train,y_train)

y_pred_tree=tree_clf.predict(X_test)
accuracy_score(y_test,y_pred_tree)

在这里插入图片描述

准确率相对与bagging有点小差距,为了更好的观察,我们可视化下决策边界

from sklearn.inspection import DecisionBoundaryDisplay
import matplotlib.pyplot as plt
import mplcyberpunk
plt.style.use('cyberpunk')

def plot_decision_boundar(modal,ax):

    DecisionBoundaryDisplay.from_estimator(
    modal,
    X,
        ax=ax,
    response_method="auto",
    alpha=0.5,)

    for i,target in enumerate(iris.target_names):
        plt.scatter(
            X[:,0][y==i],
            X[:,1][y==i],
            edgecolors='black',
            label=target,
        )

ax=plt.subplot(121)
plot_decision_boundar(tree_clf,ax)
plt.title('Decision Tree')

ax=plt.subplot(122)
plot_decision_boundar(bag_clf,ax)
plt.title('Decision Tree With Bagging')

在这里插入图片描述

四 、OOB策略

OOB(Out-Of-Bag)策略是Bagging算法的一种特殊形式。在Bagging算法中,为了训练多个基学习器,我们从原始数据集中有放回地抽取多个子样本,并将每个子样本分别用于训练一个基学习器。但是,在每个子样本中,只有大约63.2%的样本被抽取到。因此,剩余的约36.8%的样本可以被用于模型的评估,这些样本被称为OOB样本。

OOB(Out-Of-Bag)策略是Bagging算法的一种特殊形式,可以用于评估Bagging模型的性能和特征重要性。,使用oob_score_属性来获取模型的OOB评估结果。使用OOB策略可以提高Bagging算法的性能,并在一定程度上避免了过拟合的问题。同时,通过统计每个特征在OOB样本上的预测结果,我们还可以评估特征的重要性,从而进一步优化模型的性能。
需要注意的是,在使用OOB策略时,我们需要确保每个基学习器都使用了不同的子样本进行训练。如果使用相同的子样本进行训练,那么在OOB样本中可能会出现重复样本,导致评估结果不准确。

  • 重新构建模型
bag_clf=BaggingClassifier(
    DecisionTreeClassifier(),
    n_estimators=50,
    max_samples=50,
    random_state=42,
    bootstrap=True,
    oob_score=True
)

bag_clf.fit(X_train,y_train)
bag_clf.oob_score_

在这里插入图片描述
验证得分为0.94,然后我们用测试集来预测得分

y_pred=bag_clf.predict(X_test)
accuracy_score(y_test,y_pred)

在这里插入图片描述
我们可以打印一下每个特征值的决策得分概率情况

bag_clf.oob_decision_function_

在这里插入图片描述

表示每个类别所属的概率

五、总结

Bagging算法是一种基于集成学习的算法,可以显著降低模型的方差,提高模型的稳定性。Bagging算法的优点包括降低模型的方差、并行计算和避免过拟合。Bagging算法的缺点包括对噪声数据比较敏感和容易出现一致性问题

希望大家多多支持,后续分享有趣的只是

  • 6
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泪懿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值