1. 程式人生 > >演算法梳理之整合學習

演算法梳理之整合學習

演算法梳理整合學習篇

整合學習概念

整合學習是使用一系列學習器進行學習,並使用某種規則把各個學習結果進行整合從而獲得比單個學習器更好的學習效果的一種機器學習方法。一般情況下,整合學習中的多個學習器都是同質的"弱學習器"。

Boosting and Bagging

Boosting

個體學習器間存在強依賴關係,必須序列生成的序列化方法,例如基於Booosting;
其主要思想是將弱分類器組裝成一個強分類器。在PAC(概率近似正確)學習框架下,則一定可以將弱分類器組裝成一個強分類器。
adaBoosting(自適應增強)方式每次使用的是全部的樣本,每輪訓練改變樣本的權重。下一輪訓練的目標是找到一個函式f 來擬合上一輪的殘差。當殘差足夠小或者達到設定的最大迭代次數則停止。Boosting會減小在上一輪訓練正確的樣本的權重,增大錯誤樣本的權重。(對的殘差小,錯的殘差大)
梯度提升的Boosting方式是使用代價函式對上一輪訓練出的模型函式f的偏導來擬合殘差。

Bagging

個體學習器間不存在強依賴關係,可同時生成的並行化方法,例如Bagging和隨機森林。
Bagging即套袋法,其演算法過程如下:
從原始樣本集中抽取訓練集。每輪從原始樣本集中使用Bootstrapping演算法抽取n個訓練樣本(在訓練集中,有些樣本可能被多次抽取到,而有些樣本可能一次都沒有被抽中)。共進行k輪抽取,得到k個訓練集。(k個訓練集之間是相互獨立的)
每次使用一個訓練集得到一個模型,k個訓練集共得到k個模型。(注:這裡並沒有具體的分類演算法或迴歸方法,我們可以根據具體問題採用不同的分類或迴歸方法,如決策樹、感知器等)
對分類問題:將上步得到的k個模型採用投票的方式得到分類結果;對迴歸問題,計算上述模型的均值作為最後的結果。(所有模型的重要性相同)

結合策略(平均法,投票法,學習法)

平均法

簡單平均、加權平均
適用範圍:
+規模大的整合,學習的權重較多,加權平均法易導致過擬合
+個體學習器效能相差較大時宜使用加權平均法,相近用簡單平均法。

投票法

絕對多數投票法:某標記超過半數;
相對多數投票法:預測為得票最多的標記,若同時有多個標記的票最高,則從中隨機選取一個。
加權投票法:提供了預測結果,與加權平均法類似。

學習法

學習法即通過另一個學習器來進行結合,把個體學習器稱為初級學習器,用於結合的學習器稱為次級學習器或元學習器。常見的有Stacking和Blending兩種
Stacking描述:先從初始資料集中訓練出初級學習器,然後“生成”一個新資料集用於訓練次級學習器。在新資料集中,初級學習器的輸出被當做樣例輸入特徵,初始樣本的標記仍被當做樣例標記。

隨機森林

隨機森林思想

Bagging是隨機森林中的一個特例。隨機森林和bagging唯一的區別在於,當我們把p個變數放到模型中時,bagging在訓練每棵決策樹時會將所有的變數都用上,而隨機森林則只隨機使用q個變數(q屬於p)。我們常常會將q的值設定成根號p,但也可以隨自己調。隨機森林會每次隨機選擇q個變數種出一棵決策樹,最後也同樣是將決策樹的結果合併。這麼做的好處在於,有些變數看上去在訓練集中非常重要,但實際預測效果並不佳。在bagging模型中,這類變數每次都會在決策樹上端,起到最重要的作用,而它們實際上卻不是好的預測變數,因此削弱了模型的預測能力。而在隨機森林中,它們在很多決策樹中不會被選到,幾乎所有的變數都有平等的機會進入到模型中。因此只要我們種的樹足夠多,我們就可以削弱那些strong但預測效果不佳的變數,從而提升預測準確性。一般情況下,隨機森林的OOB MSE和傳統MSE要分別小於bagging的OOB MSE和傳統MSE。
隨機森林因為絕佳的預測能力和執行效率,絕對可以稱得上資料科學中被用得最多的機器學習演算法之一。

優缺點

優點

1、 在當前的很多資料集上,相對其他演算法有著很大的優勢,表現良好

2、它能夠處理很高維度(feature很多)的資料,並且不用做特徵選擇(特徵子集是隨機選擇的)

3、在訓練完後,它能夠給出哪些feature比較重要
 (http://blog.csdn.net/keepreder/article/details/47277517)

4、在建立隨機森林的時候,對generlization error使用的是無偏估計,模型泛化能力強

5、訓練速度快,容易做成並行化方法.(訓練時樹與樹之間是相互獨立的)

6、 在訓練過程中,能夠檢測到feature間的互相影響

7、 實現比較簡單

8、 對於不平衡的資料集來說,它可以平衡誤差。

9、如果有很大一部分的特徵遺失,仍可以維持準確度。

(參考:https://blog.csdn.net/keepreder/article/details/47273297)

缺點:

1、隨機森林已經被證明在某些噪音較大的分類或迴歸問題上會過擬

2、對於有不同取值的屬性的資料,取值劃分較多的屬性會對隨機森林產生更大的影響,所以隨機森林在這種資料上產出的屬性權值是不可信的。

sklearn引數

class sklearn.ensemble.RandomForestClassifier/RandomForestRegressor
(
n_estimators=10 #森林中樹的數量
criterion=‘gini’/‘mse’ #樹生產時使用的指標,分類樹為‘gini’或’entropy’,迴歸樹為’mse’或’mae’
max_features=‘auto’:int/float/string/None #搜尋分支時考慮的特徵數
max_depth=None #樹生產的最大高度
min_samples_split=2 #節點允許進一步分枝時的最低樣本數
min_samples_leaf=1 #葉節點的最低樣本量
min_weight_fraction_leaf=0.0 #有權重的葉節點的最低權重分值
max_leaf_nodes=None #最高葉節點數量
min_impurity_decrease=0.0 #分枝時需要的最低資訊量下降量
bootstrap=True #是否使用可放回的bootstap抽樣
oob_score=False #是否使用oob方式計算模型準確率
)

應用場景

資料維度相對低(幾十維),同時對準確性有較高要求時。
因為不需要很多引數調整就可以達到不錯的效果,基本上不知道用什麼方法的時候都可以先試一下隨機森林。
https://www.zhihu.com/question/26726794