集成学习-Bagging和Pasting

本文介绍了集成学习中的Bagging和Pasting技术,探讨了如何通过随机抽取数据和特征来增强模型的鲁棒性,并详细解释了Out-of-Bag评估方法。此外,还展示了如何利用并行处理加速模型训练,并给出了基于随机子空间和随机森林的具体实现案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

一、Bagging和Pasting

             上一节说到了集成学习的Voting,基于投票的集成学习就集成了几个分类器的结果,相对来说不是很多,我们需要更多的模型,也就是投票的人更多,且这些模型之间不一样,使得我们的模型更为健壮。

             我们可以让每个子模型只看数据的一部分,算法可以使用同一个;使用一部分数据会使得单个模型准确率降低,但是这些模型结合起来效果就会很好,假定我们每个模型的准确率是60%(实际结果可能是有高有低),有500个模型,这样结合起来这个模型的准确率就是:99.999%

           对于数据集,每次放回取样叫做Bagging,不放回取样叫做Pasting,Bagging使用的多(统计学中放回取样叫做bootstrap,这也是sklearn中控制放回不放回的参数)

实例:

#仍然使用Voting的数据
#n_estimators生成多少个分类器
#max_samples:每个分类器有多少个数据
#bootstrap:样本是否放回,True放回
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import BaggingClassifier

bagging_clf = BaggingClassifier(DecisionTreeClassifier(),
                               n_estimators=500, max_samples=100,
                               bootstrap=True)


bagging_clf.fit(X_train, y_train)
bagging_clf.score(X_test, y_test)

二、OOB Out-of-Bag

放回取样会导致一些样本取不到,平均大概有37%的样本取不到,这部分可以作为模型的测试数据

OOB代码实例,用的还是之前的数据集

import numpy as np
import matplotlib.pyplot as plt

from sklearn import datasets

X, y = datasets.make_moons(n_samples=500, noise=0.3, random_state=42)

plt.scatter(X[y==0,0],X[y==0,1])
plt.scatter(X[y==1,0],X[y==1,1])
plt.show()
from sklearn.model_selection import train_test_split

X_train,X_test,y_train,y_test = train_test_split(X,y,random_state=666)

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

bagging_clf2 = BaggingClassifier(DecisionTreeClassifier(),
                               n_estimators=500, max_samples=100,
                               bootstrap=True, oob_score=True)
bagging_clf2.fit(X_train, y_train)

bagging_clf2.oob_score_

这样输出结果为:0.928

三、并行化处理参数 n_jobs = -1

      由于决策树每个树独立训练,可以进行并行化处理,n_jobs = -1代表使用全部的计算机核

四、更多思考

      这里我们只对数据集随机取样,我们还可以对特征随机取样

只对特征取样代码参考 bootstrap_features:

# max_samples=500这里对所有样本取样
# max_features 每次最大特征取多少
# bootstrap_features=True 特征取样方式是有放回的
# 这里使用的是全部样本数据

random_subspaces_clf = BaggingClassifier(DecisionTreeClassifier(),
                               n_estimators=500, max_samples=500,
                                         n_jobs=-1,
                               bootstrap=True, oob_score=True,
                                max_features=1,bootstrap_features=True)
random_subspaces_clf.fit(X, y)
random_subspaces_clf.oob_score_

五、我们也可以对特征和数据集都随机取样,这就是随机森林

# max_features 每次最大特征取多少
# bootstrap_features=True 特征取样方式是有放回的
random_subspaces_clf = BaggingClassifier(DecisionTreeClassifier(),
                               n_estimators=500, max_samples=100,
                                         n_jobs=-1,
                               bootstrap=True, oob_score=True,
                                max_features=1,bootstrap_features=True)
random_subspaces_clf.fit(X, y)
random_subspaces_clf.oob_score_

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值