機器學習算法——集成學習

  1. 概念

集成學習是機器中一個非常重要且熱門的分支,用 多個弱分類器構成一分類器,其哲學 思想是三個臭皮匠賽過諸葛亮

  • 爲什麼要集成?

模型選擇:假設各弱分 類器間具有一定差異性(如不同的算法,或相參數配置),這會導致生成假設各弱分 類器間具有一定差異性(如不同的算法,或相參數配置),這會導致生成類決策邊界不同,也就是說它們在時會犯的錯誤。將結合後能得到更理減少整體錯誤,實現更好的分類錯誤。

數據集過大或過小:數據集較大時,可以分爲不同的子別進行訓練然後再合成類器。

數據集過小時,可使用自舉技術( bootstrapping),從原樣本集有放回的抽取 ),從原樣本集有放回的抽取 m個子集,訓練 m個分 器,進行集成。

分治:若決策邊界過於複雜,則線性模型不能很好地描述真實情況。因此先訓練多個分類器再將它們集成。

數據融合:當有多個不同數據源,且每的特徵集抽取方法都時(異構),需要分訓練分類器然後再集成

  • 集成學習有效的前提:

每個弱分類器的錯誤率不能高於0.5;弱分類器之間的性能要有較大的差別,否則集成效果不是很好。

  1. 集成學習常用算法 (Boosting / bagging / stacking)

boosting的弱分類器形成是同一種機器學習算法 只是其數據抽取時的權值在不斷更新 每次都是提高前一次分錯了的數據集的權值,最後得到T個弱分類器,且分類器的權值也跟其中間結果的數據有關。

bagging算法也是用的同一種弱分類器,其數據的來源是用boostrap算法得到的(有放回抽樣)。

Stacking算法 分爲2層,第一層是用不同的算法形成 T個弱分類器,同時產生一與原數據集大小相同的新數據集,利用這個新數據集和一個新算法構成第二層的分類器。

  • Bagging

bagging也叫自舉匯聚法(bootstrapaggregating),是一種在原始數據集上通過有放回抽樣重新選出S個新數據集來訓練分類器的集成技術。也就是說這些新數據集是允許重複的。使用訓練出來的分類器集合來對新樣本進行分類,然後用多數投票或者對輸出求均值的方法統計所有分類器的分類結果,結果最高的類別即爲最終標籤。

 

① Bagging又叫自助聚集,是一種根據均勻概率分佈從數據中重複抽樣(有放回)的技術。

② 每個抽樣生成的自助樣本集上,訓練一個基分類器;對訓練過的分類器進行投票,將測試樣本指派到得票最高的類中。

③  每個自助樣本集都和原數據一樣大

④ 有放回抽樣,一些樣本可能在同一訓練集中出現多次,一些可能被忽略。


 

例子:http://blog.csdn.net/qq_30189255/article/details/51532442

 Bagging通過降低基分類器的方差,改善了泛化誤差

 其性能依賴於基分類器的穩定性;如果基分類器不穩定,bagging有助於降低訓練數據的隨機波動導致的誤差;如果穩定,則集成分類器的誤差主要由基分類器的偏倚引起

 由於每個樣本被選中的概率相同,因此bagging並不側重於訓練數據集中的任何特定實例

  • Boosting

 boosting是一個迭代的過程,用於自適應地改變訓練樣本的分佈,使得基分類器聚焦在那些很難分的樣本上

 boosting會給每個訓練樣本賦予一個權值,而且可以再每輪提升過程結束時自動地調整權值。開始時,所有的樣本都賦予相同的權值1/N,從而使得它們被選作訓練的可能性都一樣。根據訓練樣本的抽樣分佈來抽取樣本,得到新的樣本集。然後,由該訓練集歸納一個分類器,並用它對原數據集中的所有樣本進行分類。每輪提升結束時,更新訓練集樣本的權值。增加被錯誤分類的樣本的權值,減小被正確分類的樣本的權值,這使得分類器在隨後的迭代中關注那些很難分類的樣本。

  • AdaBoost

即Adaptive boosting,是一種迭代算法。每輪迭代中會在訓練集上產生一個新的分類器,然後使用該分類器對所有樣本進行分類,以評估每個樣本的重要性(informative)。 

具體來說,算法會爲每個訓練樣本賦予一個權值。每次用訓練完的新分類器標註各個樣本,若某個樣本點已被分類正確,則將其權值降低;若樣本點未被正確分類,則提高其權值。權值越高的樣本在下一次訓練中所佔的比重越大,也就是說越難區分的樣本在訓練過程中會變得越來越重要。 整個迭代過程直到錯誤率足夠小或達到一定次數爲止。

算法思路

輸入: 分類數據;弱算法組

輸出: 分類結果

流程:

  1.  給訓練數據集中的每一個樣本賦予權重,權重初始化相等值,這些權重形成向量 D,一般初始化所有訓練樣例的權重爲 1 / N,其中 N是樣例數
  2. 在訓練集上訓練出弱分類器並計算該分類器的錯誤率。
  3. 同一數據集上再次訓練分類器,調整樣本的權重,將第一次分對的樣本權重降低,第一次分錯的樣本權重提高。
  4. 最後給每一個分類器分配一個權重值α α=0.5*ln(1-錯誤率)/錯誤率)
  5. 計算出α後,可以對權重向量D進行更新,以使得正確分類的樣本權重降低而錯分樣本的權重升高。D的計算方法如下:


計算出 D之後, AdaBoost又開始進入下一輪迭代。 Adaboost算法會不斷地重複訓練和調整權的過程,直到訓練錯誤率爲 0者弱分類器的數目達到用戶指定的值爲止。

Adaboost算法優缺點

優點:

1)Adaboost是一種有很高精度的分類器

2)可以使用各種方法構建子分類器, Adaboost算法提供的是框架

3)當使用簡單分類器時,計算出的結果是可以理解的,而弱構造及其簡單,不用做特徵篩選

4)不用擔心overfitting(過擬合)問題

Adaboost算法應用場景

1)用於二分類或多的應場景

2)用於做分類任務的 baseline--無腦化,簡單不會 overfitting,不用調分類器

3)用於特徵選擇( feature selection)

4)Boosting框架用於對 badcase的修正 --只需要增加新的分類器 ,不需要變動原有分類器。

Adaboost算法 Python庫實現

#Import Library
from sklearn.ensemble import GradientBoostingClassifier
#Assumed you have, X(predictor) and Y (target) for training data set and x_test(predictor) oftest_dataset
# Create GradientBoosting Classifier object
model= GradientBoostingClassifier(n_estimators=100,learning_rate=1.0, max_depth=1, random_state=0)
# Train the model using the training sets and check scoremodel.fit(X, y)
#Predict Output
predicted= model.predict(x_test)


 

發佈了52 篇原創文章 · 獲贊 104 · 訪問量 37萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章