【机器学习】集成学习知识点总结一

集成学习算法概述

严格意义上来说,集成学习算法不算是一种机器学习算法,而更像是一种优化手段或策略,它通常是结合多个简单的弱机器学习算法,去做更可靠的决策。有人把它称为机器学习中的“屠龙刀”,非常万能且有效。集成模型是一种能在各种机器学习任务上提高准确率的强有力技术,能够很好地提升算法的性能。

集成方法是由多个较弱的模型集成组成,一般弱分类器可以是决策树,SVM,KNN等构成。其中的模型可以单独进行训练,并且它们的预测能以某种方式结合起来去做出一个总体预测。该算法主要的问题是要找出哪些较弱的模型可以结合起来,以及如何结合的方法。

集成学习的主要框架

集成学习从集成思想的架构分为Bagging,Boosting,Stacking三种。

Bagging:基于数据随机重抽样的分类器构建方法。从训练集中进行子抽样组成每个基模型所需要的子训练集,对所有基模型预测的结果进行综合从而产生最终的预测结果。

Boosting:训练过程为阶梯状,基模型按次序一一进行训练(实现上可以做到一定程度上的并行),基模型的训练集按照某种策略每次都进行一定的转化(根据具体的方法不同,转化的方法不一样,如Adaboost为更改权重,GBDT为拟合残差(梯度)),最后对所有基模型预测的结果进行线性组合产生最终的预测结果。

Stacking:将训练好的所有基模型对训练集进行预测,第j个基模型对第i个训练样本的预测值将作为新的训练集中第i个样本的第j个特征值,最后基于新的训练集进行训练。同理,预测的过程也要先经过所有基模型的预测形成新的测试集,最后在对测试集进行预测。(移步集成学习之stacking

模型收到低偏差和高方差问题的困扰,应该如何解决

低偏差意味着模型的预测值接近实际值。换句话说,该模型有足够的灵活性,以模仿训练所有数据的分布。貌似很好,但是别忘了,一个过于灵活的模型是没有泛化能力的。这意味着,当这个模型用在对一个未曾见过的数据集进行测试的时候,它会令人很失望。

在这种情况下,我们可以使用bagging算法(如随机森林),以解决高方差问题。

bagging算法采用bootstrapping抽样策略,把数据集分成重复随机取样形成的子集。然后,这些样本利用单个学习算法生成一组模型。接着,利用投票(分类)或平均(回归)把模型预测结合在一起。

另外,为了应对高方差问题,还可以做一些其他的操作:

  1. 加入正则惩罚。
  2. 对树进行剪枝
  3. 使用可变重要性图表中的前n个特征。

其实防止过拟合的small trick还有许多,主要可以从数据集与模型两个角度出发。今后会作总结。

随机森林的随机性

  • 每棵树的训练样本是随机的。
  • 每棵树的训练特征集合也是随机从所有特征中抽取的。

随机森林为什么不容易过拟合

随机森林由很多树组合在一起,单看每一棵树都可以是过拟合的,但是,既然是过拟合,就会拟合到非常小的细节上,因此随机森林通过引入随机性,让每一棵树拟合的细节不同,这时再把这些树组合在一起,过拟合的部分就会自动被消除掉。

所以随机森林不容易过拟合,但这不是绝对的,随机森林也是有可能出现过拟合的现象,只是出现的概率相对低。

就好比人类社会,有计算机的专家,也有神经生物学的专家,还有一个天文学的专家,这就像三颗过拟合的树,对于各自领域性能都很优秀,但对于宗教这类知识,三个人都不是很懂。由于三个人都处在同一个社会中,在社会中长久下来也有或多或少的接触过这方面的知识,于是三个人可以通过综合判断,得出宗教方面的一些正确答案。

当在随机森林中,如果我们用了远大于需求个数的树,就会发生过拟合的现象。所以一般在构建随机森林时我们会使用oob袋外错误率来修正模型的结构。

使用随机森林去弥补特征向量中的缺失值

对于训练集中的缺失值,可以使用均值,0等方式进行预填充,然后使用随机森林分类,同一个分类下的数据,更新缺失值,如果是分类变量缺失,用众数补上,如果是连续型变量缺失,用中位数补上,然后再次使用随机森林分类更新缺失值,4-6轮后可以达到一个比较好的效果。

使用随机森林对特征重要性进行评估

详见集成学习ensemble之随机森林。利用了袋外错误率OOB来做决策。

随机森林算法训练时主要需要调整哪些参数

  1. n_estimators:随机森林建立子树的数量。较多的子树一般可以让模型有更好的性能,但同时会让代码变慢,严重的时候甚至还会导致过拟合!故需要通过交叉验证或者袋外错误率oob估计来选择最佳的随机森林子树数量。
  2. max_features:随机森林允许单个决策树使用特征的最大数量。增加max_features一般能提高模型的性能,因为在每个树节点上,我们有更多的选择可以考虑。然而,这未必完全是对的,因为它降低了单个树的多样性(泛化能力),但这正是随机森林的一大特点。可以肯定的是,增加max_features会降低算法的速度,同时还会使得模型更加容易过拟合,因此,我们需要适当的平衡和选择最佳的max_features。
  3. max_depth:决策树的最大深度。随机森林默认在决策树的建立过程中不会限制其深度,这也是随机森林的一大特点,其不必担心单棵树的过拟合。
  4. min_samples_split:内部节点再划分所需要的最小样本数。如果某节点的样本数少于min_samples_split,则不会继续再尝试选择最优特征来进行划分。
  5. min_samples_leaf:叶子节点最少样本数。这个值限制了叶子节点最少的样本数,如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝
  6. max_leaf_nodes:最大叶子节点数。通过限制最大叶子节点数,可以防止过拟合,默认是“None”,即不限制最大的叶子节点数。如果加了限制,算法会建立在最大叶子节点数内最优的决策树。
  7. min_impurity_split:节点划分最小不纯度。这个值限制了决策树的增长,如果某节点的不纯度(基于基尼系数,均方差,信息增益等)小于这个阈值,则该节点不再生成子节点。即为叶子节点。一般不推荐改动,默认值为1e-7。

概括一下,别看有整整7点,其实后5点全都是预剪枝的策略,在随机森林中,如果实在是为了防止过拟合等,可以采取预剪枝策略也就是上述的3-7方法。但对于随机森林这个模型而言,真正要调整的参数就n_estimators和max_features两个,而且在一般情况下,不需要怎么调就可以得到不错的结果。

随机森林为什么不能用全样本去训练m颗决策树

全样本训练忽视了局部样本的规律(各个决策树趋于相同),对于模型的泛化能力是有害的,使随机森林算法在样本层面失去了随机性。

随机森林算法的优缺点

优点

  1. 训练可以高度并行化性能普遍较好,对于大数据时代的大样本训练速度有优势。
  2. 随机森林对于高维数据集的处理能力令人兴奋,它可以处理成千上万的输入变量,并确定最重要的变量,因此被认为是一个不错的降维方法。此外,该模型能够输出变量的重要性程度,这是一个非常便利的功能!
  3. 在对缺失数据进行估计时,随机森林是一个十分有效的方法。就算存在大量的数据缺失,随机森林也能较好地保持精确性,一方面因为随机森林随机选取样本和特征,另一方面因为它可以继承决策树对缺失数据的处理方式。如果缺失数据的样本只是少量,随机森林甚至可以帮助去估计缺失值
  4. 由于采用了随机采样,训练出的模型的方差小,对generlization error(泛化误差)使用的是无偏估计模型,泛化能力强。
  5. 对于不平衡数据集来说,随机森林可以平衡误差。当存在分类不平衡的情况时,随机森林能提供平衡数据集误差的有效方法。(对正类和反类分别进行重采样或欠采样, 之后采用多数投票的方法进行集成学习。或者不做采样,调整类别的判定阈值。)
  6. 随机森林能够解决分类回归两种类型的问题,并在这两方面都有相当好的估计表现。(虽然RF能做回归问题,但通常都用RF来解决分类问题)。

缺点

  1. 随机森林在解决回归问题时,并没有像它在分类中表现的那么好,这是因为它并不能给出一个连续的输出。当进行回归时,随机森林不能够做出超越训练集数据范围的预测,这可能导致在某些特定噪声的数据进行建模时出现过度拟合。(PS:随机森林已经被证明在某些噪音较大的分类或者回归问题上会过拟合)。
  2. 对于许多统计建模者来说,随机森林给人的感觉就像一个黑盒子,你无法控制模型内部的运行。只能在不同的参数和随机种子之间进行尝试。
  3. 可能有很多相似的决策树,掩盖了真实的结果。
  4. 对于小数据或者低维数据(特征较少的数据),可能不能产生很好的分类(随机性大大降低了)。(处理高维数据,处理特征遗失数据,处理不平衡数据是随机森林的长处)。
  5. 执行数据虽然比boosting等快(随机森林属于bagging),但比单只决策树慢多了,且精度一般不如boosting方法。

Adaboost原理概述

Adaboost分类器就是一种元算法分类器,Adaboost分类器利用同一种基分类器(弱分类器),基于分类器的错误率分配不同的权重参数,同时根据每一次基分类器的预测结果对样本权重进行更新,最后累加加权的预测结果作为输出。

具体的算法流程请移步集成学习之boosting AdaBoost

Adaboost几个要点:

  • 基本模型的算法流程及推导
  • 训练误差界的推导
  • 二分类场景与多分类场景
  • Adaboost回归模型

Adaboost的优缺点

优点

  1. Adaboost提供一种框架,在框架内可以使用各种方法构建子分类器。可以使用简单的弱分类器,不用对特征进行筛选,也不存在过拟合的现象
  2. Adaboost算法不需要弱分类器的先验知识(如线性回归假定样本服从正态分布,LR假定样本服从伯努利分布),最后得到的强分类器的分类精度依赖于所有弱分类器。无论是应用于人造数据还是真实数据,Adaboost都能显著的提高学习精度。
  3. Adaboost算法不需要预先知道弱分类器的错误率上限(只需要确保弱分类器比随机猜测好上那么一点点就可以),且最后得到的强分类器的分类精度依赖于所有弱分类器的分类精度,可以深挖分类器的能力。Adaboost可以根据弱分类器的反馈,自适应地调整假定的错误率,执行的效率高。
  4. Adaboost对同一个训练样本集训练不同的弱分类器,按照一定的方法把这些弱分类器集合起来,构造一个分类能力很强的强分类器,即“三个臭皮匠赛过一个诸葛亮”。
  5. 用作特征选择,树模型的Adaboost统计每次弱树分类器中的特征分裂顺序,即可以得到特征的重要性排序。

从上面的几点中,我们可以总结得到:使用Adaboost模型我们甚至可以不需要脑子,精度高,泛化错误率低,对弱分类器没有限制。

缺点

  1. AdaBoost迭代次数也就是弱分类器数目不太好设定,可以使用交叉验证来进行确定。虽说Adaboost不易过拟合,但若迭代次数太多,依旧会导致过拟合,同时模型的训练速度会大大降低。
  2. 数据不平衡导致分类精度下降。(其实对于数据不平衡的情况,少有模型(目前没见到过)可以在不处理样本的基础上作出有效的评估。通常的做法都是要对数据集进行一些针对样本不平衡的处理,boosting模型在进行数据集的处理之后其实效果也还可以。)后面为个人理解:boosting算法是降低偏差,当数据不平衡时容易使得弱分类器对样本多的那一类过拟合,此时整个模型的精度会降低,而bagging方法则不会有太大影响。
  3. 对离群点敏感。在Adaboost训练过程中,Adaboost会使得难于分类样本的权值呈指数增长,训练将会过于偏向这类困难的样本,导致Adaboost算法易受噪声干扰。

Adaboost与随机森林算法的异同点

目前 bagging 方法最流行的版本是: 随机森林(random forest)
选男友:美女选择择偶对象的时候,会问几个闺蜜的建议,最后选择一个综合得分最高的或者投票最多的一个作为男朋友。

目前 boosting 方法最流行的版本是: AdaBoost
追女友:3个帅哥追同一个美女,第1个帅哥失败->(传授经验:姓名、家庭情况) 第2个帅哥失败->(传授经验:兴趣爱好、性格特点) 第3个帅哥成功。

这两种算法的相同之处:

  1. 都为集成模型,需要训练多个弱分类器,同时模型的性能都与弱分类器个数的选择有一定关系。
  2. 调参都较少,性能都较好,可以快速得到一个baseline。
  3. 都可以用作特征选择。

区别:

  1. bagging 中的分类器权重是相等的;而 boosting 中的分类器加权求和,所以权重并不相等,每个权重代表的是其对应分类器在上一轮迭代中的成功度。同时bagging中样本的权重是一样的,而Adaboost中样本的权重会发生变化。
  2. bagging 是由不同的分类器(1.数据随机化 2.特征随机化)经过训练,综合得出的出现最多分类结果;boosting 是通过调整已有分类器错分的那些数据来获得新的分类器,得出目前最优的结果。
  3. 随机森林对异常值不敏感,Adaboost对异常值(Outlier)敏感。
  4. 随机森林模型是降低方差的模型。Boosting模型为降低偏差的模型。

猜你喜欢

转载自blog.csdn.net/qq_32742009/article/details/81903896
今日推荐