集成学习基础与实战

集成学习通过构建多个分类器来提升预测效果,避免单个模型过拟合。主要算法包括Bagging(如随机森林)和Boosting(如AdaBoost)。随机森林通过Bootstrap采样和随机选择特征创建多样性,提高分类准确性和泛化能力。AdaBoost则重视错误分类样本,提高其权重,让后续分类器更加关注。这两个算法都在Sklearn中有实现,可用于实际项目中的分类问题。

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

集成学习基础与实战

1. 为什么学习集成学习

单颗决策树算法容易产生过拟合,所以我们提出集成学习,其中的随机森林算法,可以通过多棵树的方案解决单颗树的过拟合问题,解决实际工作中常见分类问题

2. 什么是集成学习

传统机器学习算法 (例如:决策树,逻辑回归等) 的目标都是寻找一个最优分类器尽可能的将训练数据分开。集成学习 (Ensemble Learning) 算法的基本思想就是将多个分类器组合,从而实现一个预测效果更好的集成分类器。集成算法可以说从一方面验证了中国的一句老话:三个臭皮匠,赛过诸葛亮

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ApcNC6ks-1633917323889)(images/2021-1.png)]

集成学习通过建立几个模型来解决单一预测问题。它的工作原理是生成多个分类器/模型,各自独立地学习和作出预测。这些预测最后结合成组合预测,因此优于任何一个单分类的做出预测。

集成算法大致可以分为:BaggingBoostingStacking等类型。

3. 集成学习分类的串行和并行学习算法

集成学习算法一般分为:bagging、boosting和Stacking。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JvaiNMlj-1633917323891)(./images/2021-2.png)]

随机森林是集成模型中的一种,常言道:“一个篱笆三个桩,一个好汉三个帮”。集成分类模型便是综合考量多个分类器的预测结果,从而做出决策,集成学习分两种:

(1)利用相同的训练数据同时搭建多个独立的分类模型,然后通过投票的方式,以少数服从多数的原则做出最终的分类决策。今天学习的Bagging(随机森林)算法就是这种方式,即在相同训练数据上同时搭建多颗决策树

在决策树中学到过一颗标准的决策树是根据每维特征对预测结果的影响程度进行排序,进而决定不同特征从上到下构建分裂节点的顺序;如果这里还按照这种方式随机森林会因为这一策略影响而构建的所有树都一致,从而丧失了多样性。因此随机森林在构建的过程中,每一颗决策树都会放弃这一个固定的算法,转而随机选取特征。

(2)按一定的次序搭建多个分类模型。这些模型之间彼此存在依赖关系。一般后一个模型的加入都需要对现有的集成模型有一定贡献,进而不断提高更新过后的集成模型性能,并借助多个弱分类器搭建出强分类器。代表有Boosting(AdaBoost)算法。该算法与第一种的随机森林主要区别在于每一颗决策树在生成的过程中都会尽可能降低模型在训练集上的拟合或训练误差。

3.1 集成学习关键要素

俗话说:“三个臭皮匠赛过诸葛亮”。

当使用某一种分类器不能使我们达到很好的效果的时候,我们不妨设想将这些分类效果不好的分类器组合一下,再去看看效果是否有提升,这就是集成学习的思想。

集成算法(Ensemble Learning)思想:通过构建并结合多个学习器来完成学习任务,有时候我们也叫作“多分类器系统”。如下图C1,C2都是某一种个体的分类器,我们采用某种策略将他们组合起来。

我们有10个分类器,多数表决如下图,其中三角形、正方形或圆分别代表一个类别。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VyUrjFRF-1633917323893)(./images/2021-3.png)]

个体的分类器由一个现有的学习算法从训练数据产生,例如:C4.5决策树算法,我们一般把个体分类器全部为同种的分类器称为“同质的”,如全部为决策树模型。同质的集成学习中的个体学习器称为“基学习器(base learner)”,相应的算法称为基学习算法。反之,集成中包含不同种的学习器,我们称之为“异质”的,异质集成中的个体学习器包含不同的学习算法组成的,这种情况下的学习器称为“组合学习器”。相信这些名词大家能够了解。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xdWoCyHy-1633917323894)(./images/2021-4.png)]

​ 图1: 集成学习的系统示意图

集成学习通过将多个学习器组合,常获得比单一学习器显著优越的泛化性能。这对弱学习器特别明显,这里的弱学习器我们一般会使用决策树,BP神经网络和逻辑回归,有时候SVM也可以作为个体学习器。

下图是使用多数投票法通用集成方法的概念:

image-20210701195029727

3.2 集成学习器性能评估

一般经验中如果把好坏不等的东西掺到一起,通常结果会比最坏的好一些,比最好的坏一些。集成学习把多个学习器结合起来,如何获得比最好的单一学习器更好的性能呢?

考虑一个例子:二分类问题中,假定三个分类器在三个测试样本上表现,如下图所示。打对勾的表示正确分类,打叉号的表示分类错误。集成学习的结果通过投票法voting产生。即少数服从多数。第一个图中每个分类器有66.6%的精度,但集成学习却达到了100%。第二个图中三个分类器没有差别,但是集成之后性能却没有什么提高。第三幅图中每个分类器的精度都只有33.3%,集成学习的结果更糟糕。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KQG2WUcG-1633917323896)(./images/2021-6.png)]

这个例子我们可以总结出:要获得好的集成,个体学习器应有一定的准确性,即学习器不能太坏,并且要有“多样性”,即学习器之间具有差异

4. 集成学习分类之Bagging算法

Bagging (Boostrap Aggregating) 是由 Breiman 于 1996 年提出。

4.1 Bootstrap sampling自助采样

之前的课程已经讲过模型的评估方法中有留一法(将数据集划分为两个互不相交的集合,一个做测试集,一个做训练集)和交叉验证方法(将数据分成k个大小相似互不相交的子集,每次使用k-1个子集做训练集,剩下的一个子集做测试集,以此循环进行k次的训练和测试,最后返回k次测试结果的均值。)。但是上述两种方法中都保留了一部分样本用于测试,所以实际模型所使用的训练集比源数据都要小,因此就会引入一些因训练样本规模不同而导致的估计偏差。另外一方面留一法受训练样本影响较小,但是计算复杂度又太高。因此为了解决减少训练样本规模不同造成的影响,同时还能比较高效地进行测试集的评估。自助法就是很好的解决方案。

booststrap抽样

在样本集D(样本数为m)内有放回的抽样,抽取数为m,每次抽取的概率相等为1/m,可能重复抽取。我们做一个简单的估计,样本m次采样中不被采样的概率为

image-20210701195213218

**取极限得到原数据集D中36.8%的样本没有出现在采样数据集D1中。**我们可以使用D1作为训练集,D-D1作为测试集。这样实际评估的模型与期望的模型都使用m个训练样本,而我们仍有数据总量的1/3的,没有在训练集中出现的样本用于测试。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KkBefcdd-1633917323896)(./images/2021-8.png)]

4.2 Bagging算法

此算法没有使用相同的训练集拟合集成分类器中的单个分类器,而是采用了Bootstrap有放回抽样选取训练数据集。

image-20210701195345794

下图有7个不同的训练样例,每一轮的bagging循环中,样本数据均可放回随机抽样,每个bootstrip抽样都是被用于分类器C的训练,这就是一颗典型的未剪枝的决策树。

随机森林是bagging的特例,它使用了随机特征子集去拟合单颗决策树。

img

4.3 算法流程

img

Bagging基本流程:通过上述自助采样,采出T个含m个训练样本的采样集,然后基于每个采样集训练出一个基学习器,在将这些基学习器进行组合。

在对预测输出进行结合的时候,Bagging通常对分类任务使用简单投票法,对回归任务进行简单的平均法。但是如果投票个数一致,则最简单的做法是随机选择一个类别,当然也可以进一步考察学习器投票的置信度来确定最终的分类。

案例:把下面的圈和方块进行分类

img

4.4 算法图解分析

img

基本分类器可以是决策树逻辑回归等基分类器。

对于稳定性不好的分类器很实用,通过多数投票,减小了泛化误差,而对于稳定的分类器,集成效果并不明显。

4.5 Bagging性能

(1)Bagging是一个很高效的集成学习算法

(2)Bagging与下面讲的AdaBoost只适用于二分类不同,它能不经修改地用于多分类、回归任务

(3)自助bootstrap采样过程还给Bagging带来了另一个优点:由于每个基学习器只使用了初始训练集中约63.2%的样本,剩下的约36.8%样本可用作验证集来泛化性能进行“包外样本评估(即:不同于训练数据的样本)”。

(4)从偏差-方差分解角度看,Bagging主要关注降低方差,因此它在不剪枝决策树、神经网络等易受样本扰动的学习器上效果更为明显。

4.6 Bagging算法总结

Bagging算法首先采用M轮自助采样法,获得M个包含N个训练样本的采样集。然后,基于这些采样集训练出一个基学习器。最后将这M个基学习器进行组合。组合策略为:

  • 分类任务采用简单投票法:即每个基学习器一票
  • 回归问题使用简单平均法:即每个基学习器的预测值取平均值。

5. 集成学习分类之随机森林算法详解

随机森林就是建立很多决策树,组成一个决策树的“森林”,通过多棵树投票来进行决策。这种方法能够有效地提高对新样本的分类准确度。

随机森林在以决策树为基学习器构建Bagging集成(样本的随机选取)的基础上,进一步在决策树的训练过程中引入随机属性选择。具体来说,传统决策树在选择划分属性时是在当前节点的属性集合(假设有d个属性)中选择一个最优属性;而在RF随机森林中,对基决策树的每个节点,先从该节点的属性集合中随机选择一个包含K个属性的子集,然后在从这个子集中选择一个最优属性用于划分。K=d就是传统决策树,K=1则是随机选取一个属性用于划分,一般情况image-20210701195716420

5.1 集成学习分类之随机森林的步骤

img

如上图:

首先,对样本数据进行有放回的抽样,得到多个样本集。具体来讲就是每次从原来的N个训练样本中有放回地随机抽取N个样本(包括可能重复样本)。

然后,从候选的特征中随机抽取m个特征,作为当前节点下决策的备选特征,从这些特征中选择最好地划分训练样本的特征。用每个样本集作为训练样本构造决策树。单个决策树在产生样本集和确定特征后,使用CART算法计算,不剪枝。

最后,得到所需数目的决策树后,随机森林方法对这些树的输出进行投票,以得票最多的类作为随机森林的决策。

说明:

(1)随机森林的方法即对训练样本进行了采样,又对特征进行了采样,充分保证了所构建的每个树之间的独立性,使得投票结果更准确。

img

(2)随机森林的随机性体现在每棵树的训练样本是随机的,树中每个节点的分裂属性也是随机选择的。有了这2个随机因素,即使每棵决策树没有进行剪枝,随机森林也不会产生过拟合的现象。

随机森林中有两个可控制参数:

  • 森林中树的数量(一般选取值较大)
  • 抽取的属性值m的大小。

思考

  1. 为什么要随机抽样训练集?

如果不进行随机抽样,每棵树的训练集都一样,那么最终训练出的树分类结果也是完全一样。

  1. 为什么要有放回地抽样?

如果不是有放回的抽样,那么每棵树的训练样本都是不同的,都是没有交集的,这样每棵树都是“有偏的”,都是绝对“片面的”(当然这样说可能不对),也就是说每棵树训练出来都是有很大的差异的;而随机森林最后分类取决于多棵树(弱分类器)的投票表决。

5.2 随机森林的特点总结

随机森林简单、容易实现、计算开销小,被誉为“代表集成学习计数水平的方法”。可以看出随机森林只是对Bagging做了很小的改动。Bagging的多样性只是体现在样本的随机性,随机森林的基学习器的多样性不仅来自于样本的随机性,还来自于属性的随机性。随机森林随着学习器数目的增加,随机森林通常会收敛到更低的泛化误差。

(1)分类结果更加准确

(2)可以处理高维度的属性,并且不用做特征选择

(3)即使有很大部分数据遗失,仍可以维持高准确度

(4)学习过程快速

(5)在训练完成后,能够给出哪些属性比较重要

(6)容易实现并行化计算

(7)在训练过程中,能够检测到属性之间的相互影响

5.3 随机森林的API

http://scikit-learn.org/0.17/modules/generated/sklearn.ensemble.RandomForestClassifier.html#sklearn.ensemble.RandomForestClassifier

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G7u2YDpf-1633917323897)(./images/wpswnkqj4.png)]

反应随机性的参数:

img img

方法:

img

5.4 随机森林的Sklearn实战

这里使用泰坦尼克号案例实战:

#1.数据导入
#1.1导入数据
import pandas as pd

#1.2.利用pandas的read.csv模块从互联网中收集泰坦尼克号数据集
titanic=pd.read_csv("data/titanic.csv")
titanic.info() #查看信息

#2人工选择特征pclass,age,sex
X=titanic[['pclass','age','sex']]
y=titanic['survived']

#3.特征工程
#数据的填补
X['age'].fillna(X
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值