機器學習_學習筆記系列(23):聚合模型(Aggregation Models)和集成學習(Ensemble Learning)
OK!在前幾個章節中,我們介紹完兩個機器學習大家族,一個是Linear model,另一個是Support Vector Machine,接下來我們要來介紹一個新的家族,叫做Aggregation Models。
另外會特別寫這篇文章的目的是,網路上很多文章,對於Ensemble Learning跟Aggregation Models都混在一起,鮮少有人講兩者的差別在哪。畢竟以中文直翻來看,大多數人很難區別兩者,還甚至有人以為這兩個概念是一樣的,所以想在這邊做個小整理,如果有錯歡迎立即糾正!
Aggregation Models
所謂的aggregation models,就是指將不同的特徵和模型結合起來,得到一個更好的模型。而aggregation models可以用一個式子表示:
T代表子模型的數量。c_t代表特定方程式,可以為常數、或是方程式。G_t代表子模型的方程式,其一樣可以為常數,但大部分都是方程式。
以非常直觀的想法就像Coursera機器學習技法[1]裡面的例子,今天我們組了一個團隊來預測股票,然後我們採納每個人的建議決定要買哪支股票。所以對於aggregation models來說,我們主要可以用三種結合方式和兩種處理方式。
模型結合方式
1. Uniform:以最公平的方式,一人一票,決定要不要買這支股票,所以每個子模型的c_t=1
2. Non-uniform:給比較有經驗的人比較多票,比較菜的人就只給他一票,最後再決定要不要買這支股票,所以每個子模型的c_t為常數,但可能都不一樣。
3. Conditional:依據每個人不一樣的專長,有人對礦業股比較熟悉,有人對半導體股比較了解,所以依照不同情況,給不同人不同票數,所以每個子模型的c_t為一方程式
資料處理方式
a. Blending:當資料產生各種子模型後,最後再把它結合起來。
b. Learning:一邊產生子模型一邊結合。
所以說在Aggregation Models中,我們可以搭配產生六種。
其中這六種,以流程圖解說,我們先導入圖例
Averaging:
當模型建立好後,以權重為1把每個模型結合起來。
Weighting:
當模型建立好後,以不同的權重把每個模型結合起來。
Stacking:
當模型建立好後,以特定方程式把每個模型結合起來。
Bagging:
一開始先把資料均勻分成若干等分,產生數個模型之後,以權重1把每個模型結合起來。
Boosting:
一開始先把資料均勻分成若干等分,依序產生數個模型的過程中,當前產生的模型會被上一個模型影響。另外其又可分為Adaptive Boost和Gradient Boost
Decision Tree:
依據條件判斷式區分成若干個子集,接著再用一樣的方式,依條件判斷區分,直到不能分下去為止就產生一個子模型,最後以特定方程式將其合併起來。
但是這邊要特別注意
對於Decision Tree來說,最後產生的子模型(樹的末端)為常數[1],所以說Decision Tree最後做的事情,是依據特定方程式的集合,產生最終模型,
具體而言Decision Tree本身是可以直接拿來做分類和回歸的,其名稱叫做Classification and Regression Tree (CART),就像是今天要分類貓和狗,第一層條件判斷式是體型,第二層條件判斷式是壽命等等。
而其他5種方法,中途產生的子模型,可以是Logistic regression,或是Perceptron,也可以是Support Vector Machine。所以其他五種方式並不能獨立為一個機器學習演算法,裡面只有Decision Tree才是機器學習演算法。
而對於Aggregation Models來說,透過不同的模型結合,可以防止Overfitting的問題,試想一下,今天如果我們中間產生10個models,其中一個發生overfitting的情況,但其他9個泛化程度剛剛好,我們就可以透過aggregation的方式,結合10個models,所以原本可能會產生overfitting的model,經過結合後,就變正常了。
Ensemble Learning
所謂的Ensemble Learning是將不同的演算法結合起來,最後得出一個效果更好模型的方法。
常使用的Ensemble Learning方法有,Averaging、Weighting、Voting、Stacking、Bagging、Boosting。
所以說其概念和Aggregation model非常類似,但是
aggregation models強調的是概念上各種不同的方程式結合,而Ensemble Learning強調的是演算法的結合
所以說,Averaging、Weighting、Stacking、Bagging、Boosting是屬於Ensemble Learning,而Decision Tree雖然是一種Aggregation Models,但他不是一種Ensemble Learning,因為Decision Tree他是屬於一種樹類型的機器學習的演算法。
所以這裡大家就會想啦!既然Decision Tree是一種機器學習演算法,那能不能當作Ensemble Learning裡面的子模型,答案是可以的。其是可以套入上述的Averaging、Weighting、Stacking、Bagging、Boosting裡面。
像是Decision Tree+ Bagging為Random Forest,若再加上隨機化則會變成Extra Tree。另外Decision Tree和Boosting中的Adaptive Boost和Gradient Boost結合,就會成為Adaptive Boost Decision Tree和Gradient Boost Decision Tree。
這裡只是給大家一個簡單的認識,之後的章節我們會開始介紹概念、推倒和演算法。
[1] Coursera, 機器學習技法, 林軒田 教授, 國立臺灣大學
[2] Scikit-learn: Machine Learning in Python, Pedregosa et al., JMLR 12, pp. 2825–2830, 2011.