《百面机器学习》读书笔记(十二)-集成学习

全部笔记的汇总贴:《百面机器学习》-读书笔记汇总

面对一个机器学习问题,通常有两种策略。一种是研发人员尝试各种模型,选择其中表现最好的模型做重点调参优化。这种策略类似于奥运会比赛,通过强强竞争来选拔最优的运动员,并逐步提高成绩。另一种重要的策略是集各家之长,如同贤明的君主广泛地听取众多谋臣的建议,然后综合考虑,得到最终决策。后一种策略的核心,是将多个分类器的结果统一成一个最终的决策。使用这类策略的机器学习方法统称为集成学习。其中的每个单独的分类器称为基分类器。

一、集成学习的种类

集成学习是一大类模型融合策略和方法的统称,其中包含多种集成学习的思想。

  • ★☆☆☆☆ 集成学习分哪几种?他们有何异同?
  • Boosting

Boosting方法训练基分类器时采用串行的方式,各个基分类器之间有依赖。
它的基本思路是将基分类器层层叠加,每一层在训练的时候,对前一层基分类器分错的样本,给予更高的权重。测试时,根据各层分类器的结果的加权得到最终结果。
Boosting的过程很类似于人类学习的过程,我们学习新知识的过程往往是迭代式的,第一遍学习的时候,我们会记住一部分知识,但往往也会犯一些错误,对于这些错误,我们的印象会很深。第二遍学习的时候,就会针对犯过错误的知识加强学习,以减少类似的错误发生。不断循环往复,直到犯错误的次数减少到很低的程度。

  • Bagging

Bagging与Boosting的串行训练方式不同,Bagging方法在训练过程中,各基分类器之间无强依赖,可以进行并行训练。其中很著名的算法之一是基于决策树基分类器的随机森林(Random Forest)。为了让基分类器之间互相独立,将训练集分为若干子集(当训练样本数量较少时,子集之间可能有交叠)。Bagging方法更像是一个集体决策的过程,每个个体都进行单独学习,学习的内容可以相同,也可以不同,也可以部分重叠。但由于个体之间存在差异性,最终做出的判断不会完全一致。在最终做决策时,每个个体单独作出判断,再通过投票的方式做出最后的集体决策。
我们再从消除基分类器的偏差和方差的角度来理解Boosting和Bagging方法的差异。基分类器,有时又被称为弱分类器,因为基分类器的错误率要大于集成分类器。基分类器的错误,是偏差和方差两种错误之和。偏差主要是由于分类器的表达能力有限导致的系统性错误,表现在训练误差不收敛。方差是由于分类器对于样本分布过于敏感,导致在训练样本数较少时,产生过拟合。
Boosting方法是通过逐步聚焦于基分类器分错的样本,减小集成分类器的偏差。Bagging方法则是采取分而治之的策略,通过对训练样本多次采样,并分别训练出多个不同模型,然后做综合,来减小集成分类器的方差。假设所有基分类器出错的概率是独立的,在某个测试样本上,用简单多数投票方法来集成结果,超过半数基分类器出错的概率会随着基分类器的数量增加而下降。
《百面机器学习》读书笔记(十二)-集成学习_第1张图片

二、集成学习的步骤和例子

  • ★★☆☆☆ 集成学习有哪些基本步骤?请举几个集成学习的例子

集成学习一般可分为以下3个步骤。

  • 找到误差互相独立的基分类器。
  • 训练基分类器。
  • 合并基分类器的结果。

《百面机器学习》读书笔记(十二)-集成学习_第2张图片
《百面机器学习》读书笔记(十二)-集成学习_第3张图片

三、基分类器

  • ★☆☆☆☆ 常用的基分类器是什么?

最常用的基分类器是决策树,主要有以下3个方面的原因。

  • 决策树可以较为方便地将样本的权重整合到训练过程中,而不需要使用过采样的方法来调整样本权重。
  • 决策树的表达能力和泛化能力,可以通过调节树的层数来做折中。
  • 数据样本的扰动对于决策树的影响较大,因此不同子样本集合生成的决策树基分类器随机性较大,这样的“不稳定学习器”更适合作为基分类器。此外,在决策树节点分裂的时候,随机地选择一个特征子集,从中找出最优分裂属性,很好地引入了随机性。

除了决策树外,神经网络模型也适合作为基分类器,主要由于神经网络模型也比较“不稳定”,而且还可以通过调整神经元数量、连接方式、网络层数、初始权值等方式引入随机性。

  • ★★☆☆☆ 可否将随机森林中的基分类器,由决策树替换为线性分类器或K-近邻?请解释为什么?

随机森林属于Bagging类的集成学习。Bagging的主要好处是集成后的分类器的方差,比基分类器的方差小。Bagging所采用的基分类器,最好是本身对样本分布较为敏感的(即所谓不稳定的分类器),这样Bagging才能有用武之地。线性分类器或者K-近邻都是较为稳定的分类器,本身方差就不大,所以以它们为基分类器使用Bagging并不能在原有基分类器的基础上获得更好的表现,甚至可能因为Bagging的采样,而导致他们在训练中更难收敛,从而增大了集成分类器的偏差。

四、偏差与方差

  • ★★☆☆☆ 什么是偏差和方差?

在有监督学习中,模型的泛化误差来源于两个方面——偏差和方差,具体来讲偏差和方差的定义如下:

  • 偏差指的是由所有采样得到的大小为m的训练数据集训练出的所有模型的输出的平均值和真实模型输出之间的偏差。偏差通常是由于我们对学习算法做了错误的假设所导致的,比如真实模型是某个二次函数,但我们假设模型是一次函数。由偏差带来的误差通常在训练误差上就能体现出来。
  • 方差指的是由所有采样得到的大小为m的训练数据集训练出的所有模型的输出的方差。方差通常是由于模型的复杂度相对于训练样本数m过高导致的,比如一共有100个训练样本,而我们假设模型是阶数不大于200的多项式函数。由方差带来的误差通常体现在测试误差相对于训练误差的增量上。

上面的定义很准确,但不够直观,为了更清晰的理解偏差和方差,我们用一个射击的例子来进一步描述这二者的区别和联系。假设一次射击就是一个机器学习模型对一个样本进行预测。射中靶心位置代表预测准确,偏离靶心越远代表预测误差越大。我们通过n次采样得到n个大小为m的训练样本集合,训练出n个模型,对同一个样本做预测,相当于我们做了n次射击,射击结果如图所示。我们最期望的结果就是左上角的结果,射击结果又准确又集中,说明模型的偏差和方差都很小;右上图虽然射击结果的中心在靶心周围,但分布比较分散,说明模型的偏差较小但方差较大;同理,左下图说明模型方差较小,偏差较大;右下图说明模型方差较大,偏差也较大。
《百面机器学习》读书笔记(十二)-集成学习_第4张图片

  • ★★★☆☆ 如何从减小方差和偏差的角度解释Boosting和Bagging的原理?

Bagging能够提高弱分类器性能的原因是降低了方差,Boosting能够提升弱分类器性能的原因是降低了偏差。
首先,Bagging 是 Bootstrap Aggregating 的简称,意思就是再抽样,然后在每个样本上训练出来的模型取平均。
假设有 n n n个随机变量,方差记为 σ 2 σ^2 σ2,两两变量之间的相关性为 ρ ρ ρ,则 n n n个随机变量的均值 ∑ X i n \frac{\sum X_i}{n} nXi的方差为 p ∗ σ 2 + ( 1 − p ) ∗ σ 2 / n p^*\sigma^2+(1-p)^*\sigma^2/n pσ2+(1p)σ2/n。在随机变量完全独立的情况下, n n n个随机变量的方差为 σ 2 n \frac{\sigma^2}n nσ2,也就是说方差减小到了原来的 1 n \frac1n n1
再从模型的角度理解这个问题,对n个独立不相关的模型的预测结果取平均,方差是原来单个模型的 1 n \frac1n n1。这个描述不甚严谨,但原理已经讲得很清楚了。当然,模型之间不可能完全独立。为了追求模型的独立性,诸多Bagging的方法做了不同的改进。比如在随机森林算法中,每次选取节点分裂属性时,会随机抽取一个属性子集,而不是从所有属性中选取最优属性,这就是为了避免弱分类器之间过强的相关性。通过训练集的重采样也能够带来弱分类器之间的一定独立性,从而降低Bagging后模型的方差。
再看Boosting,大家应该还记得Boosting的训练过程。在训练好一个弱分类器后,我们需要计算弱分类器的错误或者残差,作为下一个分类器的输入。这个过程本身就是在不断减小损失函数,来使模型不断逼近“靶心”,使得模型偏差不断降低。但Boosting的过程并不会显著降低方差。这是因为Boosting的训练过程使得各弱分类器之间是强相关的,缺乏独立性,所以并不会对降低方差有作用。
关于泛化误差、偏差、方差和模型复杂度的关系如图所示。不难看出,方差和偏差是相辅相成,矛盾又统一的,二者并不能完全独立的存在。对于给定的学习任务和训练数据集,我们需要对模型的复杂度做合理的假设。如果模型复杂
度过低,虽然方差很小,但是偏差会很高;如果模型复杂度过高,虽然偏差降低了,但是方差会很高。所以需要综合考虑偏差和方差选择合适复杂度的模型进行训练。
在这里插入图片描述

五、梯度提升决策树的基本原理

  • ★★☆☆☆ GBDT的基本原理是什么?

相比于Bagging中各个弱分类器可以独立地进行训练,Boosting中的弱分类器需要依次生成。在每一轮迭代中,基于已生成的弱分类器集合(即当前模型)的预测结果,新的弱分类器会重点关注那些还没有被正确预测的样本。
Gradient Boosting是Boosting中的一大类算法,其基本思想是根据当前模型损失函数的负梯度信息来训练新加入的弱分类器,然后将训练好的弱分类器以累加的形式结合到现有模型中。算法1描述了Gradient Boosting算法的基本流程,在每一轮迭代中,首先计算出当前模型在所有样本上的负梯度,然后以该值为目标训练一个新的弱分类器进行拟合并计算出该弱分类器的权重,最终实现对模型的更新。
《百面机器学习》读书笔记(十二)-集成学习_第5张图片

  • ★★☆☆☆ 梯度提升和梯度下降的区别和联系是什么?

《百面机器学习》读书笔记(十二)-集成学习_第6张图片

  • ★★☆☆☆ GBDT的优点和局限性有哪些?
  • 优点
  • 预测阶段的计算速度快,树与树之间可并行化计算。
  • 在分布稠密的数据集上,泛化能力和表达能力都很好,这使得GBDT在Kaggle的众多竞赛中,经常名列榜首。
  • 采用决策树作为弱分类器使得GBDT模型具有较好的解释性和鲁棒性,能够自动发现特征间的高阶关系,并且也不需要对数据进行特殊的预处理如归一化等。
  • 局限性
  • GBDT在高维稀疏的数据集上,表现不如支持向量机或者神经网络。
  • GBDT在处理文本分类特征问题上,相对其他模型的优势不如它在处理数值特征时明显。
  • 训练过程需要串行训练,只能在决策树内部采用一些局部并行的手段提高训练速度。

六、XGBoost与GBDT的联系和区别

  • ★★★☆☆ XGBoost与GBDT的联系和区别有哪些?

《百面机器学习》读书笔记(十二)-集成学习_第7张图片
《百面机器学习》读书笔记(十二)-集成学习_第8张图片
除了算法上与传统的GBDT有一些不同外,XGBoost还在工程实现上做了大量的优化。总的来说,两者之间的区别和联系可以总结成以下几个方面。

  • GBDT是机器学习算法,XGBoost是该算法的工程实现。
  • 在使用CART作为基分类器时,XGBoost显式地加入了正则项来控制模型的复杂度,有利于防止过拟合,从而提高模型的泛化能力。
  • GBDT在模型训练时只使用了代价函数的一阶导数信息,XGBoost对代价函数进行二阶泰勒展开,可以同时使用一阶和二阶导数。
  • 传统的GBDT采用CART作为基分类器,XGBoost支持多种类型的基分类器,比如线性分类器。
  • 传统的GBDT在每轮迭代时使用全部的数据,XGBoost则采用了与随机森林相似的策略,支持对数据进行采样。
  • 传统的GBDT没有设计对缺失值进行处理,XGBoost能够自动学习出缺失值的处理策略。

下一章传送门:《百面机器学习》读书笔记(十三)-生成式对抗网络

你可能感兴趣的:(#,The,Quest,for,ML,读书笔记,集成学习,机器学习,百面机器学习)