1. 程式人生 > >bagging和boosting的區別

bagging和boosting的區別

bagging和boosting是提高監督式學習方法準確率的兩種常用的整合方法。

1、bagging

bagging即套袋法,是並行式的整合學習方法,隨機森林是bagging的一種。
執行步驟:
1、從原始訓練集中隨機抽取小部分資料當作新的訓練集。假設設定需要n個弱學習器,則需要抽取n次(放回抽樣),得到n個訓練集。
2、訓練弱學習器。每個訓練集訓練出一個弱學習器,得到n個弱學習器。
3、預測。測試資料在n個弱學習器上預測,得到n個結果,分類任務通過投票方式得到最終結果,迴歸任務將n個結果的均值作為最終結果。

2、boosting

boosting是一種可將弱學習器提升為強學聯器的演算法,AdaBoost和提升樹都是boosting的一種。
關於boosting的兩個核心問題:

1、在每一輪訓練後,如何改變訓練資料的權值/概率分佈?

通過提高前一個弱學習器分類錯誤的樣本的權值,或者降低分類正確的樣本權值,來使得新一個弱學習器對對誤分類的樣本有更好的效果。

以AdaBoost演算法為例:
初始化所有資料的權值都為1,共有10個訓練資料,第一個弱學習器訓練資料後,有7個數據分類正確,3個數據分類錯誤。那麼,錯誤為類的資料權值為 7 3

\frac{7}{3} ,新的資料權值用於下一個弱學習器的訓練,這個新權值怎麼來?
為了讓正確分類的權值和錯誤分類的權值一樣,那麼 3 x = 7
1 3*x = 7*1
,解得 x = 7 3 x = \frac{7}{3}

2、通過什麼方式來組合弱學習器?

通過加法將弱分類器進行線性組合。

以AdaBoost演算法為例:
經過不斷地更新樣本權重和訓練新的弱學習器,得到n個弱學習器。

假設弱學習器A正確分類的權重和為7,錯誤分類的權重和為3,那弱學習器A的模型權重為 ln 7 3 \ln\frac{7}{3} 。最後將所有弱學習器的預測結果乘以模型權重所得的結果之和作為最終的預測結果。

3、bagging和boosting的區別

bagging boosting
樣本選擇 放回抽樣 全量選取
樣本權重 權重相等 錯誤率大的樣本權重越大
弱學習器權重 權重相等 準確率大的分類器權重越大
平行計算 可以並行 不能並行,各個分類器按順序生成,後一個模型引數要依賴前面的模型結果

4、sklearn 中的 AdaBoost

from sklearn.ensemble import AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier

base_estimator = DecisionTreeClassifier(max_depth=2)
#base_estimator: 弱學習器使用的模型
#n_estimators: 使用的弱學習器的最大數量
model = AdaBoostClassifier(base_estimator = base_estimator, n_estimators = 4)

model.fit(x_train, y_train)
model.predict(x_test)