點擊上方「計算機視覺cv」便可「進入公衆號」
node
重磅乾貨第一時間送達git
集成學習Boosting
集成學習大體可分爲兩大類:Bagging
和Boosting
。Bagging通常使用強學習器,其個體學習器之間不存在強依賴關係,容易並行。Boosting則使用弱分類器,其個體學習器之間存在強依賴關係,是一種序列化方法。Bagging主要關注下降方差,而Boosting主要關注下降誤差。Boosting是一族算法,其主要目標爲將弱學習器「提高」爲強學習器,大部分Boosting算法都是根據前一個學習器的訓練效果對樣本分佈進行調整,再根據新的樣本分佈訓練下一個學習器,如此迭代M次,最後將一系列弱學習器組合成一個強學習器。而這些Boosting算法的不一樣點則主要體如今每輪樣本分佈的調整方式上。web
AdaBoost原理簡介
AdaBoost算法是Adaptive Boost
的簡稱,Boosting經過將一系列弱學習器組合起來,經過集成這些弱學習器的學習能力,獲得一個強學習器。具體到AdaBoost算法,AdaBoost在以前學習器的基礎上改變樣本的權重,增長那些以前被分類錯誤的樣本的比重,下降分類正確樣本的比重,這樣以後的學習器將重點關注那些被分類錯誤的樣本。最後經過將這些學習器經過加權組合成一個強學習器,具體的,分類正確率高的學習器權重較高,分類正確率低的學習器權重較低。算法
AdaBoost 算法流程
-
輸入:訓練集 ,訓練輪數T,和一個基學習算法L。 -
首先,讓全部數據的權重都爲 ; -
而後,對於每一輪的train過程,獲得一個基學習器 ; -
計算這個基學習器 在訓練數據集D上的偏差 ; -
若是這個偏差大於0.5,那麼直接中止本輪的train,進行下一輪; -
計算此輪基學習器在最終的模型中所佔的權重 ; -
對於在這一輪基學習器中作錯的樣本和作對的樣本進行調整: ; -
上述中的 是一個規範化因子;通常 ,以確保全部的 構成一個分佈; -
最終,獲得ensemble後的model爲 ;
最後一步的模型Ensemble以下圖所示,前面的數字表示 ,後面表示學習到的三個基學習器。數組

動手實踐
在 Python 環境下使用 Adaboost 進行手寫數字識別。微信
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.ensemble import AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import cross_val_predict
from sklearn.model_selection import train_test_split
from sklearn.model_selection import learning_curve
from sklearn.datasets import load_digits
首先,載入數據app
dataset = load_digits()
X = dataset['data']
y = dataset['target']
X 包含長度爲 64 的數組,它們表明了簡單的 8x8 的平面圖像。使用該數據集的目的是爲了完成手寫數字識別任務。下圖爲一個給定的手寫數字的示例:編輯器

若是咱們堅持使用深度爲 1 的決策樹分類器(決策樹樁),如下是如何在這種狀況下實現 AdaBoost 分類器:svg
reg_ada = AdaBoostClassifier(DecisionTreeClassifier(max_depth=1))
scores_ada = cross_val_score(reg_ada, X, y, cv=6)
scores_ada.mean()
這樣獲得的分類準確率的結果應該約爲 26%,還具備很大的提高空間。其中一個關鍵的參數是序列決策樹分類器的深度。那麼,決策樹的深度如何變化才能提升分類準確率呢?學習
core = []
for depth in [1,2,10] :
reg_ada = AdaBoostClassifier(DecisionTreeClassifier(max_depth=depth))
scores_ada = cross_val_score(reg_ada, X, y, cv=6)
score.append(scores_ada.mean())
在這個簡單的例子中,當決策樹的深度爲 10 時,分類器獲得了最高的分類準確率 95.8%。
本文分享自微信公衆號 - 計算機視覺CV(jsjsjcv)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。