Python浅试Bagging集成学习


前言

集成学习(Ensemble Learning)是指用一系列分类\回归器共同对一个问题进行分类或回归的学习方法。其中,如果分类器都是同一类型的,比如都是决策树,那么这样的分类器称为同质分类器;反之如果分类器是不同类型的,那么就是异质分类器。常见的集成学习方法有Boost、Bagging、随机森林等等。其中Boost方法是主要用于二分类问题的用于减小偏差的一类方法,其主要通过将一系列基础分类器进行线性加权最终得到集成结果,并且其迭代及优化的过程有严谨的数学支撑。本文要实现的Bagging方法是一种可以减小方差的方法。而随机森林是将多个决策树\回归树的结果进行集成的方法。


一、Bagging的主要思想

Bagging是并行式集成学习方法最著名的代表。该方法基于自助采样法:给定包含m个样本的数据集,我们先随机取出一个样本放入采样集中,再把该样本放回初始数据集,使得下次采样时该样本仍有可能被选中。这样经过m次随机采样操作,我们得到一个含有m个样本的采样集。初试训练集中的样本有的在采样集中多次出现,有的则从未出现。一个样本从未出现的概率为 lim ⁡ m → ∞ ( 1 − 1 m ) m = 1 e ≈ 0.268 \lim_{m\rightarrow \infty}{(1-\dfrac{1}{m})^{m}}=\dfrac{1}{e} \approx0.268 mlim(1m1)m=e10.268,也就是说,训练集中大概有63.2%的样本出现在了采样集中。
按照上述步骤,我们可以采样出 T T T个含有 m m m个训练样本的采样集,然后基于每个采样集训练出一个基学习器,再将这些学习器进行组合。在对预测输出进行组合时,Bagging通常采用简单的投票法,即最终以数量较多的结果作为预测结果。其算法流程简化如下:
输入: 训练集 D = ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) D=(x_{1},y_{1}),(x_{2},y_{2}),...,(x_{m},y_{m}) D=(x1,y1),(x2,y2),...,(xm,ym)
基学习算法 Σ \mathcal{\Sigma} Σ
训练轮数 T T T
过程:
1: for t=1,2,…,T do
2: h t = Σ ( D , D b s ) h_{t}=\Sigma(D,D_{bs}) ht=Σ(D,Dbs)
3:end for
输出: H ( x ) = arg max ⁡ y ∈ Y ∑ t = 1 T I ( h t ( x ) = y ) H(x)=\argmax_{y\in Y}\sum_{t=1}^{T}{I(h_{t}(x)=y)} H(x)=yYargmaxt=1TI(ht(x)=y)

二、相关代码

可以看到,Bagging的流程其实非常简单,只需要以基学习器为基础,然后通过对训练集进行抽样出采样集,然后训练出T个基学习器,再简单搞个投票就可以了。本文使用上一篇的朴素贝叶斯分类器进行集成。

1.随机抽取采样集

代码如下:

sampleSetNum=10     #设定采样集的数量

length=data.shape[0]    #获取原数据集的样本数
columns=data.columns
dataList=[]
for i in range(sampleSetNum):
    indexs=np.random.randint(1,length,length)
    dataFrame=pd.DataFrame(columns=columns)
    for j in indexs:
        dataFrame=pd.DataFrame.append(dataFrame,data.loc[j],ignore_index=True)
    dataList.append(dataFrame)

2.生成各个采样集的贝叶斯概率表

代码如下:

pathList=[]
for i in range(sampleSetNum):
    string="../Tabel/Tabel%i.npy"%i
    pathList.append(string)


priorProbList=[]      #保存先验概率
posterProbDict=[]     #保存后验概率表
for i in range(len(dataList)):
    temp=PosteriorProbDivided(dataList[i],columns[:-1],columns[-1],pathList[i])
    priorProbList.append(temp)
    posterProbDict.append(np.load(pathList[i],allow_pickle=True).item())

3.对每个基分类器进行结果预测并集成

def EnsembleBayes(data,label,priorProbList,posterProbDict):
    length=data.shape[0]
    acc=0
    for i in range(length):
        preList=[]
        for j in range(len(priorProbList)):
            tempPre=PosteriorFind(data.loc[i],posterProbDict[j],priorProbList[j])
            preList.append(tempPre)

        pre=np.argmax(np.bincount(preList))    #找出投票数最多的标签
        if data[label][i]==pre:
            acc+=1

    ratio=acc/length
    return ratio

效果

朴素贝叶斯对鸢尾花数据集的分类正确率

在这里插入图片描述
Bagging对鸢尾花数据集的分类正确率
在这里插入图片描述
嗯…还是有所提升的

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Bagging(Bootstrap Aggregating)是一种集成学习(Ensemble Learning)方法,它通过对训练集进行有放回的随机抽样(Bootstrap Sampling),得到多个子训练集,并使用每个子训练集分别训练出一个基模型(Base Model)。然后,对这些基模型的结果进行聚合,得到最终的预测结果。Bagging 主要用于降低基模型的方差(Variance),提高模型的泛化能力(Generalization)。 Bagging 的主要步骤如下: 1. 通过有放回的随机抽样,得到多个子训练集。 2. 对每个子训练集分别训练出一个基模型。 3. 对测试样本进行预测,得到多个基模型的预测结果。 4. 对多个基模型的预测结果进行聚合,得到最终的预测结果。 Bagging 的聚合方法可以是简单平均(Simple Average)、加权平均(Weighted Average)、投票(Voting)等等。 下面是一个使用 Bagging 进行分类的 Python 代码示例: ```python from sklearn.ensemble import BaggingClassifier from sklearn.tree import DecisionTreeClassifier # 构造基模型 base_model = DecisionTreeClassifier() # 构造 Bagging 模型 bagging_model = BaggingClassifier(base_estimator=base_model, n_estimators=10) # 训练模型 bagging_model.fit(X_train, y_train) # 对测试集进行预测 y_pred = bagging_model.predict(X_test) ``` 在上面的代码中,我们使用决策树(Decision Tree)作为基模型,构造了一个 Bagging 分类器。其中,`base_estimator` 参数表示基模型的类型,`n_estimators` 参数表示子模型的数量。然后,我们使用训练集对模型进行训练,最后对测试集进行预测。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值