stacking原理
透视原理:利用镜头透视原理展现空间深度 #生活知识# #摄影技巧# #构图原理#
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)
1234567891011121314151617182.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——原理分析整理
护理期刊==原创
伤口护理==原创