背景
上一期開啟了面部識別系列。對於面部畫面捕捉大概使用的是 Viola–Jones object detection framework。這個模型框架是 HAAR 特徵提取 + Adaboost 自適應增強 。
其中HAAR特徵還有兩個問題沒有解決,所以本期先帶來Adaboost自適應增強。 這個概念比我想象的簡單一些。
另外申請,本文圖片來源於 Jocelyn D'Souza。
AdaBoost自適應增強
Adaboost的思路是通過 某種方式增強一些 Weak Classfier(比較弱的分類算法,比如次數比較低)。
舉個例子比如我們需要區分下圖的 減號 和 加號。 假設我們的classfier 只能是橫線或者豎線。
假設我們的第一次分類,將大部分的 加號 和 減號 能夠區分開來。 但是對於一小部分區分是錯誤的。
第二次分類前,我們在分類前,將上一個步驟中錯誤的 加號 和 減號 的權重增加,這意味著下一個classifier會更注重將上一次分類錯誤的數據。
第二次分類,由於我們加重了第一次分類錯誤數據的權重,可能第三次的classfier 像下圖所示。
最後,我們可能在三次分類後形成了 最終的一個classifier。 從下圖所示,最終的classifier能夠將 加號 和 減號 區分開來。
總結下
Adaboost 的思路就是,將多個weak classifier 按照順序組合起來,形成一個strong classifier。 其中很重要的一步是,將前一個classifier 區分錯誤的數據 權重增加。
最終,就會形成一個“多層次”的classifier ,可能每一層的分層都不理想。但是組合起來的效果會好很多
代碼例子
下面是從scikit learn 調用adaboost classifier
其中參數n_estimators 的意思是 指定50層weak classifier
另外,下面的例子使用的是sklearn自帶的 Iris數據庫。
最終的準確率在 96%
from sklearn.ensemble import AdaBoostClassifier
from sklearn import datasets
from sklearn.metrics import accuracy_score
import matplotlib as plt
iris = datasets.load_iris()
X = iris.data
y = iris.target
clf = AdaBoostClassifier(n_estimators=50,
learning_rate=1,
random_state=0)
model = clf.fit(X, y)
prd_r = model.predict(X)
test_acc = accuracy_score(y, prd_r) * 100.
print(test_acc)
下期預告
應該是HAAR Feature吧
閱讀更多 繁林林與機器學習 的文章