二、 相關方法研究
2.3 整體學習演算法(ensemble learning algorithm)
整體學習演算法(ensemble learning algorithm)的運作是透過多次執行弱學習演算 法,並且針對每次產生的分類規則進行投票,最後整合投票的結果,透過多次執行可以 整合多個弱學習演算法,使其等價於一個強學習演算法。
1999 年,Bauer & Kohavi 的實驗研究[12]中,說明了使用以決策樹為基礎的整體學 習演算法會比使用單一的弱學習演算法來的準確,其中兩種常見的整體學習演算法有 bagging[13]和 boosting[14]兩種,其中 bagging 是利用不同的訓練資料集合產生不同的分 類規則,最後以投票的方式整合不同的分類規則;而 boosting 則是在每次的迭代中,更 新所有資料的權重,提高分類錯誤的資料權重,反之降低分類正確的資料權重,最後則 以有權重的投票方式整合每次迭代中產生的分類規則。
10
2.3.1 Bagging and Random Forest
1996 年 Breiman 提出 bagging(bootstrap aggregating)方法[13],它是採用投票表決的 方式結合多個分類規則,每個分類規則雖使用相同的學習演算法,但均使用不同的訓練 資料集合,所以每個分類規則彼此之間都有著些許差異。此演算法的流程圖如圖 7,利 用重複取樣(sampling with replacement)的方式產生多組訓練資料集合。例如,原始訓練 資料(training data)若有 n 筆資料,即對該原始訓練資料做 n 次的重複取樣,如此就可產 生一組訓練資料(training data 1),重複此取樣動作 m 次,最後會產生 m 組訓練資料 (training data 1~training data m),其中每一組訓練資料都可以訓練出一棵決策樹,如此就 可產生 m 棵決策樹(decision tree 1~decision tree m),最後,將測試資料(testing data)透過 m 棵決策樹產生 m 個分類結果,再以多數決投票的方式得到最終分類結果。
圖 7. Bagging 演算法之流程圖
2002 年,Breiman 提出 random forest[15],其與 bagging[13]差異之處在於訓練方式 的不同,在利用訓練資料產生決策樹時,bagging 使用的是全部的屬性,而 random forest 則隨機挑選出 M 個屬性,換言之,每一棵決策樹除了使用的訓練資料集合不同之外,
用以訓練決策樹的屬性也不盡相同,根據 Breiman 的建議,M 的值應為屬性數量的平方 根[16]。由於決策樹具高度敏感性,只要訓練資料有些微的不同,其所產生的決策樹就 會有很大的差異。因此,在產生一個決策樹的集合時,我們希望這些決策樹的相異性越 大越好,藉此,該決策樹的集合才能覆蓋包含更多的資訊,就此 random forest 除了強調 訓練資料的差異外,再加上屬性選擇上的差異,以期得到差異性更大的決策樹集合,讓
11
學習演算法可以涵蓋更多的資訊。
2.3.2 AdaBoost
1996 年 Freund 和 Schapire 提出 AdaBoost[17]演算法,AdaBoost 為 boosting 方法中 常被使用的演算法。Boosting 為整體學習演算法中常見的方式之一,boosting 的想法是 透過不斷的迭代執行之後,將一個原本屬於弱學習的演算法,使用有權重的投票機制輸 出結果,透過這樣的機制,不僅可以改善分類的準確度,並可以等價於一個強學習的演 算法。AdaBoost 演算法中,每一筆資料都有其權重,在每一次的迭代(iteration)執行之後,
會更新所有資料的權重,其中,分類錯誤的資料權重會增加,反之分類正確的資料則會 降低其權重,透過這樣的方式,讓學習演算法更重視那些被分類錯誤的資料,以提高分 類的準確度。
AdaBoost 的演算法如圖 8,輸入為 m 筆訓練資料,一個弱學習演算法(WeakLearn) 和最多迭代次數 T,每一筆訓練資料均被預設有相同之權重,進入第一次的迭代使用弱 學習演算法,計算該次分類錯誤率,若錯誤率大於 1/2 則離開迴圈,反之則需利用 計算 ,若 越大,表示該次分類錯誤的程度越高,並利用該值和此次
該筆資料分類正確與否來更新所有資料之權重, 為一小於 1 之數值,因此透過
此公式更新完權重後,會降低分類正確的資料權重,
分類錯誤的資料則會被提高權重。更新完所有資料的權重後,即進入第二次的迭代,會 依照目前的資料權重使用弱學習演算法,因此,弱學習演算法會較為重視在之前的迭代 中被分類錯誤的資料,因為在之前的迭代中被分類錯誤的資料權重會較分類正確的資料 高,直到此次迭代的錯誤率大於 1/2 或是迭代次數等於輸入的最多迭代次數 T 為止即離 開迴圈,最終分類結果是由每一次迭代的分類結果來投票,但每次分類結果的投票權重 並非相等,若該次迭代的分類錯誤率越低,即有越高的投票權重,最後透過有權重的投 票機制得到最終分類結果。
12
Algorithm AdaBoost
Input:sequence of m examples {(x1,y1),…,(xm,ym)} with labels yi Y={1,…,k}
Weak learning algorithm WeakLearn integer T specifying number of iterations Initialize D1
Do for t=1,2,…,T:
(i)=1/m for all i.
1. Call WeakLearn, providing it with the distribution Dt
2. Get back a hypothesis h
.
t
3. Calculate the error of h
:X → Y.
t: .
If > 1/2, then set T=t-1 and abort loop.
4. Set
5. Update distribution Dt:
,where Zt is a normalization constant (chosen so that Dt+1
Output the final hypothesis:
will be a distribution).
圖 8. AdaBoost 演算法
2.3.3 Stacking
Stacking[18]和 bagging、boosting 不同的地方在於,stacking 可以另一方式整合不同 的學習演算法(例如:決策樹、支援向量機等)的預測結果,圖 9 為 stacking 演算法之流 程圖。以決策樹為例,在產生 m 棵決策樹後,再利用此 m 棵決策樹對訓練資料所做的 預測結果,加以整理完成新的訓練資料(stacking training data)。
13
我們以圖 10 作為一個 stacking 的簡單範例,此範例為根據天氣情況分類「是否適 合打網球(PlayTennis)」,(a)有七筆訓練資料和(b)兩筆測試資料,利用重複取樣的方式產 生五棵決策樹,訓練資料分別利用這五棵決策樹產生五個分類結果。(c)接著則以此分類 結果當作新的訓練資料(stacking training data)之屬性,類別則為原始訓練資料之類別,以 D1 為例,五棵決策樹的分類結果分別為 Yes、Yes、Yes、No 和 No,則這五個分類結果 即為新的訓練資料之屬性,而 D1 原始的類別為 No,所以該資料之類別即為 No;(d)新 的測試資料(stacking testing data)亦然,利用五棵決策樹產生的五個分類結果為屬性,而 其類別即為我們要預測之值。
與 bagging 或 boosting 相較,stacking 的優勢在於其利用兩階段的模式整合不同的預 測結果。舉一較極端之範例,若原使用一階段的整體學習演算法的分類結果和資料正確 類別完全相反,即所有 positive 之資料預測為 negative,且所有 negative 之資料預測為 positive,以整體準確度(overall accuracy)來說,這樣的結果是 0%,但若是透過 stacking 演算法,就能在第二階段的學習演算法中修正此結果,達到 100%的準確度。
圖 9. Stacking 演算法之流程圖
14 (a) 訓練資料(Training data)
Day Outlook Temperature Humidity Wind Play Tennis
D1 Sunny Hot High Weak No
Day Outlook Temperature Humidity Wind Play Tennis D7 Overcast Cool Normal Weak Yes
D8 Sunny Mild High Weak No
(c) 新的訓練資料(stacking training data)
Day Decision
(d) 新的測試資料(stacking testing data)
Day Decision