机器学习-集成学习

集成学习的概念

集成学习 (ensemble learning) 通过构建并结合多个学习器来完成学习任务,有时也被称为多分类器系统(multi-classifier system) 、基于委员会的学习(committee-based learning) 等.

下图显示出集成学习的一般结构:先产生一组个体学习器,再用某种策略将他们结合起来,个体学习器由一个现有的学习算法从训练数据产生,例如 C4.5 决策树算法、 BP 神经网络算法等,此时集成中只包含同种类型的个体学习器,例如"决策树集成"中全是决策树"神经网络集成"中全是神经网络,这样的集成是"同质"(homogeneous) .同质集成中的个体学习器亦称"基学习器" (base learner), 相应的学习算法称为"基学习算法" (base learning algorithm). 集成也可包含不同类型的个体学习器,例如同时包含决策树和神经网络,这样的集成是"异质"的 (heterogenous) .异质集成中的个体学习器由不同的学习算法生成,这时就不再有基学习算法;相应的,个体学习器一般不称为基学习器,常称为"组件学习器" (component learner) 或直接称为个体学习器.
在这里插入图片描述
集成学习通过将多个学习器进行结合,常可获得比单一学习器显著优越的泛化性能,这对弱学习器尤为明显,因此集成学习很多理论研究是基于弱学习器进行的,而基学习器有时也会被称为弱学习器。但是是在实践中一般会使用比较强的学习器。
根据单个模型方式,集成学习可以分为两大类:

  • 个体间存在强依赖关系,必须串行生成的序列化方法,其代表为Boosting算法
  • 个体之间不存在强依赖关系,可同时生成的并行化方法,代表是Bagging和随机森林算法.

Boosting

Boosting 是一族可将弱学习器提升为强学习器的算法.这族算法的工作机制类似:先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多关注,然后基于调整后的样本分布来训练下一个基学习器;如此重复进行,直至基学习器数目达到事先指定的值 最终将这 个基学习器进行加权结合.

AdaBoosting是Boosting算法族中最著名的算法,它根据每次训练集之中每个样本的分类是否正确,以及上次的总体分类的准确率,来确定每个样本的权值。将修改过权值的新数据集送给下层分类器进行训练,最后将每次训练得到的分类器最后融合起来,作为最后的决策分类器。

sklearn中,AdaBoosting相关API:

import sklearn.tree as st
import sklearn.ensemble as se

# model: 决策树模型(单个模型,基学习器)
model = st.DecisionTreeRegressor(max_depth=4)

# n_estimators:构建400棵不同权重的决策树,训练模型
model = se.AdaBoostRegressor(model, # 单模型
                             n_estimators=400, # 决策树数量
                             random_state=7)# 随机种子

# 训练模型
model.fit(train_x, train_y)

# 测试模型
pred_test_y = model.predict(test_x)

Bagging

由集成学习的概念可知,欲得到泛化性能强的集成,集成中的个体学习器应尽可能相互独立;虽然"独立"在现实任务中无法做到,但可以设法使基学习器尽可能具有较大的差异.给定一个训练数据集,一种可能的做法是对训练样本进行采样,产生出若干个不同的子集,再从每个数据子集中训练出一个基学习器.这样,由于训练数据不同,我们获得的基学习器可望具有比较大的差异.然而,为获得好的集成,我们同时还希望个体学习器不能太差.如果来样出的每个子集都完全不同,则每个基学习器只用到了一小部分训练数据,甚至不足以进行有效学习,这显然无法确保产生出比较好的基学习器.为解决这个问题,我们可考虑使用相互有交叠的采样子集.

Bagging [Breiman, 1996a] 是井行式集成学习方法最著名的代表.从名字即可看出,它直接基于自助采样法 (bootstrap sampling).
给定包含 m个样本的数据集,我们先随机取出一个样本放入采样集中,再把该样本放回初始数据集,使得下次采样时该样本仍有可能被选中,这样,经过次随机采样操作,我们得到含m个样本的采样集,初始训练集中有的样本在采样集里多次出现,有的则从未出现.

照这样,我们可采样出 T个含 m个训练样本的采样集,然后基于每个采样集训练出一个基学习器,再将这些基学习器进行结合.这就是 Bagging 的基本流程.在对预测输出进行结合时, Bagging 通常对分类任务使用简单投票法,对回归任务使用简单平均法.若分类预测时出现两个类收到同样票数的情形,则最简单的做法是随机选择一个,也可进一步考察学习器投票的置信度来确定最终胜者. Bagging 的算法描述如下图所示:
在这里插入图片描述

随机森林

随机森林(Random Forest ,简称 RF) [Breiman, 2001a] Bagging的一个扩展变体.在以决策树为基学习器构建 Bagging 集成的基础上,进一步在决策树的训练过程中引入了随机属性选择.具体来说,传统决策树在选择划分属性时是在当前结点的属性集合(假定有 d个属性)中选择一个最优属性;而在RF 中,对基决策树的每个结点,先从该结点的属性集合中随机选择一个包含k个属性的子集,然后再从这个子集中选择一个最优属性用于划分这里 参数k控制了 机性的引入程度;若令k = d,则基决策树的构建与传统决策树相同;
若令 k= 1则是随机选择1个属性用于划分;一 般情况下,推荐值 k = log2 d.

随机森林简单、容易 现、计算开销 小,令人惊 是, 它在很多现实任务中展现出强大的性能,被誉为"代表集成学习 技术水平的方法"可以看出,随机森林对 Bagging 只做了小改动 是与 Bagging 基学 习器的"多样性" 仅通过样本扰动(通过对初始训练集采样)而来不同,随机森林中基学习器的多样性不仅来自样本扰动,还来自属性扰动,这就使得最终 成的泛化性能可通过个体 习器之间差异度的增加而进一步提升.

sklearn中,随机森林相关API:

import sklearn.ensemble as se

model = se.RandomForestRegressor(
    max_depth, # 决策树最大深度
    n_estimators, # 决策树数量
    min_samples_split)# 子表中最小样本数 若小于这个数字,则不再继续向下拆分
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值