zoukankan      html  css  js  c++  java
  • Kaggle机器学习之模型集成(stacking)

    Stacking是用新的模型(次学习器)去学习怎么组合那些基学习器,它的思想源自于Stacked Generalization这篇论文。如果把Bagging看作是多个基分类器的线性组合,那么Stacking就是多个基分类器的非线性组合。Stacking可以很灵活,它可以将学习器一层一层地堆砌起来。

    根据上图分析一下stacking具体步骤:

      1)TrainingData进行5-fold分割,正好生成5个model,每个model预测训练数据的1/5部分,最后合起来正好是一个完整的训练集Predictions,行数与TrainingData一致。

      2)TestData数据,model1-model5每次都对TestData进行预测,形成5份完整的Predict(绿色部分),最后对这个5个Predict取平均值,得到测试集Predictions。

      3)上面的1)与2)步骤只是用了一种算法,如果用三种算法,就是三份“训练集Predictions与测试集Predictions”,可以认为就是形成了三列新的特征,训练集Predictions与测试集Predictions各三列。

      4)3列训练集Predictions+TrainingData的y值,就形成了新的训练样本数据;测试集Predictions的三列就是新的测试数据。

      5)利用meta model(模型上的模型),其实就是再找一种算法对上述新数据进行建模预测,预测出来的数据就是提交的最终数据

     

    备注:本例中第3)步中只说了三种算法形成三份训练集Predictions作为第二层的特征,其实三种特征有点少,容易overfitting,尽量多用一些算法,每种算法也可以根据hyperopt的搜索参数对应不同的模型,这样就会有很多模型产生,也就是会形成多份“训练集Predictions”以及多份“测试集Predictions”,这样在第5)建立的模型及预测的结果相对会好一些。

    kaggle选手stacking举例:

    如果你没有idea了的话,就模型融合吧!模型融合是能够快速提高比赛成绩的捷径,现在的比赛几乎没有人不用到这个技巧,通常获胜者会对很多很多模型进行融合,并且会选择不同的模型融合的方式。这里有一篇非常好的模型融合解析博文,相信每个看过它的人都会对模型融合有一个清楚的了解

    本次比赛中我使用了两种模型融合方式,一种是Averaging,一种是Stacking。

    先来说说Stacking,因为这场比赛一名贡献比较大的选手分享了一个叫StackNet的库,作为新手我就直接用了。首先我用我的xgboost cv集交叉预测出结果作为feature的一部分放到train data中,再对test data进行预测的结果作为feature的一部分放到test data中,再在第二层上选择了Logistic Classifer,GradientBoostingClassifer,AdaBoostClassifer,NNSoft-maxClassfier,RandomForestClassifer等进行交叉预测,第三层选取了一个randomForest作为最后的结果训练和预测。Stacking主要增多了模型的diversity,使我的成绩上升了至少0.003的量级。

    然后是Averaging,之前提到过Stacking需要交叉预测,我就选取了10组随机种子分别对训练集进行10-kfold交叉预测取平均,以及每个flod训练预测的时候我都对我的xgboost选取5个随机种子取平均。也就是说,在第一层Stacking的CV集交叉预测时我总共训练了500个模型进行平均。分数的提升大约在0.002左右。

    直到比赛结束看了排名靠前的选手的模型融合后,才发现自己对于模型融合只是做了一点微小的工作,提升空间还非常大。详情可以看FE部分分享的solution链接。

     

  • 相关阅读:
    023_带标签的break和continue
    5.利用for循环打印九九乘法表
    4.用while和for循环输出1到100之间能被5整除的数,且每行输出3个。
    Python字典由value查key
    python保存字典到文件
    python查找列表中某个元素所有下标的两个方法
    聚类算法评估指标:IoU, mPA, MoF
    二分图与匈牙利算法,Python实现
    行为检测和识别领域的一些研究人员的主页及文章代码的链接
    python 计时
  • 原文地址:https://www.cnblogs.com/gczr/p/7144508.html
Copyright © 2011-2022 走看看