机器学习---集成学习

1. 概念

集成学习(ensemble learning),并不是一个单独的机器学习算法,而是通过构建并结合多个机器学习器(基学习器,Base learner)来完成学习任务。集成学习往往被视为一种元算法(meta-algorithm)。

2. 分类

集成学习主要可以分为两类:
一. Bagging
Bagging(训练多个分类器取平均):从训练集从进行子抽样组成每个基模型所需要的子训练集,对所有基模型预测的结果进行综合产生最终的预测结果。

二. Boosting
Boosting(提升算法,从弱学习器开始加强,通过加权来进行训练):训练过程为阶梯状,基模型按次序一一进行训练(实现上可以做到并行),基模型的训练集按照某种策略每次都进行一定的转化。如果某一个数据在这次分错了,那么在下一次我就会给它更大的权重。对所有基模型预测的结果进行线性综合产生最终的预测结果。

(1) Bagging类

以对鸢尾花数据进行Bagging分类为例:

from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn import datasets

iris = datasets.load_iris()
X = iris.data
Y = iris.target

seed = 42
kfold = KFold(n_splits=10,shuffle=True,random_state=seed)
cart = DecisionTreeClassifier(criterion='gini',max_depth=3)
cart = cart.fit(X, Y)
result = cross_val_score(cart, X, Y, cv=kfold)
print("CART树结果:",result.mean())

model = BaggingClassifier(base_estimator=cart, n_estimators=100, random_state=seed)
result = cross_val_score(model, X, Y, cv=kfold)
print("Bagging提升后结果:",result.mean())

运行后可以看出用了Bagging后,交叉验证的正确率相比简单的CART树,提升了一些。

其中,随机森林(Random Forest)是一种较为特殊的Bagging方法,在引入RandomForestClassifier分类器之后,会发现分类准确率会再上升一些,具体使用方法和BaggingClassifier几乎一致,可对照使用。

(2) Boosting类

以对乳腺癌数据进行Boosting分类为例:

#引用KFold,cross_val_score,AdaBoost和决策树
#使用cross_val_score进行交叉验证,KFold来划分数据集
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn import datasets

#引用breast_cancer数据集
dataset_all = datasets.load_breast_cancer()
X = dataset_all.data
Y = dataset_all.target
X.shape

seed = 42
kfold = KFold(n_splits=10, shuffle=True, random_state=seed)
dtree = DecisionTreeClassifier(criterion='gini',max_depth=3)
dtree = dtree.fit(X, Y)
result = cross_val_score(dtree, X, Y, cv=kfold)
print("决策树结果:",result.mean())

model = AdaBoostClassifier(base_estimator=dtree, n_estimators=100,random_state=seed)
result = cross_val_score(model, X, Y, cv=kfold)
print("提升法改进结果:",result.mean())

同样可以看出,有一定程度的提升。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

WFForstar

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

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

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

打赏作者

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

抵扣说明:

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

余额充值