集成学习之stacked generalization

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第19天,点击查看活动详情

最后再来了解一个集成方法堆叠泛化法(stacked generalization,简称堆叠法)。让我们堆叠什么呢?前面讲了投票法,是我们自己设置一个方法或者函数将之前多个预测器的预测值进行整合和选出高投票或者预测率高的一个类,那是不是我们也可以在来一个预测器,来实现我们的写好的方法呢。

aha,还真的可以,这个最终的预测器,我们称之为blender或者meta learner。它会将之前的预测器的预测结果作为输入,然后输出就是最终的预测结果。简化版本大致可以看下图:

图1 stacking_v0.1

这是一个简单的使用stacking方法的模型,他只是将多个预测器的预测值放入一个blender中。具体的方法如下:

  1. 先将训练集分成两部分,一个子集用于第一层的预测器进行训练,另一部分则用于进行预测
  • X_train, X_val, y_train, y_val = train_test_split(X_train_val, y_train_val, test_size=0.2)
  • 创建3个不同的预测器可以是,然后将他们每个训练:
    • random_forest_clf = RandomForestClassifier(n_estimators=10)
    • extra_trees_clf = ExtraTreesClassifier(n_estimators=100)
    • svm_clf = LinearSVC()
    • 或者其他的都行
    • xx_clf.fit(X_train, y_train)
  1. 将每个预测器的值作为一个新的特征属性,然后将新的预测值作为blender的输入:
# estimators 来自上面的预测器的一个集合
for index, estimator in enumerate(estimators):
    X_val_predictions[:, index] = estimator.predict(X_val)

# 一个随机森林blender
rnd_forest_blender = RandomForestClassifier(n_estimators=100, oob_score=True)
rnd_forest_blender.fit(X_val_predictions, y_val)
复制代码

按照上面的流程我们就可以实现一个简单的堆叠法,但是实际使用中我们的堆叠法可能不会这么简单。

我们还会继续训练多个blender作为新的一层,同样的这一层blender,除了是随机森林,也还可以是ExtraTreesClassifierExtraTreesClassifier等等其他的预测器。这些blender的输入就是上面rnd_forest_blender的输入。我们可以再来看一下在进一步的堆叠法:

图2 stacking_v0.2

这样的stacking看上去可靠多了,当然事实也是如此。今天的学习就到这里了,see you。

猜你喜欢

转载自juejin.im/post/7108366162055921671