1. 程式人生 > >bagging和boosting以及rand-forest

bagging和boosting以及rand-forest

bagging:

  讓該學習演算法訓練多輪,每輪的訓練集由從初始的訓練集中隨機取出的n個訓練樣本組成,某個初始訓練樣本在某輪訓練集中可以出現多次或根本不出現,訓練之後可得到一個預測函式序列h_1,⋯ ⋯h_n ,最終的預測函式H對分類問題採用投票方式,對迴歸問題採用簡單平均方法對新示例進行判別。(可以平行計算,適用於類似於比較耗時的神經網路訓練)

  優點:將多個分類器整合,增強了決策面的表達,但模型基本相同(預測差不多),不能降低偏差,由於模型之間是有關聯的,所以資料預測的結果相關性比較強(通俗點說:預測的結果分佈比較密集,在一團)也就是降低了方差。

 

boosting:

       其中主要的是AdaBoost(Adaptive Boosting)。初始化時對每一個訓練例賦相等的權重1/n,然後用該學演算法對訓練集訓練t輪,每次訓練後,對訓練失敗的訓練例賦以較大的權重,也就是讓學習演算法在後續的學習中集中對比較難的訓練例進行學習,從而得到一個預測函式序列h_1,⋯, h_m , 其中h_i也有一定的權重,預測效果好的預測函式權重較大,反之較小。最終的預測函式H對分類問題採用有權重的投票方式,對迴歸問題採用加權平均的方法對新示例進行判別。(只能序列計算)   優點:對錯例權重的調整就是一種對資料的擾動,boosting是在sequential地最小化損失函式,其bias自然逐步下降。
  Rand forest:   是用隨機的方式建立一個森林,森林裡面有很多的決策樹組成,隨機森林的每一棵決策樹之間是沒有關聯的。在建立每一棵決策樹的過程中,有兩點需要注意 - 取樣與完全分裂。首先是兩個隨機取樣的過程,random forest對輸入的資料要進行行、列的取樣。對於行取樣,採用有放回的方式,也就是在取樣得到的樣本集合中,可能有重複的樣本。假設輸入樣本為N個,那麼取樣的樣本也為N個。然後進行列取樣,從M個feature中,選擇m個(m << M)。之後就是對取樣之後的資料使用完全分裂的方式建立出決策樹,這樣決策樹的某一個葉子節點要麼是無法繼續分裂的,要麼裡面的所有樣本的都是指向的同一個分類。一般很多的決策樹演算法都一個重要的步驟 - 剪枝,但是這裡不這樣幹,由於之前的兩個隨機取樣的過程保證了隨機性,所以就算不剪枝,也不會出現over-fitting。可以這樣比喻隨機森林演算法:每一棵決策樹就是一個精通於某一個窄領域的專家(因為我們從M個feature中選擇m讓每一棵決策樹進行學習),這樣在隨機森林中就有了很多個精通不同領域的專家,對一個新的問題(新的輸入資料),可以用不同的角度去看待它,最終由各個專家,投票得到結果。
   Rand forest與bagging的區別   1). Rand forest是選與輸入樣本的數目相同多的次數(可能一個樣本會被選取多次,同時也會造成一些樣本不會被選取到),而bagging一般選取比輸入樣本的數目少的樣本;   2). bagging是用全部特徵來得到分類器,而rand forest是需要從全部特徵中選取其中的一部分來訓練得到分類器; 一般Rand forest效果比bagging效果好!