讀古今文學網 > 機器學習實戰 > 7.1 基於數據集多重抽樣的分類器 >

7.1 基於數據集多重抽樣的分類器

前面已經介紹了五種不同的分類算法,它們各有優缺點。我們自然可以將不同的分類器組合起來,而這種組合結果則被稱為集成方法(ensemble method)或者元算法(meta-algorithm)。使用集成方法時會有多種形式:可以是不同算法的集成,也可以是同一算法在不同設置下的集成,還可以是數據集不同部分分配給不同分類器之後的集成。接下來,我們將介紹基於同一種分類器多個不同實例的兩種計算方法。在這些方法當中,數據集也會不斷變化,而後應用於不同的實例分類器上。最後,我們會討論如何利用機器學習問題的通用框架來應用AdaBoost算法。

AdaBoost

優點:泛化錯誤率低,易編碼,可以應用在大部分分類器上,無參數調整。 缺點:對離群點敏感。 適用數據類型:數值型和標稱型數據。

7.1.1 bagging:基於數據隨機重抽樣的分類器構建方法

自舉匯聚法(bootstrap aggregating),也稱為bagging方法,是在從原始數據集選擇S次後得到S個新數據集的一種技術。新數據集和原數據集的大小相等。每個數據集都是通過在原始數據集中隨機選擇一個樣本來進行替換而得到的1。這裡的替換就意味著可以多次地選擇同一樣本。這一性質就允許新數據集中可以有重複的值,而原始數據集的某些值在新集合中則不再出現。

1. 這裡的意思是從原始集合中隨機選擇一個樣本,然後隨機選擇一個樣本來代替這個樣本。在其他書中,bagging中的數據集通常被認為是放回取樣得到的,比如要得到一個大小為n的新數據集,該數據集中的每個樣本都是在原始數據集中隨機抽樣(即抽樣之後又放回)得到的。——譯者注

S個數據集建好之後,將某個學習算法分別作用於每個數據集就得到了S個分類器。當我們要對新數據進行分類時,就可以應用這S個分類器進行分類。與此同時,選擇分類器投票結果中最多的類別作為最後的分類結果。

當然,還有一些更先進的bagging方法,比如隨機森林(random forest)。有關這些方法的一個很好的討論材料參見網頁http://www.stat.berkeley.edu/~breiman/RandomForests/cc_home.htm。接下來我們將注意力轉向一個與bagging類似的集成分類器方法boosting。

7.1.2 boosting

boosting是一種與bagging很類似的技術。不論是在boosting還是bagging當中,所使用的多個分類器的類型都是一致的。但是在前者當中,不同的分類器是通過串行訓練而獲得的,每個新分類器都根據已訓練出的分類器的性能來進行訓練。boosting是通過集中關注被已有分類器錯分的那些數據來獲得新的分類器。

由於boosting分類的結果是基於所有分類器的加權求和結果的,因此boosting與bagging不太一樣。bagging中的分類器權重是相等的,而boosting中的分類器權重並不相等,每個權重代表的是其對應分類器在上一輪迭代中的成功度。

boosting方法擁有多個版本,本章將只關注其中一個最流行的版本AdaBoost。

AdaBoost的一般流程

  1. 收集數據:可以使用任意方法。
  2. 準備數據:依賴於所使用的弱分類器類型,本章使用的是單層決策樹,這種分類器可以處理任何數據類型。當然也可以使用任意分類器作為弱分類器,第2章到第6章中的任一分類器都可以充當弱分類器。作為弱分類器,簡單分類器的效果更好。
  3. 分析數據:可以使用任意方法。
  4. 訓練算法:AdaBoost的大部分時間都用在訓練上,分類器將多次在同一數據集上訓練弱分類器。
  5. 測試算法:計算分類的錯誤率。
  6. 使用算法:同SVM一樣,AdaBoost預測兩個類別中的一個。如果想把它應用到多個類別的場合,那麼就要像多類SVM中的做法一樣對AdaBoost進行修改。

下面我們將要討論AdaBoost背後的一些理論,並揭示其效果不錯的原因。