Sklearn 与 TensorFlow 机器学习实用指南——第七章总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yanying1113/article/details/86322055


本章主要讲解了几种集成方法,包括 bagging, boosting, stacking,和其他一些算法。参考 地址
如果你合并了一组分类器的预测(像分类或者回归),你也会得到一个比单一分类器更好的预测结果。这一组分类器就叫做集成;因此,这个技术就叫做集成学习,一个集成学习算法就叫做集成方法。

投票分类

一个非常简单去创建一个更好的分类器的方法就是去整合每一个分类器的预测然后经过投票去预测分类。这种分类器就叫做硬投票分类器。
在这里插入图片描述
令人惊奇的是这种投票分类器得出的结果经常会比集成中最好的一个分类器结果更好。事实上,即使每一个分类器都是一个弱学习器(意味着它们也就比瞎猜好点),集成后仍然是一个强学习器(高准确率),只要有足够数量的弱学习者,他们就足够多样化。

Bagging 和 Pasting

就像之前讲到的,可以通过使用不同的训练算法去得到一些不同的分类器。另一种方法就是对每一个分类器都使用相同的训练算法,但是在不同的训练集上去训练它们。有放回采样被称为装袋(Bagging,是 bootstrap aggregating 的缩写)。无放回采样称为粘贴(pasting)。

当所有的分类器被训练后,集成可以通过对所有分类器结果的简单聚合来对新的实例进行预测。聚合函数通常对分类是统计模式(例如硬投票分类器)或者对回归是平均。每一个单独的分类器在如果在原始训练集上都是高偏差,但是聚合降低了偏差和方差。通常情况下,集成的结果是有一个相似的偏差,但是对比与在原始训练集上的单一分类器来讲有更小的方差。

在 sklearn 中的 Bagging 和 Pasting

sklearn 为 Bagging 和 Pasting 提供了一个简单的API:BaggingClassifier类(或者对于回归可以是BaggingRegressor。如果你想尝试 Pasting,就设置bootstrap=False)

Out-of-Bag 评价

对于 Bagging 来说,一些实例可能被一些分类器重复采样,但其他的有可能不会被采样。BaggingClassifier默认采样。BaggingClassifier默认是有放回的采样m个实例 (bootstrap=True),其中m是训练集的大小,这意味着平均下来只有63%的训练实例被每个分类器采样,剩下的37%个没有被采样的训练实例就叫做 Out-of-Bag 实例。注意对于每一个的分类器它们的 37% 不是相同的。

因为在训练中分类器从来没有看到过 oob 实例,所以它可以在这些实例上进行评估,而不需要单独的验证集或交叉验证。你可以拿出每一个分类器的 oob 来评估集成本身。

在 sklearn 中,你可以在训练后需要创建一个BaggingClassifier来自动评估时设置oob_score=True来自动评估。

随机森林

随机森林是决策树的一种集成,通常是通过 bagging 方法(有时是 pasting 方法)进行训练,通常用max_samples设置为训练集的大小。

特征重要度

最后,如果你观察一个单一决策树,重要的特征会出现在更靠近根部的位置,而不重要的特征会经常出现在靠近叶子的位置。因此我们可以通过计算一个特征在森林的全部树中出现的平均深度来预测特征的重要性。sklearn 在训练后会自动计算每个特征的重要度。你可以通过feature_importances_变量来查看结果。

提升(boosting)

提升(Boosting,最初称为假设增强)指的是可以将几个弱学习者组合成强学习者的集成方法。对于大多数的提升方法的思想就是按顺序去训练分类器,每一个都要尝试修正前面的分类。现如今已经有很多的提升方法了,但最著名的就是 Adaboost(适应性提升,是 Adaptive Boosting 的简称) 和 Gradient Boosting(梯度提升)。

Adaboost

使一个新的分类器去修正之前分类结果的方法就是对之前分类结果不对的训练实例多加关注。这导致新的预测因子越来越多地聚焦于这种情况。这是 Adaboost 使用的技术。
序列学习技术的一个重要的缺点就是:它不能被并行化(只能按步骤),因为每个分类器只能在之前的分类器已经被训练和评价后再进行训练。因此,它不像Bagging和Pasting一样。
详细看一下 Adaboost 算法。每一个实例的权重wi初始都被设为1/m第一个分类器被训练,然后他的权重误差率r1在训练集上算出,详见下式。
在这里插入图片描述
分类器的权重随后用公式 7-2 计算出来。其中η是超参数学习率(默认为 1)。分类器准确率越高,它的权重就越高。如果它只是瞎猜,那么它的权重会趋近于 0。然而,如果它总是出错(比瞎猜的几率都低),它的权重会使负数。
分类器权重
在这里插入图片描述
接下来实例的权重会按照下式更新:误分类的实例权重会被提升。
在这里插入图片描述
随后所有实例的权重都被归一化。
最后,一个新的分类器通过更新过的权重训练,整个过程被重复(新的分类器权重被计算,实例的权重被更新,随后另一个分类器被训练,以此类推)。当规定的分类器数量达到或者最好的分类器被找到后算法就会停止。
为了进行预测,Adaboost 通过分类器权重简单的计算了所有的分类器和权重。预测类别会是权重投票中主要的类别。
Adaboost分类器
在这里插入图片描述

梯度提升

与 Adaboost 一样,梯度提升也是通过向集成中逐步增加分类器运行的,每一个分类器都修正之前的分类结果。然而,它并不像 Adaboost 那样每一次迭代都更改实例的权重,这个方法是去使用新的分类器去拟合前面分类器预测的残差 。

Stacking

本章讨论的最后一个集成方法叫做 Stacking(stacked generalization 的缩写)。这个算法基于一个简单的想法:不使用琐碎的函数(如硬投票)来聚合集合中所有分类器的预测,我们为什么不训练一个模型来执行这个聚合?下图展示了这样一个在新的回归实例上预测的集成。底部三个分类器每一个都有不同的值(3.1,2.7 和 2.9),然后最后一个分类器(叫做 blender 或者 meta learner )把这三个分类器的结果当做输入然后做出最终决策(3.0)。
在这里插入图片描述

习题

  1. 如果你在相同训练集上训练 5 个不同的模型,它们都有 95% 的准确率,那么你是否可以通过组合这个模型来得到更好的结果?如果可以那怎么做呢?如果不可以请给出理由。
    可以,可以组合成为一个投票分类器,如果模型不同(如SVM分类器,决策树分类器,Logistic回归分类器等,),或者接受不同实例的训练,效果会更好。
  2. 软投票和硬投票分类器之间有什么区别?
    整合每一个分类器的预测然后经过投票去预测分类,这种分类器就叫做硬投票分类器。
    如果所有的分类器都能够预测类别的概率(例如他们有一个predict_proba()方法),那么你就可以让 sklearn 以最高的类概率来预测这个类,平均在所有的分类器上。这种方式叫做软投票。 软投票给与高置信度的投票更大的权重,但它只在每个分类器能够估计类概率时才起作用。
  3. 是否有可能通过分配多个服务器来加速 bagging 集成系统的训练?pasting 集成,boosting 集成,随机森林,或 stacking 集成怎么样?
    通过将其分布在多个服务器上来加速bagging训练是可以的,因为整体的没有预测器都是独立的。同理,pasting和随机森林也是可以的。但是boosting集成的没有预测器都是基于前面的预测器构建的,因此训练的连续的,显然是不可以的。关于stacking,给定层的所有预测变量彼此独立,因此可以在多个服务器上并行训练,但是,一层的预测变量只能在前一层预测变量都经过训练之后才能训练。
  4. out-of-bag 评价的好处是什么?
    包外评估使用包内每个预测器都未使用过的实例进行评估,这使得对集合进行相当公正的评估,而且不需要额外的验证集,因此可以有更多的用于训练的实例,整体的表现会更好。
  5. 是什么使Extra-Tree比规则随机森林更随机呢?这个额外的随机有什么帮助呢?那这个 Extra-Tree 比规则随机森林谁更快呢?
    在随机森林中“种树”时,只考虑特征的随机子集以在每个节点处进行分割。 对于Extra-Tree也是如此,但Extra-Tree不像常规的决策树一样搜索最佳阈值,而是为每个特征使用随机阈值。这种额外的随机性就像一种正规化的形式:如果随机森林过度拟合训练数据,Extra-Tree可能表现更好。此外,由于Extra-Trees不会搜索最佳阈值,因此它们比随机森林训练要快得多。然而,在做出预测时,它们既不比随机森林更快也不慢。
  6. 如果你的 Adaboost 模型欠拟合,那么你需要怎么调整超参数?
    如果您的AdaBoost集合不适合训练数据,您可以尝试增加估算器的数量或减少基本估算器的正则化超参数。 您也可以尝试稍微提高学习率。
  7. 如果你的梯度提升过拟合,那么你应该调高还是调低学习率呢?
    如果您的Gradient Boosting提升发生了过拟合,您应该尝试降低学习率。你也可以使用早期停止来找到正确数量的预测变量。

猜你喜欢

转载自blog.csdn.net/yanying1113/article/details/86322055