文章目录
- 1.哲学定理
- 2. 重采样resampling
- 2.1 bagging
- 2.2 boosting
- 2.3 adaboost
- 2.3.2训练误差
- 2.4 active learning
- 3. 估计和比较分类器--交叉检验
- 3.1 交叉验证
- 5.adaboost在人脸检测上的应用
- 5.1肤色模型
- 5.2基于AdaBoost的快速人脸检测
- 如何选择好的模型和评价模型?
- 独立于算法的机器学习:如何结合多个分类器
1.哲学定理
- 来自https://blog.csdn.net/qq_28739605/article/details/80607330
- 来自https://blog.csdn.net/qq_28739605/article/details/80607330
- 没有免费的午餐therom
- 前提:对于所有机器学习问题,且所有问题同等重要
- 没有一种机器学习算法是适用于所有情况的
- 更一般地说,对于所有机器学习问题,任何一种算法(包括瞎猜)的期望效果都是一样的
- 有得必有失–没有最好的算法、学习期
- Occam’s razor:简单的就是最好的
- 丑小鸭定理:
- 丑小鸭与白天鹅之间的区别和两只白天鹅之间的区别一样大
- 世界上不存在分类的客观标准,一切分类的标准都是主观的
- (有假设的)
- 没有最优的特征
- MDL principle:致力于找到一个最简单、不可约的表达-描述越短越好
- 方差偏差dilemma:模型复杂度增大,方差增加,偏差减小
- 方差:偏离测试集的程度
- 偏差:偏离训练集的程度
2. 重采样resampling
- 重采样:从原数据集(也可能子集)中采样
- bootstrap:从训练集中随机选择n个点,重新设计每个点的权重
- why重采样:
- 改进分类器
- 对统计信息进行更准确的估计
- arcing methods(自适应调整和组合)
- bagging:独立采样
- boosting:不独立的采样
- adaboost
思想 | 独立 | 数据集 | 优缺点 | 组件 | 决策 | |
---|---|---|---|---|---|---|
bagging | 数据集分n个(独立采样出来的),每个子集单独训练一个分类器,最后多个分类器取平均(加权) | 独立的重采样 | 子集间有交集,子集内有重复 | 可并行; 提高不稳定分类器的识别能力(因为对多个取平均 | 每个分类器可以使NN,SVM,tree,ann,…) | 加权多数投票 |
boosting | 多个弱分类器(比随机猜好一点就行)结合成一个强分类器;最后结果取加权和(后面的分类器判别前面分错的) | 不独立 | D1从X采样来的;D2一半是D1分对的,一半是他分错的;D3是D1、D2分的不同的结果 | 不可并行;泛化能力强;不会过拟合 | 任意可用 | 加权多数投票 |
adaboost | 弱分类器集成,权重依赖于正确率H(x)=sign(Σt=1Tαtht(x))H(x)=sign(\Sigma_{t=1}^T\alpha_th_t(x))H(x)=sign(Σt=1Tαtht(x));学习一系列分类器,在这个序列中每一个分类器对它前一个分类器导致的错误分类样例给予更大的重视 | 不独立 | Dt+1(i)=Dt(i)Ztexp(−αtyiht(xi))D1(i)=1/mϵt=Pi−Dt(ht(xi)≠yi)αt=12ln1−ϵtϵtD_{t+1}(i)=\frac{D_t(i)}{Z_t}exp(-\alpha_ty_ih_t(x_i))\\D_1(i)=1/m\\\epsilon_t=P_{i-D_t}(h_t(x_i)\neq y_i)\\\alpha_t=\frac{1}{2}ln\frac{1-\epsilon_t}{\epsilon_t}Dt+1(i)=ZtDt(i)exp(−αtyiht(xi))D1(i)=1/mϵt=Pi−Dt(ht(xi)=yi)αt=21lnϵt1−ϵt | 不会过拟合;快,简单,好编程;参数少;弱分类器的先验少;通用性强 ;易受到均匀噪声影响;依赖于弱分类器(弱而不能太弱)和数据 | 任意组件 | H(x)=sign(Σt=1Tαtht(x))H(x)=sign(\Sigma_{t=1}^T\alpha_th_t(x))H(x)=sign(Σt=1Tαtht(x)) |
2.1 bagging
2.2 boosting
- 将多个弱的“基础”学习者组合在一起,形成一个比任何基础分类器表现都要好的分类器
2.3 adaboost
- ht(x)弱分类器h_t(x)弱分类器ht(x)弱分类器
- Dt+1(i)=Dt(i)Ztexp(−αtyiht(xi))D1(i)=1/mϵt=Pi−Dt(ht(xi)≠yi)αt=12ln1−ϵtϵtD_{t+1}(i)=\frac{D_t(i)}{Z_t}exp(-\alpha_ty_ih_t(x_i))\\D_1(i)=1/m\\\epsilon_t=P_{i-D_t}(h_t(x_i)\neq y_i)\\\alpha_t=\frac{1}{2}ln\frac{1-\epsilon_t}{\epsilon_t}Dt+1(i)=ZtDt(i)exp(−αtyiht(xi))D1(i)=1/mϵt=Pi−Dt(ht(xi)=yi)αt=21lnϵt1−ϵt
- 推测正确:yiht(xi)>0==>0<exp(−αtyiht(xi))<1;分对了的样本权重小分错了的样本权重推测正确:y_ih_t(x_i)>0==>0<exp(-\alpha_ty_ih_t(x_i))<1;分对了的样本权重小\\分错了的样本权重推测正确:yiht(xi)>0==>0<exp(−αtyiht(xi))<1;分对了的样本权重小分错了的样本权重
- H(x)=sign(Σt=1Tαtht(x))H(x)=sign(\Sigma_{t=1}^T\alpha_th_t(x))H(x)=sign(Σt=1Tαtht(x))
2.3.2训练误差
- 何时停止?
- 防止过拟合
- adaboost不会过拟合
- 类似svm,margin:趋向于增大margin–>减小泛化误差
- margin theory即使在训练误差达到零的情况下,仍然可以增加集合的边界。
- 训练时,不光考虑是否分对,还考虑置信度
- 要求
- 弱分类器对训练集来说不复杂
- 弱分类器有很大的边(margin)
- –不满足可能会overfiting
2.4 active learning
- 人在循环中
- 机器会向人主动要标签
3. 估计和比较分类器–交叉检验
- 方法
- Jackknife (leave-one-out)
- 交叉检验
3.1 交叉验证
- 不应该在测试集上调参,在训练集上验证
- 交叉检验:将有标签的训练数据分成训练集和验证集(少于0.5)
- m-折交叉验证:1个做验证集,m-1个做训练集(轮流重复)(如果m=n则为Jackknife)
5.adaboost在人脸检测上的应用
- • 基于规则/知识方法
- – 人脸模式的变化满足一定的规律,所以可以归纳描述人脸特征的规 则,如灰度分布、比例关系、纹理信息等
- • 基于模板的方法
- – 固定模板法,可变形模板法
- • 基于不变特征的方法,如彩色信息
- – 人脸的肤色在彩色空间中的分布相对比较集中,所以可用来检测和 跟踪人脸。
- • 基于表观分类器学习的方法
- – 将人脸检测视为区分“非人脸样本”与“人脸样本”的PR问题,通过对人脸样本集和非人脸样本集的学习产生分类器
5.1肤色模型
- – 最简单的方法是用Cr, Cb值定义肤色区域,选定阈值[Cr1,Cr2]和[Cb1,Cb2]
- – 一个像素点被归为肤色点,如果它的(Cr, Cb)值落入下面的范围:
- Cr1≤Cr≤Cr2 and Cb1≤Cb≤Cb2
- • 训练肤色模型
- – 手工标注部分人脸(肤色区域)人脸图像
- – 统计方法得到 ,
- – 设置合适的阈值截断
- • 测试阶段
- – 逐像素判断其是否在设定的肤色特征范围内
- • 对检测到的肤色区域进行分析
- – 接近椭圆形
- – 有部分非肤色区域(五官、头发)
- • 肤色模型难以适应各种环境光照变化
- – 对于背景和前景的光照变化,肤色通常不稳定
- – 单纯的肤色信息对于人脸检测通常是不充分的
- • 如何适应在不同光照下的人脸跟踪
- – 如果环境光照有变化,原有的肤色模型可能不再适用,如何建立一个自适应的肤色模型需要进一步的研究
5.2基于AdaBoost的快速人脸检测
- 在2001年的ICCV上,当时在Compaq的研究员Paul Viola和Michael J. Jones发表的文章介绍了一个实时人脸检测系统
- – 图像大小为384x288时,其速度是平均每秒15帧
- – 第一个准实时的(准正面)人脸检测系统
- – 可以较容易的扩展到多姿态人脸检测
- • 系统在技术上的三个贡献:
- – 1.用简单的Haar-like矩形特征作弱特征,可快速计算
- – 2.基于AdaBoost的分类器设计(弱特征弱分类器)
- – 3.采用了Cascade(分级分类器)技术提高检测速度
- 人脸表示方法
- 矩形特征(Haar-like特征)
- – 矩形特征
- • 所有白色矩形中像素的亮度值的和,减去所有灰色矩形中点的亮度值的和,所得到的差即为Haar-like特征
- – 有4种类型的矩形特征
- 具体特征可以用一个五元组表示
- r(x,y,w,h,style)
- – 比如:r(2,2,4,2,A)表示下面的特征
- • 特征值即为白色四个像素与黑色四个像素的差值
- • 如何快速计算任意矩形内
- 所有像素的亮度之和?
- 请大家设计一个算法
- – 要求计算量尽可能的小
- 积分图为什么快?没有乘法,只有加减
- AdaBoost分类器
- – Adaboost学习算法是用来提高简单分类算法的性能的 – 通过对一些弱分类器的组合来形成一个强分类器
- • 功能–
- 将分类性能不好的弱分类器提升为分类性能好的强分类器的学习算法
- • 思想–
- 学习一系列分类器,在这个序列中每一个分类器对它前一个分类器导致的错误分类样例给予更大的重视
- 学习一系列分类器,在这个序列中每一个分类器对它前一个分类器导致的错误分类样例给予更大的重视
- • 输入
- – 1.训练用人脸和非脸样本
- – 2.指定要挑选出来的弱分类器的数目T
- • 这也是程序循环的次数
- – 3.利用先验知识初始化权值向量
- • 一般可以平均设置
- • 一般可以平均设置
- 检测系统的构建
- 遍历所有位置
- 人脸有大有小
- 还有旋转
- 如何加速?
- 方法1 – 只用一个筛子,网眼非常小,所有的都要过这个筛子
- • 方法2 – 用一系列筛子,网眼从大到小 – 非常容易被截住的巨石首先被排除,然后是大石头,再是小石头,沙 砾,粗沙,最后是细沙
- 基于分级分类器的加速策略
- – 大量候选窗口可以利用非常少量的特征(简单快速的分类器)就可以排除是人脸的可能性!
- – 只有极少数需要大量的特征(更复杂的更慢的分类器来判别是否人脸)
- • 采用由粗到细的思想(coarse to fine)
- – 将少量区分性好的特征构成的简单分类器置于前面若干层
- • 效果:
- 放过检测绝大多数人脸的同时,排除大量非脸
- – 后面层包含更多次重要的特征对非脸进行进一步排除
- 检测率要高,误检率随意(比猜测好点就行)
- • 训练方法关键思路
- – 每层训练用非脸样本使用前面层分类器误判为人脸的那些样本
- – 每层训练用非脸样本使用前面层分类器误判为人脸的那些样本