Model ensembling

来源:互联网 发布:linux设置ip地址命令 编辑:程序博客网 时间:2024/05/01 19:02

说明:
http://mlwave.com/kaggle-ensembling-guide/
代码:
https://github.com/emanuele/kaggle_pbr/blob/master/blend.py

Voting ensembles

  • 采用投票的方式,听大多数人的意见
  • 各个模型的相关性不要太大,尽可能多样性。比如一个组合的accuracy是 80% 80% 70%,另一个的为 80% 70% 60%,后一个组合的效果往往更好
  • 增加weighing。比如,最好的model,得分算三倍。也就是,几个弱分类器在某一个问题上一致,才能打败最好的分类器。

Averaging

  • 平均,避免过拟合,有更好的泛化能力
  • Rank averaging。不同model的输出范围不一致。
    • 比如一个model输出的是:
      Id,Prediction
      1,0.35000056
      2,0.35000002
      3,0.35000098
      4,0.35000111
    • 另一个的输出的是:
      Id,Prediction
      1,0.57
      2,0.04
      3,0.96
      4,0.99
    • 直接将他们average,意义不大。所以,解决方法是, first turn the predictions into ranks, then averaging these ranks:
      1. Id,Rank,Prediction
        1,1,0.35000056
        2,0,0.35000002
        3,2,0.35000098
        4,3,0.35000111
      2. Id,Prediction
        1,0.33
        2,0.0
        3,0.66
        4,1.0

Stacked Generalization & Blending

参考代码,会比较直观点。

  1. 训练集合 X, Y,预测集合 X_submission
  2. 对训练集合X, Y,进行k折
  3. 设置多个不同的分类器集合clf
  4. 循环clf,标记为 j

    • 循环k折,标记为 i,得到的这次的 train 和 test
      • 用 x_train 和 y_train 来训练,得到一个模型
      • 用这个模型来对 x_test 进行预测,记录预测结果dataset_blend_train(它是一个 train样本数*j 的矩阵,用来做下一步的训练集,这一小步,就得到了对于第 j 个模型,x_test部分样本对应的 新的train集的值
      • 将这个模型用于整个的预测集合X_submission,用dataset_blend_test_j 记录第 i 次得到的 新的submission集的值中间结果
    • 这时,k折情况跑完,对中间结果dataset_blend_test_j取平均,得到dataset_blend_test第j维的值 (它是一个 submission样本数*j 的矩阵,作为 新的submission集的值
  5. 上一个stage跑完,进入下一个stage,用一个LogisticRegression,以新的train集dataset_blend_train,作为训练,对应的标签,当然是最原始的Y

  6. 得到的模型,用于新的submission集dataset_blend_test,得到Y_submission。
0 0