DataWhale集成学习Task8--Bagging的原理和案例分析

Bagging法的思路

上一节提到了投票法,它通过多个模型的集成来降低方差,提高模型的鲁棒性;而bagging和投票法不一样的地方在于Bagging不仅仅集成模型最后的预测结果,同时采用一定策略来影响基模型训练,保证基模型可以服从一定的假设。在上一章中我们提到,希望各个模型之间具有较大的差异性,而在实际操作中的模型却往往是同质的,因此一个简单的思路是通过不同的采样增加模型的差异性。

Bagging原理分析

Bagging的思想比较简单,从原始样本集中使用Bootstraping的方法有放回的抽取n个训练样本(可能出现有些样本被多次抽到,而有些样本可能一次都没有被抽中),共进行k轮抽取,得到k个训练集,就是建立k个基学习器,最终结果由大家投票/平均值决定,如随机森林算法。当然,这里的基学习器并不局限于决策树,也可以是感知机等。此外,可以发现Bagging算法的多个基学习器训练过程时可以并行进行的。

对回归问题的预测是通过预测取平均值来进行的。对于分类问题的预测是通过对预测取多数票预测来进行的。Bagging方法之所以有效,是因为每个模型都是在略微不同的训练数据集上拟合完成的,这又使得每个基模型之间存在略微的差异,使每个基模型拥有略微不同的训练能力。

Bagging同样是一种降低方差的技术,因此它在不剪枝决策树、神经网络等易受样本扰动的学习器上效果更加明显。在实际的使用中,加入列采样的Bagging技术对高维小样本往往有神奇的效果。

Bagging实战案例

Sklearn为我们提供了 BaggingRegressor 与 BaggingClassifier 两种Bagging方法的API,我们在这里通过一个完整的例子演示Bagging在分类问题上的具体应用。这里两种方法的默认基模型是树模型。

创建一个含有1000个样本20维特征的随机分类数据集:

from sklearn.datasets import make_classification
# define dataset
X, y = make_classification(
    n_samples=1000, 
    n_features=20, 
    n_informative=15, 
    n_redundant=5, 
    random_state=5
)
# summarize the dataset
print(X.shape, y.shape)
(1000, 20) (1000,)

使用重复的分层k-fold交叉验证来评估该模型,一共重复3次,每次有10个fold。我们将评估该模型在所有重复交叉验证中性能的平均值和标准差。

# evaluate bagging algorithm for classification
from numpy import mean
from numpy import std
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedStratifiedKFold
from sklearn.ensemble import BaggingClassifier

# define the model
model = BaggingClassifier()
# evaluate the model
cv = RepeatedStratifiedKFold(
    n_splits=10, 
    n_repeats=3, 
    random_state=1
)
n_scores = cross_val_score(model, X, y, scoring='accuracy', cv=cv, n_jobs=-1, error_score='raise')
# report performance
print('Accuracy: %.3f (%.3f)' % (mean(n_scores), std(n_scores)))

Accuracy: 0.856 (0.036)

Bagging的补充知识

Bagging的优点

bagging直接基于自助采样法,由下式可知,初始训练集中约有63.2%的样本出现在采集中

lim ⁡ m → ∞ ( 1 − 1 m ) m ≈ 0.368 \lim_{m\to\infty} (1 - \frac{1}{m})^m \approx 0.368 mlim(1m1)m0.368

Bagging的算法描述如下:
在这里插入图片描述

  • 假定基学习器的时间复杂度为O(m),则bagging的复杂度约为 T ( O ( m ) + o ( s ) ) T(O(m)+o(s)) T(O(m)+o(s)),考虑到采样与投票的过程复杂度 O ( s ) O(s) O(s)很小,基本可以认为Bagging集成与基学习器训练学习器的复杂度同阶。说明Bagging是很高效的集成方法

  • 自助采样给Bagging带来了另一个优点,由于每个基学习器只使用了初始训练集中约63.2%的样本,剩下的36.8%的样本可以用作预测集来对泛化性能进行“包外估计”

Bagging的缺点

自助采样法优点比较明显,但在数学上也有一定的缺陷,重复有放回采样的道德样本集改变了数据原有的分布,因此在一定程度上引入了偏差,对最终的结果预测会造成一定程度的影响.

Bagging分类简单应用

from sklearn.svm import SVC
from sklearn.ensemble import BaggingClassifier
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=100, n_features=4,
                            n_informative=2, n_redundant=0,
                            random_state=0, shuffle=False)
clf = BaggingClassifier(base_estimator=SVC(),
                         n_estimators=10, random_state=0).fit(X, y)
clf.predict([[0, 0, 0, 0]])
array([1])

Bagging回归简单应用

from sklearn.svm import SVR
from sklearn.ensemble import BaggingRegressor
from sklearn.datasets import make_regression

X, y = make_regression(n_samples=100, n_features=4,                        n_informative=2, n_targets=1,
                        random_state=0, shuffle=False)
regr = BaggingRegressor(base_estimator=SVR(),
                         n_estimators=10, random_state=0).fit(X, y)
regr.predict([[0, 0, 0, 0]])
array([-2.87202411])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值