以下练习题来自机器学习实战:基于Scikit-Learn和Tensorflow一书。

  1. 如果你已经在完全相同的训练集上训练了五个不同的模型,并 且它们都达到了95%的准确率,是否还有机会通过结合这些模型来获 得更好的结果?如果可以,该怎么做?如果不行,为什么?
    答:如果你已经训练了五个不同的模型,并且都达到了95%的精 度,你可以尝试将它们组合成一个投票集成,这通常会带来更好的结 果。如果模型之间非常不同(例如,一个SVM分类器,一个决策树 分类器,以及一个Logistic回归分类器等),则效果更优。如果它们 是在不同的训练实例(这是bagging和pasting集成的关键点)上完成 训练,那就更好了,但如果不是,只要模型非常不同,这个集成仍然 有效。

  2. 硬投票分类器和软投票分类器有什么区别?
    答: 硬投票分类器只是统计每个分类器的投票,然后挑选出得票最 多的类别。软投票分类器计算出每个类别的平均估算概率,然后选出 概率最高的类别。它比硬投票法的表现更优,因为它给予那些高度自 信的投票更高的权重。但是它要求每个分类器都能够估算出类别概率 才可以正常工作(例如,Scikit-Learn中的SVM分类器必须要设置 probability=True)。

  3. 是否可以通过在多个服务器上并行来加速bagging集成的训练? pasting集成呢?boosting集成呢?随机森林或stacking集成呢?
    答:对于bagging集成来说,将其分布在多个服务器上能够有效加速 训练过程,因为集成中的每个预测器都是独立工作的。同理,对于 pasting集成和随机森林来说也是如此。但是,boosting集成的每个预 测器都是基于其前序的结果,因此训练过程必须是有序的,将其分布 在多个服务器上毫无意义。对于stacking集成来说,某个指定层的预 测器之间彼此独立,因而可以在多台服务器上并行训练,但是,某一 层的预测器只能在其前一层的预测器全部训练完成之后,才能开始训 练。

  4. 包外评估的好处是什么?
    答:包外评估可以对bagging集成中的每个预测器使用其未经训练的 实例进行评估。不需要额外的验证集,就可以对集成实施相当公正的评估。所以,如果训练使用的实例越多,集成的性能可以略有提升。

  5. 是什么让极端随机树比一般随机森林更加随机?这部分增加的 随机性有什么用?极端随机树比一般随机森林快还是慢?
    答:随机森林在生长过程中,每个节点的分裂仅考虑到了特征的一 个随机子集。极限随机树也是如此,它甚至走得更远:常规决策树会 搜索出特征的最佳阈值,极限随机树直接对每个特征使用随机阈值。 这种极限随机性就像是一种正则化的形式:如果随机森林对训练数据 出现过度拟合,那么极限随机树可能执行效果更好。更甚的是,极限 随机树不需要计算最佳阈值,因此它训练起来比随机森林快得多。但 是,在做预测的时候,相比随机森林它不快也不慢

  6. 如果你的AdaBoost集成对训练数据拟合不足,你应该调整哪些 超参数?怎么调整?
    答: 如果你的AdaBoost集成对训练集拟合不足,可以尝试提升估算 器的数量或是降低基础估算器的正则化超参数。你也可以尝试略微提 升学习率。

  7. 如果你的梯度提升集成对训练集过度拟合,你是应该提升还是 降低学习率?
    答:如果你的梯度提升集成对训练集过度拟合,你应该试着降低学 习率,也可以通过早停法来寻找合适的预测器数量(可能是因为预测 器太多)。

  8. 加载MNIST数据集(第3章中有介绍),将其分为一个训练 集、一个验证集和一个测试集(例如使用40000个实例训练,10000个 实例验证,最后10000个实例测试)。然后训练多个分类器,比如一 个随机森林分类器、一个极端随机树分类器和一个SVM。接下来, 尝试使用软投票法或者硬投票法将它们组合成一个集成,这个集成在 验证集上的表现要胜过它们各自单独的表现。成功找到集成后,在测 试集上测试。与单个的分类器相比,它的性能要好多少?

  9. 运行上一个练习中的单个分类器,用验证集进行预测,然后用 预测结果创建一个新的训练集:新训练集中的每个实例都是一个向 量,这个向量包含所有分类器对于一张图像的一组预测,目标值是图 像的类别。恭喜,你成功训练了一个混合器,结合第一层的分类器, 它们一起构成了一个stacking集成。现在在测试集上评估这个集成。 对于测试集中的每张图像,使用所有的分类器进行预测,然后将预测 结果提供给混合器,得到集成的预测。与前面训练的投票分类器相 比,这个集