1. 程式人生 > >第七章:整合學習(利用AdaBoost元演算法...)

第七章:整合學習(利用AdaBoost元演算法...)

---恢復內容開始---

  整合學習其實不能算一個演算法,應該算是一種框架,集百家之長。整合演算法具體有Bagging與Boosting兩種大類。兩者區別:

  1)Bagging是並行的,它就好比找男朋友,美女選擇擇偶物件的時候,會問幾個閨蜜(幾個演算法)的建議,最後選擇一個綜合得分最高的一個作為男朋友。bagging中目前最流行的是隨機森林;

      Boosting是序列的,它就好比追女友,3個帥哥追同一個美女,第1個帥哥失敗->(傳授經驗:姓名、家庭情況) 第2個帥哥失敗->(傳授經驗:興趣愛好、性格特點) 第3個帥哥成功。boosting中目前比較流行的是AdaBoosting.

  2)Bagging是幾個不同的分類器都決策後,對結果進行投票決定(票數多的),或者取平均等等。這裡不同的分類器有兩種方法產生,第一,用不同的演算法,比如一個用決策樹,一個用kNN;第二,相同的演算法,比如都是決策樹,但是訓練集不同,也就是說每次從訓練集中抽不同的部分給不同的分類器模型去訓練。這樣又有兩種情況,一種是有放回的抽取,一種是無放回的抽取。一般用第二種方法。

    Boosting是幾個分類器序列訓練,Bagging中訓練集的權重是相同的,但是Boosting中是不同的。第一個分類器訓練後,將錯誤的訓練集中錯誤的部分進行加大權重。依此類推,其實它就是不斷改變將訓練集分塊(對錯分塊),改變權重。

 

  下面主要介紹隨機森林與AdaBoosting演算法。

  隨機森林(random forest,RF)其具體原理與自寫模組看這裡。下面主要說一下用sklearn中的隨機森林模組:

  還是與前幾章一樣用iris資料集分類舉例,(ps:sklearn中不僅有隨機森林分類模組RandomForestClassifier,也有迴歸RandomForestRegressor,調參參不多):

除錯時發現,這裡的引數n_estimators=150對結果影響很大很大,而且就算是相同的引數,這次執行結果準確率是100%,下一次說不定是95%。下面具體說一下RandomForestClassifier()中的引數。

詳細參看這裡

 

 

 

 

 

 

 

 

---恢復內容結束---