计算机系统应用教程网站

网站首页 > 技术文章 正文

「五分钟机器学习」集成学习——Ensemble Learning

btikc 2024-10-01 08:43:58 技术文章 12 ℃ 0 评论

大家好,我是爱讲故事的某某某。 欢迎来到今天的【五分钟机器学习】专栏内容:集成学习——Ensemble Learning

今天的内容将介绍这类算法的分类,以及每个类别中的典型算法。本期专栏的主要内容有3:

  1. Bagging (Bootstrap Aggregation) —— 随机森林Random Forest
    【五分钟机器学习】随机森林(RandomForest):看我以弱博强
  2. Boosting —— 自适应增强Adaboost(Adaptive Boosting)
    【五分钟机器学习】Adaboost:前人栽树后人乘凉
  3. Model Stacking —— 模型堆叠

Bagging (Bootstrap Aggregation) 随机森林Random Forest

在上一期视频【五分钟机器学习】随机森林(RandomForest):看我以弱博强中,我们介绍了这个算法的基本逻辑以及主要优缺点还没有看过的小伙伴欢迎去补番。

Bagging算法是集成学习中一种典型的算法。这类算法可与其他分类、回归算法结合,提高其准确率、稳定性的同时,通过降低结果的方差,避免过拟合的发生。

给定一个大小为N个样本D个特征(feature)的数据集Dataset, Bagging算法从中均匀、有放回地(即随机抽样法)选出n个样本且每个样本包含d个特征的子集,作为新的训练集。这样重复m次,对于每一次的随机采样,都在子训练集上使用分类、回归等算法,则可得到m个模型。再通过取平均值、取众数等方法,即可得到Bagging的结果。

随机森林就是一种典型的Bagging类算法。如视频中所述,随机森林的主要特点在于,他可以很大程度的利用若干个Weak Learner,从而实现很不错的模型输出。由于他的随机采样的特点,保证了在训练每个Weak Learner时的训练集不同, 从而保证看问题的角度不同。最终当我们从不同的模型中分别得到了结果,将他们整合在一起就可以得到了最终较为全面的结果。并且,由于模型最后的整合会包含不同看问题角度的结果,意味着他很难overfit,并且对于噪音点或者异常点outlier也不是那么敏感。

假如我们的训练集包含了N个样本(Sample),每个样本被D个特征(feature)所描述,那训练一个随机森林主要分为以下几个步骤:

  1. 预设模型的超参数,比如森林中有多少树 (Num of Learners),每棵树最多几层深度(Max Depth)等。
  1. 为了训练每个决策树,我们从完整的数据集(N 个样本,D个feature)中随机采样,选取n个样本,d 个feature,从而保证每个决策树看问题的角度都不一样。然后根据每次采样,训练一个决策树
    比如Fig1 中表示了我们的训练集(Training Set),Fig2~4 表示了对于每棵树随机采样后的数据集
  1. 当每个决策树都完成了训练,输入待测样本集(Test Set),我们再把最后每个树的测试结果整合在一起。对于regression问题,我们通常采用均值的方法将所有结果整合;对于classification问题,我们通常采用mode,即找到所有输出中最多的类别当做最终的输出。
    比如上面的例子是Classification,那么最后可能三棵树的输出分别是[Yes, No, Yes]。那么我们取众数的结果就会使Label = Yes。
    相对应的,如果是Regression,那么最后可能三棵树的输出分别是[0.7, 0.5, 0.9]。那么我们取众数的结果就会使y_pred= (0.7+0.5+0.9)/3 = 0.7。

以上就是训练随机森林的一个例子。


Boosting —— 自适应增强Adaboost(Adaptive Boosting)

由于Bagging类型算法的输出往往采用众数,或者均值进行整合,同时模型内部也没有对于困难样本点(Hard Samples即难以用Weak Learner 得到正确结果的样本)有特定的处理方法,这会导致这类模型的最后输出往往过于General,也就是Bagging类模型的天花板不高。

为了解决这类问题,在上一期视频【五分钟机器学习】Adaboost:前人栽树后人乘凉中,我们介绍了Adaboost算法的基本逻辑以及主要优缺点还没有看过的小伙伴欢迎去补番。

这类模型往往遵守一种顺序训练的结构,使后续训练的模型会专注于解决之前模型无法处理的困难样本点Hard Samples,从而使整个模型的性能有所提高。

这类模型中一个典型的例子就是Adaboost。训练这个模型的具体步骤如下:

  1. 预设模型的超参数,比如模型中有多少Weak Learners, Weak Learner的种类(Linear regression?Decision Tree?...),学习度Learning Rate等。
  2. 初始化每个样本的困难度(Sample Weight)为1/N
  1. 从第一个Learner开始训练,训练后分析哪些是Easy Sample,哪些是Hard Sample (看训练集中哪些样本被正确学习)。对于前者,减小样本的困难度,对于后者增加样本的困难度。
  1. 计算当前的错误率(Mis-classification rate),根据错误率计算当前Weak Learner的Voting Power(权值)。
  1. 重复3,4,直到到达了预设置的弱分类器的数量。

这时候,我们结束了Adaboost的训练。当我们需要测试Test Set时,我们把Test Set输入到每个Weak Learner中,会得到不同的输出 f_k。最后我们根据下面公式总结出模型的最终输出:

需要注意的是,这里介绍的Adaboost算法其实不是最初的版本。最初始的Adaboost版本是在模型训练开始之前,提前找好了许多个完成训练的Weak Learner组成一个Learner Set。然后再在每个回合中,从这个Learner Set中选择可以使当前回合的错误率(Mis-Classificaiton Rate)最低的Learner,也就是最适合当前回合中的Learner。但是由于这个方法在正式开始训练之前就需要大量的计算量(去训练每个Learner),所以训练速度很慢,也逐渐被视频中和上文提到的方法所代替。

不同于Bagging类的算法,这类算法由于每一个后置的weak learner都建立在前一个的基础上,从而可以更专注于解决之前无法解决的问题,使模型的整体性能逐步提高。而且相对于Random Forest算法,AdaBoost充分考虑的每个分类器的权重,而不是简单粗暴的将每个weak learner 的输出用均值整合为一个。这意味着,对于复杂问题,模型的最终结果会比随机森林高。

但他的主要缺点在于过分追逐于解决困难问题,往往会导致模型overfit的同时,也会导致模型整体对于异常样本点outliers过分敏感,从而拉低了模型的性能起点。即模型的性能天花板高,但是起点也很低。

下图是一个典型的Adaboost 的训练例子。可以看到每个Weak Classifier都有独特的任务,从而将他们绑在一起,就可以完成一个很复杂的分类任务。


Model Stacking —— 模型堆叠

在Ensemble Learning 类的算法中,还有一类简单粗暴的算法,即Model Stacking。这类模型里往往可以包含很多个不同种类的Learner,从而实现更多看问题的角度,使模型不止关注与EasySample,也关注HardSample,从而使整体模型性能提高。

简单说,Stacking 就是在不同模型预测得到的结果上,再训练一个模型将他们整合在一起。即将原有的模型上再堆叠另一个模型。

举个例子,对于一个分类数据库,你训练了三种不同的分类器,逻辑回归,决策树,SVM。然后你将这3个分类器的输出当做之后Stacking的Feature输入,再训练一个Model,比如神经网络(NeuralNetwork),去得到最后的预测结果。

这样做的原因在于,不同的模型能够提取数据中不同的信息。每个模型都有每个模型的特长和弱点,而我们将不同模型的结果捆绑再学习,会弱化每个模型的缺点,从而得到一个完美的预测结果。Stacking 能够把各个模型在提取特征较好的部分给抓取出来,同时舍弃各自表现不好的部分,这就能够有效地优化预测结果、提高最终预测的分数了。


以上就是今天的【五分钟机器学习】集成学习——Ensemble Learning的主要内容了。

如果你觉得本期内容有所帮助,欢迎素质三连。

您的支持将是我继续发电的最大动力~

我是某某某

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表