背景
上一期开启了面部识别系列。对于面部画面捕捉大概使用的是 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吧
閱讀更多 繁林林與機器學習 的文章