模型融合-bagging,boosting,stacking

先把主要的算法進行整理,後續會對py結合算法的實踐進行整理。

第五彈,模型融合

目的是爲了提高機器學習的效果,其實就是整理幾個機器算法進行參考計算後續的訓練。

三個模型融合思路:

1、bagging,訓練多個分類器,結果取平均。並列的進行訓練,所有的分類器無關並行進行訓練。

分類:可以用於結果做vote。

迴歸:可以對這些模型結果取平均。


2、boosting,從弱學習開始加強,加權訓練,這是串聯的,也就說後一個訓練的數據要參考或者直接就是拿前一個訓練的數據結果進行訓練。


上式中,arg min f(x) 是指使得函數 f(x) 取得其最小值的所有自變量 x 的集合。F是分類器

3、stacking,也是集合了多個分類器或者回歸模型。


1、bagging模型

代表就是隨機深林,深林是指決策樹這樣的算法,並行計算,隨機是指1、數據隨機。2、特徵隨機。一般可以設置爲60%的量。

由於數據和特徵都是隨機的,並且量不是全部,所以訓練出來的模型一定不一樣。

優勢:

1、可以處理很高維度的,也就是特徵特別多的數據,並且不用做隨機變量特徵選擇。

2、訓練出來後可以對隨機變量的特徵進行重要性的排序。

eg:ABCD分別是隨機變量的特徵。

建模1:A+B+C+D——建模——error1(錯誤率)

建模2:A+B2+C+D——建模——error2(錯誤率)

這裏把B2的數據進行隨機生成,比如如果是年齡,這裏B2可以改爲0.1,290等這樣不可能的隨機數據,或者可以直接改爲A+C+D進行建模。

結果:error1約等於或者大於error2 則認爲B特徵不重要,如果相反,error2大於error1,說明B重要。可以取消B特徵。

有些算法不適合這個bagging,比如KNN,這個算法就不適合,因爲泛化能力差。

樹模型,理論上是隨機數據越多越好,但是其實到一定的數量,就會出現波動,所以這點需要注意。


2、Boosting模型

代表是adaboost,xgboost(競賽重點)

Adaboost迭代算法,分類思路是根據前一次的分類結果進行數據權重的修改,如果某個數據這次分錯了,下次對這個數據更大權重。每個分類器根據自己準確性,確定自己的權重。其實對於adaboost就是一刀切。

Adaptive Boosting自適應增強的縮寫。

更詳細的思路如下:

  1. 初始化訓練數據的權值分佈。如果有N個樣本,則每一個訓練樣本最開始時都被賦予相同的權重:1/N,很多人都認爲是均勻分佈,這樣也比較好理解。
  2. 訓練弱分類器。具體訓練過程中,如果某個樣本點已經被準確地分類,那麼在構造下一個訓練集中,它的權重就被降低;相反,如果某個樣本點沒有被準確地分類,那麼它的權重就得到提高。然後,權重更新過的樣本集被用於訓練下一個分類器,整個訓練過程如此迭代地進行下去。
  3. 將各個訓練得到的弱分類器組合成強分類器。各個弱分類器的訓練過程結束後,加大分類誤差率小的弱分類器的權重,使其在最終的分類函數中起着較大的決定作用,而降低分類誤差率大的弱分類器的權重,使其在最終的分類函數中起着較小的決定作用。換言之,誤差率低的弱分類器在最終分類器中佔的權重較大,否則較小。

具體的算法+公式:

給定一個訓練數據集T={(x1,y1), (x2,y2)…(xN,yN)},其中實例,而實例空間,yi屬於標記集合{-1,+1},Adaboost的目的就是從訓練數據中學習一系列弱分類器或基本分類器,然後將這些弱分類器組合成一個強分類器。

1、首先,初始化訓練數據的權值分佈。每一個訓練樣本最開始時都被賦予相同的權重:1/N。


2、由於adaboost是一刀切,所以第一次訓練的結束依據就是錯誤率最低的切割是結束的時候。

根據權重爲1/N,求出最小的錯誤的分割線。分類器是二分類:


不是屬於-1,就是1,這裏後續會用到正負。

分好的標準就是求出最小錯誤分割線。下面式子是錯誤率計算,和一開始的均勻分佈有聯繫,求出所有錯誤的概率之和。


當分割爲em最小時候,就是這次分割的標準。

3、先對Gm進行係數迭代。後對訓練數據集的權值分佈修改。


am這裏表示了Gm在未來模型中的重要程度。em <= 1/2時,am >= 0,且am隨着em的減小而增大,意味着分類誤差率越小的基本分類器在最終分類器中的作用越大。

4、對訓練數據集的權值分佈修改。

可以看到,其中的,Gm是模型分類結果,yi是真實的分類結果,兩個相乘,如果正確的分類,就是正值,如果錯誤就是負值。am是由第一次訓練的結果可以得到。

新更新的權重w,是要根據兩個主要方面進行確定,1、由分錯概率。2、由分類器與真實的分類乘積,分錯爲-1,分對爲1.

由log函數知道,如果em<0.5,則log中的函數爲大於1,am爲正數時,說明分錯的小於一半,一刀切最優可以達到這樣的結果:1、當yi*Gm爲負數,說明分錯了,exp中的數爲正數,則exp是大於1的,所以權重就大。2、如果yi*Gm是正數,則exp中數爲負數數,exp結果是小於1,則權重小。Zm是爲了標準化歸一化。


迭代。

5、組合各個分類器


最終爲:


eg:

下面,給定下列訓練樣本,請用AdaBoost算法學習一個強分類器。


x爲樣本,y爲正確的分類器結果。

初始化均勻分佈,先計算錯誤率,當錯誤率爲0,停止。不爲0,就計算Gm係數和更新w。然後在新w基礎上更新錯誤率和係數,並且Gm第二次等於第一次的迭代的係數和Gm乘積+第二次的迭代。

求解步驟爲:

1、對於m=1,初始化訓練數據的權值分佈,令每個權值W1i = 1/N = 0.1,其中,N = 10,i = 1,2, ..., 10,然後分別對於m = 1,2,3, ...等值進行迭代。


這個時候分錯最少,爲三個分錯了,誤差率由於均勻分佈,所以是e1=0.3,三個分錯了。已經是最低了。

計算a1爲:


更新w權值


如果某個樣本被分錯了,則yi * Gm(xi)爲負,負負等正,結果使得整個式子變大(樣本權值變大),否則變小。

各個數據的權值分佈D2 = (0.0715, 0.0715, 0.0715, 0.0715, 0.0715,  0.0715, 0.1666, 0.1666, 0.1666, 0.0715)。由此可以看出,因爲樣本中是數據“6 7 8”被G1(x)分錯了,所以它們的權值由之前的0.1增大到0.1666,反之,其它數據皆被分正確,所以它們的權值皆由之前的0.1減小到0.0715。

分類函數f1(x)= a1*G1(x) = 0.4236G1(x)。

2、對於m=2,在權值分佈爲D2 = (0.0715, 0.0715, 0.0715, 0.0715, 0.0715,  0.0715, 0.1666, 0.1666, 0.1666, 0.0715)的訓練數據上,經過計算可得:

  1. 閾值v取2.5時誤差率爲0.1666*3(x < 2.5時取1,x > 2.5時取-1,則6 7 8分錯,誤差率爲0.1666*3),
  2. 閾值v取5.5時誤差率最低爲0.0715*4(x > 5.5時取1,x < 5.5時取-1,則0 1 2 9分錯,誤差率爲0.0715*3 + 0.0715),
  3. 閾值v取8.5時誤差率爲0.0715*3(x < 8.5時取1,x > 8.5時取-1,則3 4 5分錯,誤差率爲0.0715*3)。

這次的計算是要加入上次的誤差率的。判斷後閾值v取8.5時誤差率最低,故第二個基本分類器爲:


由此得出係數:


更新權值:


D3 = (0.0455, 0.0455, 0.0455, 0.1667, 0.1667,  0.01667, 0.1060, 0.1060, 0.1060, 0.0455)。被分錯的樣本“3 4 5”的權值變大,其它被分對的樣本的權值變小。


f2(x)=0.4236G1(x) + 0.6496G2(x)

3、m=3時。

在權值分佈爲D3 = (0.0455, 0.0455, 0.0455, 0.1667, 0.1667,  0.01667, 0.1060, 0.1060, 0.1060, 0.0455)的訓練數據上,經過計算可得:

  1. 閾值v取2.5時誤差率爲0.1060*3(x < 2.5時取1,x > 2.5時取-1,則6 7 8分錯,誤差率爲0.1060*3),
  2. 閾值v取5.5時誤差率最低爲0.0455*4(x > 5.5時取1,x < 5.5時取-1,則0 1 2 9分錯,誤差率爲0.0455*3 + 0.0715),
  3. 閾值v取8.5時誤差率爲0.1667*3(x < 8.5時取1,x > 8.5時取-1,則3 4 5分錯,誤差率爲0.1667*3)。

所以閾值v取5.5時誤差率最低,故第三個基本分類器爲:

所以G3(x)在訓練數據集上的誤差率e3 = P(G3(xi)≠yi) = 0.0455*4 = 0.1820。

係數計算爲:


更新訓練數據的權值分佈:

D4 = (0.125, 0.125, 0.125, 0.102, 0.102,  0.102, 0.065, 0.065, 0.065, 0.125)。被分錯的樣本“0 1 2 9”的權值變大,其它被分對的樣本的權值變小。

f3(x)=0.4236G1(x) + 0.6496G2(x)+0.7514G3(x)

此時,得到的第三個基本分類器sign(f3(x))在訓練數據集上有0個誤分類點。至此,整個訓練過程結束。

    G(x) = sign[f3(x)] = sign[ a1 * G1(x) + a2 * G2(x) + a3 * G3(x) ],將上面計算得到的a1、a2、a3各值代入G(x)中,得到最終的分類器爲:G(x) = sign[f3(x)] = sign[ 0.4236G1(x) + 0.6496G2(x)+0.7514G3(x) ]。

Adaboost 還有另外一種理解,即可以認爲其模型是加法模型、損失函數爲指數函數、學習算法爲前向分步算法的二類分類學習方法。

3、stacking模型

思想:拿前一階段出的數據訓練結果,應用到第二階段的訓練。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章