您的位置 首页 > 德语词汇

stacking是什么意思?用法、例句?集成学习之Stacking

老铁们,大家好,相信还有很多朋友对于stacking是什么意思?用法、例句和集成学习之Stacking的相关问题不太懂,没关系,今天就由我来为大家分享分享stacking是什么意思?用法、例句以及集成学习之Stacking的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!

stacking是什么意思?用法、例句?集成学习之Stacking

stacking(sometimescalledstackedgeneralization)involvestrainingalearningalgorithmtocombinethepredictionsofseveralotherlearningalgorithms.First,alloftheotheralgorithmsaretrainedusingtheavailabledata,thenacombineralgorithmistrainedtomakeafinalpredictionusingallthepredictionsoftheotheralgorithmsasadditionalinputs.--wiki

Stacking是一种集成的机器学习算法,可以学习如何最好地组合来自多个机器学习模型的预测。和之前讲的bagging不同的是,在stacking中包含不同的模型,而不是像bagging中那样所有的predictor都是决策树,stacking中不同的模型使用的是相同的数据集,而在bagging中使用的是训练数据集的子样本;stacking相较于boosting而言,在stacking中,一个模型是用来学习如何最好地结合不同模型的预测,而不是像在boosting中那样,通过修正之前模型的预测结果来得到最终结果。

Stacking适合于不同模型做出的预测或模型预测中的误差不相关或具有较低的相关性。堆叠模型的结构涉及两个或多个基本模型(通常称为0级模型)和一个将基本模型预测结合在一起的元模型(称为1级模型)。

Level-0模型(基础-模型):使用训练数据拟合模型;

Level-1模型(元-模型):学习如何最佳地结合基础模型的预测的模型。

Level-1的模型是根据level-0模型对样本的数据所做的预测结果进行训练的。比如在下面的图中,level-0就是那个基础模型,通常是复杂多样的,它是指不同的用于解决预测模型任务的predictors,这些不同的predictors,可以是logisticregression,SVMClassifier,RandomForestClassifier等等。Level-1图中的ensemble’sprediction这个过程,元模型通常比较简单,主要功能是对基础模型做出的预测进行解答。因此元模型通常使用线性模型,例如用于回归任务的线性回归(LinearRegression)(用来预测一个数值)和用于分类任务的逻辑回归(LogisticRegression)(预测类标签)。

常用的的ensemble’sprediction方法比如说:majorityvote,blending,etc.。

堆叠用来提高模型的性能,但是也不能保证在所有的情况下有所改进。实现性能上的改进还取决于问题的复杂性,以及训练数据是否很好地表达问题和是否足够复杂,以至于通过组合预测来学习更多。它还取决于模型的选择及它们在预测方面是否足够熟练和低相关性。

如果基础模型的性能在各方面表现得与堆叠集成一样或者说更好,那么应该使用基础模型,而不是stacking。因为基础模型的复杂度比较低,它更易于训练和修改。

关于sklearn中的ensembleAPI可以参考下面的连接:

https://scikit-learn.org/stable/modules/classes.html#module-sklearn.ensemble

importsklearn\nprint(sklearn.__version__)

fromsklearn.datasetsimportmake_classification#generatearandomn-classclassificationproblem\nfromsklearn.model_selectionimportcross_val_score\nfromsklearn.ensembleimportStackingClassifier\nfrommatplotlibimportpyplot\nfromnumpyimportmean\nfromnumpyimportstd\nfromsklearn.datasetsimportmake_classification\nfromsklearn.model_selectionimportcross_val_score\nfromsklearn.model_selectionimportRepeatedStratifiedKFold\nfromsklearn.linear_modelimportLogisticRegression\nfromsklearn.neighborsimportKNeighborsClassifier\n#KNeighborsClassifier:Classifierimplementingthek-nearestneighborsvote,K最邻近法\nfromsklearn.treeimportDecisionTreeClassifier\nfromsklearn.svmimportSVC\nfromsklearn.naive_bayesimportGaussianNB\nfrommatplotlibimportpyplot

defget_dataset():\nX,y=make_classification(n_samples=1000,n_features=20,n_informative=15,n_redundant=5,random_state=1)\nreturnX,y\ndefget_stacking():\nlevel0=list()\nlevel0.append(('lr',LogisticRegression()))\nlevel0.append(('knn',KNeighborsClassifier()))\nlevel0.append(('cart',DecisionTreeClassifier()))\nlevel0.append(('svm',SVC()))\nlevel0.append(('bayes',GaussianNB()))\nlevel1=LogisticRegression()\nmodel=StackingClassifier(estimators=level0,final_estimator=level1,cv=5)\nreturnmodel\ndefget_models():\nmodels=dict()\nmodels['lr']=LogisticRegression()\nmodels['knn']=KNeighborsClassifier()\nmodels['cart']=DecisionTreeClassifier()\nmodels['svm']=SVC()\nmodels['bayes']=GaussianNB()\nmodels['stacking']=get_stacking()\nreturnmodels\ndefevaluate_model(model,X,y):\ncv=RepeatedStratifiedKFold(n_splits=10,n_repeats=3,random_state=1)\nscores=cross_val_score(model,X,y,scoring='accuracy',cv=cv,n_jobs=-1,error_score='raise')\nreturnscores

X,y=get_dataset()\nmodels=get_models()\nresults,names=list(),list()\nforname,modelinmodels.items():\nscores=evaluate_model(model,X,y)\nresults.append(scores)\nnames.append(name)\nprint('>%s%.3f(%.3f)'%(name,mean(scores),std(scores)))\npyplot.boxplot(results,labels=names,showmeans=True)\npyplot.show()

#definedataset\nX,y=make_classification(n_samples=1000,n_features=20,n_informative=15,n_redundant=5,random_state=1)\n#definethebasemodels\nlevel0=list()\nlevel0.append(('lr',LogisticRegression()))\nlevel0.append(('knn',KNeighborsClassifier()))\nlevel0.append(('cart',DecisionTreeClassifier()))\nlevel0.append(('svm',SVC()))\nlevel0.append(('bayes',GaussianNB()))\n#definemetalearnermodel\nlevel1=LogisticRegression()\n#definethestackingensemble\nmodel=StackingClassifier(estimators=level0,final_estimator=level1,cv=5)\n#fitthemodelonallavailabledata\nmodel.fit(X,y)\n#makeapredictionforoneexample\ndata=[[2.47475454,0.40165523,1.68081787,2.88940715,0.91704519,-3.07950644,4.39961206,0.72464273,-4.86563631,-6.06338084,-1.22209949,-0.4699618,1.01222748,-0.6899355,-0.53000581,6.86966784,-3.27211075,-6.59044146,-2.21290585,-3.139579]]\nyhat=model.predict(data)\nprint('PredictedClass:%d'%(yhat))

sklearn.ensemble.StackingClassifier(estimators,final_estimator=None,*,cv=None,stack_method='auto',n_jobs=None,passthrough=False,verbose=0)

Estimators:堆叠在一起的基础模型。

Final_estimator:用来结合基础模型的模型,default:LogisticRegression。

Cv:定义交叉验证的split策略,default:5折交叉验证。

fromnumpyimportmean\nfromnumpyimportstd\nfromsklearn.datasetsimportmake_regression\nfromsklearn.model_selectionimportcross_val_score\nfromsklearn.model_selectionimportRepeatedKFold\nfromsklearn.linear_modelimportLinearRegression\nfromsklearn.neighborsimportKNeighborsRegressor\nfromsklearn.treeimportDecisionTreeRegressor\nfromsklearn.svmimportSVR\nfromsklearn.ensembleimportStackingRegressor

defget_dataset():\nX,y=make_regression(n_samples=1000,n_features=20,n_informative=15,noise=0.1,random_state=1)\nreturnX,y\ndefget_stacking():\nlevel0=list()\nlevel0.append(('knn',KNeighborsRegressor()))\nlevel0.append(('cart',DecisionTreeRegressor()))\nlevel0.append(('svm',SVR()))\n#defineametalinearmodel\nlevel1=LinearRegression()\n#definethestackingensemble\nmodel=StackingRegressor(estimators=level0,final_estimator=level1,cv=5)\nreturnmodel\n#getalistofmodelstoevaluate\ndefget_models():\nmodels=dict()\nmodels['knn']=KNeighborsRegressor()\nmodels['cart']=DecisionTreeRegressor()\nmodels['svm']=SVR()\nmodels['stacking']=get_stacking()\nreturnmodels\ndefevaluate_model(model,X,y):\ncv=RepeatedKFold(n_splits=10,n_repeats=3,random_state=1)\nscores=cross_val_score(model,X,y,scoring='neg_mean_absolute_error',cv=cv,n_jobs=-1,error_score='raise')\nreturnscores\nX,y=get_dataset()\nmodels=get_models()\nresults,names=list(),list()\nforname,modelinmodels.items():\nscores=evaluate_model(model,X,y)\nresults.append(scores)\nnames.append(name)\nprint('>%s%.3f(%.3f)'%(name,mean(scores),std(scores)))\n#plotmodelperformanceforcomparison\npyplot.boxplot(results,labels=names,showmeans=True)\npyplot.show()

X,y=make_regression(n_samples=1000,n_features=20,n_informative=15,noise=0.1,random_state=1)\nlevel0=list()\nlevel0.append(('knn',KNeighborsRegressor()))\nlevel0.append(('cart',DecisionTreeRegressor()))\nlevel0.append(('svm',SVR()))\n#definemetalearnermodel\nlevel1=LinearRegression()\n#definethestacingensemble\nmodel=StackingRegressor(estimators=level0,final_estimator=level1,cv=5)\n#fitthemodelonallavailabledata\nmodel.fit(X,y)\n#makeapredictionforoneexampel\ndata=[[0.59332206,-0.56637507,1.34808718,-0.57054047,-0.72480487,1.05648449,0.77744852,0.07361796,0.88398267,2.02843157,1.01902732,0.11227799,0.94218853,0.26741783,0.91458143,-0.72759572,1.08842814,-0.61450942,-0.69387293,1.69169009]]\nyhat=model.predict(data)\nprint('PredictedValue:%.3f'%(yhat))\n#%.3fisalistofstringformattingoptionsinpython,%asaplaceholder,replacedby(yhat)

sklearn.ensemble.StackingRegressor(estimators,final_estimator=None,*,cv=None,n_jobs=None,passthrough=False,verbose=0)

Estimators:堆叠在一起的基础模型。

Final_estimator:用来结合基础模型的模型,default:LogisticRegression。

Cv:定义交叉验证的split策略,default:5折交叉验证。

用于做回归那么它stacking对应的基础模型和元模型都是用于做回归;如果是用于做分类,那么也要用对应功能的模型。

importnumpyasnp\nimportmatplotlib.pyplotasplt\nimportmatplotlib.gridspecasgridspec\nimportitertools\nfromsklearn.linear_modelimportLogisticRegression\nfromsklearn.svmimportSVC\nfromsklearn.ensembleimportRandomForestClassifier\nfrommlxtend.classifierimportEnsembleVoteClassifier\nfrommlxtend.dataimportiris_data\nfrommlxtend.plottingimportplot_decision_regions

#InitializingClassifiers\nclf1=LogisticRegression(random_state=0)\nclf2=RandomForestClassifier(random_state=0)\nclf3=SVC(random_state=0,probability=True)\neclf=EnsembleVoteClassifier(clfs=[clf1,clf2,clf3],weights=[2,1,1],voting='soft')\n\n#Loadingsomeexampledata\nX,y=iris_data()\nX=X[:,[0,2]]\n\n#PlottingDecisionRegions\ngs=gridspec.GridSpec(2,2)\nfig=plt.figure(figsize=(10,8))\n\nforclf,lab,grdinzip([clf1,clf2,clf3,eclf],\n['LogisticRegression','RandomForest','RBFkernelSVM','Ensemble'],\nitertools.product([0,1],repeat=2)):\nscores=cross_val_score(clf,X,y,cv=3,scoring='accuracy')\nprint("Accuracy:%.2f(+/-%.2f)[%s]"%(scores.mean(),scores.std(),lab))\nclf.fit(X,y)\nax=plt.subplot(gs[grd[0],grd[1]])\nfig=plot_decision_regions(X=X,y=y,clf=clf,legend=2)\nplt.title(lab)\nplt.show()

回复stacking,获得代码文件

如果你还想了解更多这方面的信息,记得收藏关注本站。

本站涵盖的内容、图片、视频等数据,部分未能与原作者取得联系。若涉及版权问题,请及时通知我们并提供相关证明材料,我们将及时予以删除!谢谢大家的理解与支持!

Copyright © 2023