5.1-集成学习

发布于:2023-01-22 ⋅ 阅读:(431) ⋅ 点赞:(0)

集成框架(Framework of Ensemble)

一、 Ensemble: Bagging

  • Bagging做的事情就是创造出不同的数据集,再用不同的数据集各自训练一个复杂的模型,虽然每一个模型单独拿出来看方差(Variance)都很大,但把所有的模型集合起来求平均之后,就会得到一个方差很小,偏置值也很小的理想模型。
  • 第一件事就是创造出不同的数据集,首先我们对原数据集进行随机抽样得到多个不一样的数据集。如果是回归问题,我们就采用平均(Average)的方法,如果是分类的问题,我们就采取投票(Average)的方法。
  • 那什么时候做Bagging呢?只有在你的模型很复杂,担心他过拟合时才做Bagging,因为做Bagging的目的就是为了降低Variance。

image-20220810105022134image-20220810105035979

1.1 决策树(Decision Tree)

  • 决策树就是一个非常需要做Bagging的方法,因为它十分容易过拟合。随机森林就是决策树做Bagging后的版本。
  • 做决策树需要注意的地方:
    • 需要多少分支
    • 要用什么样的标准来做分支
    • 什么时候停止分支…
  • 右图是决策树的一个示例,只要深度够深,我们就可以将错误率降到0

image-20220810105639989image-20220810110212223

image-20220810110340171

1.2 随机森林(Random Forest)

  • 做随机森林时光采取随机采样是不够的,还要在每次产生决策树的分支时都随机决定哪些特征是不能用的。这样才能保证即使用的是同一个数据集里产生出来的决策树也是不一样的,最后将所有的决策树集合起来就得到随机森林。
  • out-of-bag:如果使用bagging的方法,那么我们可以不用将数据集切分成训练集和验证集,但是一样有验证的效果。如左图表格,f2和f4并没有看到过x1这笔数据,那么我们就可以拿x1这笔数据来验证我们的模型f2和f4,最终计算4个模型的平均误差。

image-20220810151308067image-20220810152742248

二、Ensemble: Boosting

  • Bagging是应用在一些很强的模型上来解决过拟合的问题,而Boosting是应用在一些很弱的模型上来解决欠拟合的问题。

2.1 寻找不同的分类器

  • boosting的原理是首先找到第一个分类器f1(x),然后找到一个与f1(x)互补的分类器f2(x),也就是f2(x)与f1(x)的相似度要尽可能的低,接下来找到一个与f2(x)互补的分类器f3(x),就这样一直找下去,我们会得到一个分类器的集合,将他们线性组合起来就得到了我们最终的分类器。
  • 找分类器这件事是有顺序的,必须找到前一个才能开始找下一个,不能并行执行。
  • 右图介绍了如何通过给每一笔数据集一个权重un来训练生成不同的分类器,其评估函数loss相比普通的loss也只是多乘上了一个权重un

image-20220810153414029image-20220810153429417

2.2 Adaboost

  • 如左图,首先调整训练集的权重un,找到一组训练集让f1(x)的正确率只有50%,再用这笔训练集去训练生成f2(x)。
  • 具体原理如右图,就是让模型f1(x)在权重一样的训练集上进行训练,训练结束后降低回答正确的训练集权重u1,u3,u4,提高回答错误的训练集权重u2,这样就可以找到一组训练集让f1(x)的正确率只有50%

image-20220810154930843image-20220810161140052

  • 下面是Adaboost的算法推导过程

image-20220810161918193image-20220810161953703

image-20220810162138131image-20220810162541906

image-20220810173446433
  • 下面是通过Adaboost找到三个较弱的分类器,最终组成一个强大的分类器的过程。

image-20220810173709691image-20220810173721590

image-20220810173736467image-20220810173755063

2.3 数学推导

  • α t \alpha_t αt代表每个分类器的权重,一共有 f 1 . . . f t f_1...f_t f1...ft共计 t 个分类器,随着 T 数量的增加,我们的误差会变得越来越小。

image-20220810174035058image-20220810182703353

image-20220810182727928image-20220810182816372

2.4 边界(Margin)

  • 根据左图可以很清晰的看到Margin的表达式,以及分类器的数量越多,Margin越大,在测试集上的表现越好。

image-20220810183508413image-20220810183523706

  • 下图是Adaboost+决策树的表现,树的深度为5,当树的数量达到100时,就可以很好的绘制出初音的轮廓了。这是之前使用Bagging,随机森林都无法做到的事情。
image-20220810183908038

2.5 Gradient Boosting

  • 下面是Boosting的一般表达式 gt(x) 的求解过程,根据最后一张图的结论可以看出Adaboost整件事情也是在做梯度下降,只是求梯度的不是一个参数,而是一个函数 g(x) 。并且 Adaboost的目标函数可以任意更改。

image-20220811085010217image-20220811085052294

image-20220811085557403image-20220811085653025

三、Ensemble: Stacking

  • 将大家做的模型都组合起来,这就需要一个最终的分类器为大家的模型赋予不同的权重,为了防止小明等人的模型是过拟合而获得较高的权重,就需要准备两笔训练集。一笔用来训练小明等人的模型,一笔用来训练最终的分类器。

image-20220811090747408image-20220811090801568

本文含有隐藏内容,请 开通VIP 后查看