1. 什么是 stacking
stacking 就是当用初始训练数据学习出若干个基学习器后,将这几个学习器的预测结果作为新的训练集,来学习一个新的学习器。
2. 代码:
例如我们用 RandomForestClassifier, ExtraTreesClassifier, GradientBoostingClassifier 作为第一层学习器:# Our level 0 classifiers
clfs = [
RandomForestClassifier(n_estimators = n_trees, criterion = 'gini'),
ExtraTreesClassifier(n_estimators = n_trees * 2, criterion = 'gini'),
GradientBoostingClassifier(n_estimators = n_trees),
]
接着要训练第一层学习器,并得到第二层学习器所需要的数据,这里会用到 k 折交叉验证。
1. 先用初始训练集训练 clf,并得到第二层的训练数据 blend_train:
第 j 个学习器,共经过 nfolds 次交叉验证,每一次会得到当前验证集角标上的预测值,nfolds 之后得到和初始训练集一样大小的集合:
blend_train[cv_index, j] = clf.predict(X_cv)
2. 再用 clf 对 test 集进行预测