在本节,我们将在测试数据上计算MajorityVoteClassifier类的ROC曲线,以验证其在未知数据上的泛化性能。请记住,训练数据并未应用于模型选择,使用它们的唯一目的就是对分类系统的泛化性能做出无偏差的估计。代码如下:
由ROC结果我们可以看到,集成分类器在测试集上表现优秀(ROC AUC=0.95),而k-近邻分类器对于训练数据有些过拟合(训练集上的ROC AUC=0.93,测试集上ROC AUC=0.86):
因为只使用了分类样本中的两个特征,集成分类器的决策区域到底是什么样子可能会引起我们的兴趣。由于逻辑斯谛回归和k-近邻流水线会自动对数据进行预处理,因此不必事先对训练特征进行标准化。不过出于可视化考虑,也就是在相同的度量标准上实现决策区域,我们在此对训练集做了标准化处理。代码如下:
尽管有趣,但也如我们所预期的那样,集成分类器的决策区域看起来像是各成员分类器决策区域的混合。乍看之下,多数投票的决策区域与k-近邻分类器的很相似。不过,正如单层决策树那样,我们可以看到它在sepal width≥1时正交于y轴:
在学习集成分类的成员分类器调优之前,我们调用一下get_param方法,以便对如何访问GridSearch对象内的单个参数有个基本的认识:
得到get_params方法的返回值后,我们现在知道怎样去访问成员分类器的属性了。出于演示的目的,先通过网格搜索来调整逻辑斯谛回归分类器的正则化系数C以及决策树的深度。代码如下:
完成网格搜索后,我们可以输出不同超参值的组合,以及10折交叉验证计算得出的平均ROC AUC得分。代码如下:
正如我们所见,当选择的正则化强度较小时(C=100.0),我们能够得到最佳的交叉验证结果,而决策树的深度似乎对性能没有任何影响,这意味着使用单层决策树足以对数据进行划分。请注意,在模型评估时,不止一次使用测试集并非一个好的做法,本节不打算讨论超参调优后的集成分类器泛化能力的评估。我们将继续学习另外一种集成方法:bagging。
我们在本节实现的多数投票方法有时也称为堆叠(stacking)。不过,堆叠算法更典型地应用于组合逻辑斯谛回归模型,以各独立分类器的输出作为输入,通过对这些输入结果的继承来预测最终的类标,详情请参阅David H.Wolpert的论文:Stacked generalization.Neural networks,5(2):241——259,1992。