机器学习笔记-Stacking理论及实现

Stacking简介

Stacking是使用多个不同的分类器对训练集进行预测,把预测得到的结果作为一个次级分类器的输入。次级分类器的输出是整个模型的预测结果。其具体实现如下图所示:

在这里插入图片描述

假如有决策树、KNN、神经网络和逻辑回归四种分类器,对训练集进行分类得到分类结果0110,最终将结果送入到次级分类器来得到最终的结果,其具体实现如下图所示:

在这里插入图片描述

stacking的训练过程如下所示:

假设训练数据:train.csv有1000行;测试集test.csv有200行。按照下图所示进行训练

在这里插入图片描述

如图所示,我们现在用5折交叉验证来训练数据,model1要做满5次训练和预测。
第一次,model1,拿train.csv的800行做训练集,200行做验证集,然后预测出200行的数据a1。
第二次,model1,拿train.csv的800行做训练集,200行做验证集,然后预测出200行的数据a2。
第三次,model1,拿train.csv的800行做训练集,200行做验证集,然后预测出200行的数据a3。
第四次,model1,拿train.csv的800行做训练集,200行做验证集,然后预测出200行的数据a4。
第五次,model1,拿train.csv的800行做训练集,200行做验证集,然后预测出200行的数据a5。
然后将a1到a5拼接起来,得到一列,共1000行的数据。

这只是使用model1训练得到的一列特征,而不是所有的特征,使用更多的模型(model1,model2…,modeln)重复上述操作得到更多的列,最后将列拼接到一起,作为次级分类器的输入。

针对测试集test.csv有两种方法,一种是全部训练完成后,一次性预测输出200行数据;另一种是model1每次做完训练就那test.csv中的数据做预测,一种得到5次200行的数据,然后做平均,得到一列200行的数据。

Stacking实现

数据集为鸢尾花的数据集:

导入包:

import numpy as np
from sklearn.tree import DecisionTreeClassifier
from sklearn import datasets
from sklearn import model_selection
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from mlxtend.classifier import StackingClassifier

定义Stacking模型并进行训练

#载入数据集
iris=datasets.load_iris()
#只要1,2两列的特征
x_data,y_data=iris.data[:,1:3],iris.target
#定义三个不同的分类器
clf1=KNeighborsClassifier(n_neighbors=1)
clf2=DecisionTreeClassifier()
clf3=LogisticRegression()
#定义一个次级分类器
lr=LogisticRegression()
sclf=StackingClassifier(classifiers=[clf1,clf2,clf3],
                       meta_classifier=lr)
for clf,label in zip([clf1,clf2,clf3,sclf],
                     ['KNN','Decision Tree','LogisticRegression','StackingClassifier'] ):
    scores=model_selection.cross_val_score(clf,x_data,y_data,cv=3,scoring='accuracy')
    print("Accuracy:%0.2f [%s]"%(scores.mean(),label))

训练结果如下所示:

在这里插入图片描述

参考文献:https://www.jianshu.com/p/59313f43916f

参考文献:https://www.seaxiang.com/blog/c228c01936704287b0eb0949df4e97ea

f

参考文献:https://www.seaxiang.com/blog/c228c01936704287b0eb0949df4e97ea

参考视频:https://www.bilibili.com/video/BV1Rt411q7WJ?p=54&vd_source=166e4ef02c5e9ffa3f01c2406aec1508

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值