機器學習十大經典算法之AdaBoost

點擊上方「計算機視覺cv」便可「進入公衆號」
node

重磅乾貨第一時間送達git

集成學習Boosting

集成學習大體可分爲兩大類:BaggingBoosting。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源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索