<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Kaggle知識點(diǎn):模型加權(quán)集成7種方法

          共 2634字,需瀏覽 6分鐘

           ·

          2022-11-24 22:51

          作者:Coggle

          Kaggle知識點(diǎn):模型加權(quán)集成7種方法

          簡介
           

          在競賽中如果對多個預(yù)測結(jié)果進(jìn)行集成,最方便的做法是直接對預(yù)測結(jié)果進(jìn)行加權(quán)求和。此時不同任務(wù),加權(quán)方法不同:

          • 分類任務(wù):類別投票 & 概率值加權(quán)
          • 回歸任務(wù):預(yù)測值加權(quán)
          • 排序任務(wù):排序次序加權(quán)
          • 目標(biāo)檢測任務(wù):預(yù)測結(jié)果NMS
          • 語義分割任務(wù):像素類別投票 & 加權(quán)

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

          多樣性 & 精度差異

          在對結(jié)果進(jìn)行集成時需要考慮如下兩點(diǎn):

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

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

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

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

          Out of fold

          Out of fold又名袋外預(yù)測,是一個模型在交叉驗(yàn)證的過程中使用訓(xùn)練部分進(jìn)行訓(xùn)練,然后對驗(yàn)證集進(jìn)行預(yù)測,交替得到訓(xùn)練集和測試集預(yù)測結(jié)果。

          如果我們擁有三個模型,通過交叉驗(yàn)證可以得到3個訓(xùn)練集預(yù)測結(jié)果和3個驗(yàn)證集預(yù)測結(jié)果。

          如下展示的幾種方法,都需要訓(xùn)練集標(biāo)簽 與 訓(xùn)練集預(yù)測結(jié)果搜索得到參數(shù),然后將參數(shù)在測試集上進(jìn)行使用。

          方法1:均值加權(quán)

          • 原理:對所有模型的預(yù)測結(jié)果計(jì)算均值;
          • 優(yōu)點(diǎn):簡單,過擬合可能性低;
          • 缺點(diǎn):會受到模型原始精度差異的影響;
          oof_preds = []
          for col in oofCols:
              oof_preds.append(oof_df[col])

          y_avg = np.mean(np.array(oof_preds), axis=0)

          方法2:權(quán)重加權(quán)

          • 原理:對所有模型的預(yù)測結(jié)果加權(quán)求和;
          • 優(yōu)點(diǎn):比均值更加可控;
          • 缺點(diǎn):權(quán)重需人工設(shè)置,更容易過擬合;
          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:排序加權(quán)

          • 原理:對預(yù)測結(jié)果進(jìn)行排序,使用次序代替原始取值;
          • 優(yōu)點(diǎn):適合分類任務(wù),對概率進(jìn)行集成;
          • 缺點(diǎn):會受到模型原始精度差異的影響;
          rankPreds = []
          for i, col in enumerate(oofCols):
              rankPreds.append(oof_df[col].rank().values)

          y_rankavg = np.mean(np.array(rankPreds), axis=0)

          方法4:排序權(quán)重加權(quán)

          • 原理:對預(yù)測結(jié)果進(jìn)行排序,使用次序進(jìn)行加權(quán)求和;
          • 優(yōu)點(diǎn):比均值更加可控;
          • 缺點(diǎn):權(quán)重需人工設(shè)置,更容易過擬合;
          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:爬山法加權(quán)

          • 原理:權(quán)重進(jìn)行搜索,保留最優(yōu)的權(quán)重;
          • 優(yōu)點(diǎn):可以自動權(quán)重權(quán)重大??;
          • 缺點(diǎn):更容易過擬合;
          for w1 in np.linspace(0, 1, 100):
            for w2 in np.linspace(0, w2, 100):
              w3 = 1 - w1 - w3
              
              如果 w1, w2, w3取得更好的精度,保留權(quán)重
              否則嘗試下一組權(quán)重組合

          方法6:線性回歸加權(quán)

          • 原理:使用線性回歸確定權(quán)重
          • 優(yōu)點(diǎn):可以自動權(quán)重權(quán)重大??;
          • 缺點(diǎn):需要額外訓(xùn)練,容易過擬合;
          from sklearn.linear_model import LinearRegression

          lr = LinearRegression(fit_intercept=False)
          lr.fit(
             三個模型對訓(xùn)練集預(yù)測結(jié)果,
             訓(xùn)練集標(biāo)簽
          )

          lr.coef_ # 線性回歸的權(quán)重

          方法7:參數(shù)優(yōu)化加權(quán)

          • 原理:使用優(yōu)化方法搜索權(quán)重
          • 優(yōu)點(diǎn):可以自動權(quán)重權(quán)重大??;
          • 缺點(diǎn):需要額外訓(xùn)練,容易過擬合;
          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])



          瀏覽 31
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日日摸日日碰 | 爱操电影网站 | 国产精品成人无码久久久 | 欧美色图五月天 | 操屄的免费视频 |