stacking原理

发布时间:2024-12-11 05:39

透视原理:利用镜头透视原理展现空间深度 #生活知识# #摄影技巧# #构图原理#

1. stacking原理

这里以2层stacking为例进行介绍 
假设有3个基模型M1,M2, M3, 
数据集: D={(x1→,y1),(x2→,y2),...,(xn→,yn)}D={(x1→,y1),(x2→,y2),...,(xn→,yn)}

划分数据集 
这里写图片描述第一层模型训练 
这里写图片描述
为了防止过拟合,第一层采用k折验证得到第二层的输入,上图所示是五折交叉验证生成新的特征的过程,将训练集分成5份,每次选取其中4份使用模型M1进行学习,训练出的模型对另外1份进行预测得到predictipredicti,同时用改模型对测试集进行预测,其结果为 y1i^y1i^。进行五次训练之后,将五次得到的predictipredicti组成完整的对训练集的预测结果,记为P1→P1→,对五次获得的测试集预测结果取平均得到新的测试集预测结果,记为T1→=15∑5i=1y1i^T1→=15∑i=15y1i^ 
以此类推,对模型M2,模型M3使用同样的方法生成新的训练特征和测试特征P2→P2→,T2→T2→;P3→P3→,T3→T3→

生成新的训练集和测试集

将P1→P1→,P2→P2→,P3→P3→以及T1→T1→,T2→T2→,T3→T3→合并,得到新的训练集和测试集 
P1→P1→,P2→P2→,P3→P3→ —>(P1→P1→,P2→P2→,P3→P3→), 
T1→T1→,T2→T2→,T3→T3→ —>(T1→T1→,T2→T2→,T3→T3→)

第二层模型训练

使用第二层的模型M4对新的训练集进行学习,得到的模型对测试集进行预测,从而可以验证结果的准确性。

2. 代码实现

2.1 朴素代码

import numpy as np

from sklearn.model_selection import KFold

ntrain = train.shape[0]

ntest = test.shape[0]

kf = KFold(n_splits=5, random_state=2017)

def get_oof(clf, x_train, y_train, x_test):

oof_train = np.zeros((ntrain,))

oof_test = np.zeros((ntest,))

oof_test_skf = np.empty((5,ntest))

for i, (train_index, test_index) in enumerate(kf.split(x_train)):

kf_x_train = x_train[train_index]

kf_y_train = y_train[train_index]

kf_x_test = x_train[test_index]

clf.train(kf_x_train, kf_y_train)

oof_train[test_index] = clf.predict(kf_x_test)

oof_test_skf[i,:] = clf.predict(x_test)

oof_test[:] = oof_test_skf.mean(axis=0)

return oof_train.reshape(-1,1),oof_test.reshape(-1,1)

123456789101112131415161718

2.2 使用mlxtend库

from sklearn import datasets

iris = datasets.load_iris()

X,y = iris.data[:,1:3],iris.target

from sklearn import model_selection

from sklearn.linear_model import LogisticRegression

from sklearn.neighbors import KNeighborsClassifier

from sklearn.naive_bayes import GaussianNB

from sklearn.ensemble import RandomForestClassifier

from mlxtend.classifier import StackingClassifier

clf1 = KNeighborsClassifier(n_neighbors=1)

clf2 = RandomForestClassifier(random_state=1)

clf3 = GaussianNB()

lr = LogisticRegression()

sclf = StackingClassifier(classifiers=[clf1,clf2,clf3],meta_classifier=lr)

print('3-fold cross validation: \n')

for clf, label in zip([clf1,clf2,clf3,sclf],

['knn','random forest','naive bayes','stacking classifier']):

scores = model_selection.cross_val_score(clf, X, y, cv=3,scoring='accuracy')

print("Accuracy: %0.2f (+/- %0.2f) [%s]" %(scores.mean(),scores.std(), label))

网址:stacking原理 https://www.yuejiaxmz.com/news/view/440975

相关内容

自动叠衣机机构和控制系统设计(家用智能叠衣机)【毕业论文+CAD图纸+PDF图+PLC控制原理图+SW三维+STEP+开题报告】
利用率:创意居住空间设计
抽屉原理
FreeRTOS Posix原理
记忆原理
除霉剂原理
PHOTOSHOP三原色配色原理及搭配色彩理论
ARouter——原理分析整理
护理期刊==原创
伤口护理==原创

随便看看