任务
用你目前评分最高的模型作为基准模型,和其他模型进行stacking融合,得到最终模型及评分果。
Stacking
对于Stacking我也是个刚刚接触,翻看了很多材料,发现这篇文章写得比较详细,此处贴上引用地址:(https://blog.youkuaiyun.com/u011630575/article/details/81302994)
Stacking是模型融合的一种方法,对于StackingCVClassifier的参数说明:
classifiers : 基分类器,数组形式,[cl1, cl2, cl3]. 每个基分类器的属性被存储在类属性 self.clfs_.
meta_classifier : 目标分类器,即将前面分类器合起来的分类器
use_probas : bool (default: False) ,如果设置为True, 那么目标分类器的输入就是前面分类输出的类别概率值而不是类别标签
average_probas : bool (default: False),当上一个参数use_probas = True时需设置,average_probas=True表示所有基分类器输出的概率值需被平均,否则拼接。
verbose : int, optional (default=0)。用来控制使用过程中的日志输出,当 verbose = 0时,什么也不输出, verbose = 1,输出回归器的序号和名字。verbose = 2,输出详细的参数信息。verbose > 2, 自动将verbose设置为小于2的,verbose -2.
use_features_in_secondary : bool (default: False). 如果设置为True,那么最终的目标分类器就被基分类器产生的数据和最初的数据集同时训练。如果设置为False,最终的分类器只会使用基分类器产生的数据训练。
代码实现
from mlxtend.classifier import StackingCVClassifier
from sklearn import metrics
# 基分类器3个:DecisionTreeClassifier, GradientBoostingClassifier,RandomForestClassifier
# 目标分类器:LogisticRegression
# 使用3折交叉验证
basemodel1 = tree.DecisionTreeClassifier()
basemodel2 = GradientBoostingClassifier()
basemodel3 = RandomForestClassifier()
lr = LogisticRegression()
sclf