快速理解決策樹 bootstrap,bagging,boosting,online boosting-五個概念
決策樹是一種解決分類問題的絕好方法,顧名思義,它正像一棵大樹一樣,由根部不斷生長出很多枝葉;它的優點實在太多,比如可以避免缺失值的影響、可以處理混合預測、模型容易展示等。然而,決策樹的實際應用也絕不簡單,如果樹根稍有不穩、或者枝幹略有差池,樹就可能會徹底長偏啦,我們總是需要仔細挑選單棵決策樹、或適當的組合。
單棵決策樹
這是統計分析領域比較常用、機器學習領域也用得爛熟的分類演算法:一棵大樹上每支葉子自成一類。在實際業務中,大家最關心的問題包括:在每一個節點該選擇哪個屬性進行分割?該怎樣分割才能效果最好?這些問題通常都可以通過SASEnterprise Miner中強大的互動決策樹功能解決,選擇最大的logworth值來選擇拆分變數、建立拆分規則。
不過,這樣的分類過程到底應該在什麼時候結束呢?最直觀的方式當然是在每個子節點只有一種型別的記錄時停止分類,但是這樣可能會使得樹的節點過多,導致過擬合問題(overfitting),即該決策樹對訓練資料可以得到很低的錯誤率,但是運用到驗證資料上時卻錯誤率極高。所以,剪枝是優化和解決這類問題的必要做法,我們之前介紹過的K折交叉驗證(點選閱讀)也可用來對原始決策樹進行驗證和裁減,從而得到最優決策樹。單棵決策樹的實現在SASEnterprise Miner中有現成的節點可直接使用。
決策樹是一種解決分類問題的絕好方法,顧名思義,它正像一棵大樹一樣,由根部不斷生長出很多枝葉;它的優點實在太多,比如可以避免缺失值的影響、可以處理混合預測、模型容易展示等。然而,決策樹的實際應用也絕不簡單,如果樹根稍有不穩、或者枝幹略有差池,樹就可能會徹底長偏啦,我們總是需要仔細挑選單棵決策樹、或適當的組合。
單棵決策樹
這是統計分析領域比較常用、機器學習領域也用得爛熟的分類演算法:一棵大樹上每支葉子自成一類。在實際業務中,大家最關心的問題包括:在每一個節點該選擇哪個屬性進行分割?該怎樣分割才能效果最好?這些問題通常都可以通過SASEnterprise Miner中強大的互動決策樹功能解決,選擇最大的logworth值來選擇拆分變數、建立拆分規則。
不過,這樣的分類過程到底應該在什麼時候結束呢?最直觀的方式當然是在每個子節點只有一種型別的記錄時停止分類,但是這樣可能會使得樹的節點過多,導致過擬合問題(overfitting),即該決策樹對訓練資料可以得到很低的錯誤率,但是運用到驗證資料上時卻錯誤率極高。所以,剪枝是優化和解決這類問題的必要做法,我們之前介紹過的K折交叉驗證(點選閱讀)也可用來對原始決策樹進行驗證和裁減,從而得到最優決策樹。單棵決策樹的實現在SASEnterprise Miner中有現成的節點可直接使用。
除了剪枝、交叉驗證等手段外,為了有效減少單決策樹帶來的問題,與決策樹相關的組合分類(比如Bagging,Boosting等演算法)也逐漸被引入進來,這些演算法的精髓都是通過生成N棵樹(N可能高達幾百)、最終形成一棵最適合的結果分類樹。有人戲稱這是三個臭皮匠頂一個諸葛亮的演算法:雖然這幾百棵決策樹中的每一棵相對於C4.5演算法來說可能都很簡單,但是他們組合起來卻真的很強大。下面我們就來簡單介紹幾種常見的組合演算法:
1 booststraping:意思是依靠你自己的資源,稱為自助法,它是一種有放回的抽樣方法
,它是非引數統計中一種重要的估計統計量方差進而進行區間估計的統計方法。
其核心思想和基本步驟如下:
(1)採用重抽樣技術從原始樣本中抽取一定數量(自己給定)的樣本,此過程允許重複抽樣。
(2)根據抽出的樣本計算統計量T。
(3)重複上述N次(一般大於1000),得到統計量T。
(4)計算上述N個統計量T的樣本方差,得到統計量的方差。
應該說是Bootstrap是現代統計學較為流行的方法,小樣本效果好,通過方差的估計可以構造置信區間等。
2 bagging:bootstrap aggregating的縮寫。讓該學習演算法訓練多輪,每輪的訓練集由從初始的訓練集中隨機取出n個訓練樣本組成,某個訓練樣本在某訓練集中可能出現多次或者不出現,訓練之後可得到一個預測函式序列h_1,h_n,也類似於一個森林。最終的預測函式H對分類問題採用投票方式,對迴歸問題(加權平均好點,但是沒)採用簡單平均方式判別。訓練R個分類器f_i,分類器之間其他相同就是引數不相同。其中f_i是通過從訓練集和中隨機取N次樣本訓練得到的。對於新樣本,用這個R個分類器去分類,得到最多的那個類別就是這個樣本的最終類別。
3 boost:其中主要的是adaboost(adaptiveboosting)。初始化時對每一個訓練賦予相同的權重1/n,然後用該學演算法對訓練集訓練t輪,每次訓練後,對訓練失敗的訓練列賦予較大的權重,也就是讓學習演算法在後續的學習中集中對比較難的訓練列進行訓練(就是把訓練分類錯了的樣本,再次拿出來訓練,看它以後還敢出錯不),從而得到一個預測函式序列h_1,h_m,其中h_i也有一定的權重,預測效果好的預測函式權重大,反之小。最終的預測函式H對分類問題採用有權重的投票方式,對迴歸問題採用加權平均的方式對新樣本判別。類似bagging方法,但是訓練是序列的,第K個分類器訓練時,關注對前k-1分類器中錯誤,不是隨機取樣本,而是加大取這些分錯的樣本的權重。
4 Online Boosting
線上 Boosting演算法重點研究如何替換弱分類器來學習時變的樣本集,本文提出了一種新的線上 Boosting演算法,各弱學習器調節自身引數進而適應時變的環境。與以往直接替換學習器的方式不同,該方法隨著新的樣本集的到來調節弱分類器的引數,使分類正確率高的弱分類器有較高的權重,而分類正確率低的弱分類器的權重也會相應降低。
下面講一下Poisson重取樣對每一訓練樣本,按照引數為 λ的 Poisson分佈(泊松分佈)得到一個隨機數,對樣本重複訓練該隨機數次。一個基學習器訓練完畢之後將該樣本繼續傳遞給下一個基學習器。當一個基學習器誤分類一個訓練樣本,該樣本在提交給下一個基學習器時,其對應的 Poisson 分佈引數 λ增加;反之樣本對應的 Poisson分佈引數減少,並通過這些來更新每個基學習器的誤差 ε 。從這個角度,訓練樣本的權重更新方法和離線 AdaBoost相同。
其流程如下:
其中:λm 的作用是控制整個基分類器的誤差,因為線上進來的不知一個樣本。有很多樣本。
下面給出online boosting和online adboosting的思路。
在目標影象的目標物體附近選擇正樣本,離目標物體遠的區域作為負樣本。
OAB1 =
線上boosting(搜尋半徑r=1,每幀1個正樣本)
OAB5 = 線上boosting(搜尋半徑r=5,每幀45個正樣本)
5 bagging和boosting的區別:二者的主要區別是取樣本方式不同。bagging採用均勻取樣,而boosting根據錯誤率來取樣,因此boosting的分類精度要由於bagging。baging的訓練集選擇是隨機的,各輪訓練集之前互相獨立,而boosting的各輪訓練集的選擇與前面各輪的學習結果相關;bagging的各個預測函式沒有權重,而boost有權重;bagging的各個函式可以並行生成,而boosting的各個預測函式只能順序生成。對於象神經網路這樣極為消耗時間的演算法,bagging可通過並行節省大量的時間開銷。bagging和boosting都可以有效地提高分類的準確性。在大多數資料集中,boosting的準確性要比bagging高。有一些資料集中,boosting會退化-overfit。boosting思想的一種改進型adaboost方法在郵件過濾,文字分類中有很好的效能。
6 gradient boost(Mart,Treenet):boosting是一種思想,GradientBoosting是一種實現Boosting的方法,它的主要思想是,每一次建立模型,是在之前建立模型損失函式的梯度下降方向。損失函式描述的是模型的不靠譜程度,損失函式越大,說明模型越容易出錯。如果我們的模型能夠讓損失函式持續的下降,說明我們的模型在不停的改進,而
最好的方式就是讓損失函式在其梯度的方向下降。
7 RandomForest:隨機森林,使用隨機的方式建立一個森林,森林裡面有很多的決策樹組成,隨機森林的每一課決策樹之間是沒有關聯的。在得到森林之後,當有一個新的輸入樣本進入,就讓森林中的每一顆決策樹分別進行判斷,看看這個樣本屬於那個類,然後看看哪一類被選擇多,就預測為那一類。在建立決策樹的過程中,需要注意兩點-取樣和完全分裂。首先是兩個隨機取樣的過程,randomforest對輸入的資料要經行行,列的取樣。對於行取樣,採用有回放的方式,也就是在取樣得到的樣本集合中,可能有重複的樣本。假設輸入樣本為N個,那麼取樣的樣本也為n個。這樣使得在訓練的時候,每一顆樹的輸入樣本都不是全部樣本,使得相對不容易出現over-fitting。然後進行取樣,從M個feature中,選擇m個。之後就是對取樣之後的資料使用完全分裂的方式建立出決策樹,這樣決策樹的某一個葉子節點要麼是無法繼續分裂,要麼裡面的所有樣本都是指向的同一類分類。一般的決策樹都有一個重要的步驟,剪枝,但是這裡不這樣幹,由於之前的兩個隨機取樣的過程保證了隨機性,所以就算不剪枝,也不會over-fitting。
總結:
按這種演算法得到的隨機森林中的每一顆樹都是很弱的,但是大家組合起來就很厲害了。可以這樣比喻隨機森林:每一顆決策樹就是一個精通於某一個窄領域的專家,這樣在隨機森林中就有了很多個精通不同領域的專家,對於新的樣本,可以用不同的角度看待它,最終由各個專家,投票得到結果。俗話說三個臭皮匠賽過諸葛亮,各類組合演算法的確有其優越之處;我們也認為,模型效果從好到差的排序通常依次為:隨機森林>Boosting> Bagging > 單棵決策樹。但歸根結底,這只是一種一般性的經驗、而非定論,應根據實際資料情況具體分析。就單棵決策樹和組合演算法相比較而言,決策樹相關的組合演算法在提高模型區分能力和預測精度方面比較有效,對於像決策樹、神經網路這樣的“不穩定”演算法有明顯的提升效果,所以有時會表現出優於單棵決策樹的效果。但複雜的模型未必一定是最好的,我們要在具體的分析案例中,根據業務需求和資料情況在演算法複雜性和模型效果之間找到平衡點。