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

Stacking简介

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

机器学习笔记-Stacking理论及实现_第1张图片

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

机器学习笔记-Stacking理论及实现_第2张图片

stacking的训练过程如下所示:

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

机器学习笔记-Stacking理论及实现_第3张图片

如图所示,我们现在用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))

训练结果如下所示:

机器学习笔记-Stacking理论及实现_第4张图片

参考文献: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

你可能感兴趣的:(机器学习,python,人工智能)