Kaggle知識點:模型加權集成7種方法

在競賽中如果對多個(ge) 預測結果進行集成,最方便的做法是直接對預測結果進行加權求和。此時不同任務,加權方法不同:

  • 分類任務:類別投票 & 概率值加權
  • 回歸任務:預測值加權
  • 排序任務:排序次序加權
  • 目標檢測任務:預測結果NMS
  • 語義分割任務:像素類別投票 & 加權

在本文中我們(men) 將介紹最常見的分類 & 回歸任務的結果加權方法,也就是Blend操作。

多樣性 & 精度差異

在對結果進行集成時需要考慮如下兩(liang) 點:

  • 模型的多樣性:
  • 模型的精度差異;

集成學習(xi) 的精度收益是需要模型&預測結果的多樣性,如果多樣性不足,則最終預測結果和單個(ge) 模型類似。

精度差異是指模型之間的精度差異,如果精度差異很大最終集成的效果也不會(hui) 很好。如下情況2的模型精度差異就較大。

三個(ge) 模型精度:[0.9, 0.92, 0.92] 三個(ge) 模型精度:[0.9, 0.8, 0.7]

Out of fold

Out of fold又名袋外預測,是一個(ge) 模型在交叉驗證的過程中使用訓練部分進行訓練,然後對驗證集進行預測,交替得到訓練集和測試集預測結果。

如果我們(men) 擁有三個(ge) 模型,通過交叉驗證可以得到3個(ge) 訓練集預測結果和3個(ge) 驗證集預測結果。

如下展示的幾種方法,都需要訓練集標簽 與(yu) 訓練集預測結果搜索得到參數,然後將參數在測試集上進行使用。

方法1:均值加權

  • 原理:對所有模型的預測結果計算均值;
  • 優點:簡單,過擬合可能性低;
  • 缺點:會受到模型原始精度差異的影響;

oof_preds = [] for col in oofCols:     oof_preds.append(oof_df[col])y_avg = np.mean(np.array(oof_preds), axis=0)

方法2:權重加權

  • 原理:對所有模型的預測結果加權求和;
  • 優(you) 點:比均值更加可控;
  • 缺點:權重需人工設置,更容易過擬合;
weights = [1,2,3]
y_wtavg = np.zeros(len(oof_df)) for wt, col in zip(weights, oofCols):
    y_wtavg += (wt*oof_df[col])y_wtavg = y_wtavg / sum(weights)

方法3:排序加權

  • 原理:對預測結果進行排序,使用次序代替原始取值;
  • 優(you) 點:適合分類任務,對概率進行集成;
  • 缺點:會(hui) 受到模型原始精度差異的影響;
rankPreds = [] for i, col in enumerate(oofCols):
    rankPreds.append(oof_df[col].rank().values)y_rankavg = np.mean(np.array(rankPreds), axis=0)

方法4:排序權重加權

  • 原理:對預測結果進行排序,使用次序進行加權求和;
  • 優(you) 點:比均值更加可控;
  • 缺點:權重需人工設置,更容易過擬合;
rankPreds = []
weights = [1,2,3] for i, col in enumerate(oofCols):
    rankPreds.append(oof_df[col].rank().values * weights[i])
y_rankavg = np.mean(np.array(rankPreds), axis=0)

方法5:爬山法加權

  • 原理:權重進行搜索,保留最優(you) 的權重;
  • 優(you) 點:可以自動權重權重大小;
  • 缺點:更容易過擬合;
for w1 in np.linspace(0, 1, 100):
  for w2 in np.linspace(0, w2, 100):
    w3 = 1 - w1 - w3
    
    如果 w1, w2, w3取得更好的精度,保留權重
    否則嚐試下一組權重組合

方法6:線性回歸加權

  • 原理:使用線性回歸確定權重
  • 優(you) 點:可以自動權重權重大小;
  • 缺點:需要額外訓練,容易過擬合;
from sklearn.linear_model import LinearRegressionlr = LinearRegression(fit_intercept=False)
lr.fit(
   三個(ge) 模型對訓練集預測結果,
   訓練集標簽
)lr.coef_ # 線性回歸的權重 

方法7:參數優(you) 化加權

  • 原理:使用優(you) 化方法搜索權重
  • 優(you) 點:可以自動權重權重大小;
  • 缺點:需要額外訓練,容易過擬合;
def f(x):
    return x[0]2 + x[1]2 + (5 - x[0] - x[1])
    
from scipy import optimize
minimum = optimize.fmin(f, [1, 1])

【競賽報名/項目谘詢+微信:mollywei007】

上一篇

美本申請可以參加的社科類競賽推薦!(下)

下一篇

SAT考試中的數學部分難嗎?SAT如何考800分?

你也可能喜歡

  • 暫無相關文章!

評論已經被關(guan) 閉。

插入圖片
返回頂部