转载请务必经过我的同意

  • 【人工智能】不确定性推理(QDU)
  • 【人工智能】传统机器学习算法(QDU)
  • 【人工智能】非线性分类器(QDU)
  • 【人工智能】机器学习基础(QDU)
  • 【人工智能】深度学习(QDU)

非线性分类器

  1. 支持向量机(SVM,support vector machine)
  2. boosting算法

支持向量机

简介

支持向量机(support vector machines)是一种二分类模型,它的目的是寻找一个超平面来对样本进行分割,分割的原则是间隔最大化,最终转化为一个凸二次规划问题来求解。由简至繁的模型包括:

  • 当训练样本线性可分时,通过硬间隔最大化,学习一个线性可分支持向量机;(也称硬间隔 SVM或线性可分 SVM)
  • 当训练样本近似线性可分时,通过软间隔最大化,学习一个线性支持向量机;(也称软间隔 SVM或线性不可分 SVM)
  • 当训练样本线性不可分时,通过核技巧和软间隔最大化,学习一个非线性支持向量机;(也称核函数或非线性 SVM)

间隔最大化准则

“间隔最大化”是用于确定最优超平面的方法,其要求找到一个超平面能够将训练样本没有错误地分开,并且两类训练样本中离超平面最近的样本与超平面之间的距离是最大的,则我们把这个超平面称作最优分类超平面(Optimal Seperating Hyperplanc),简称最优超平面(Optimal Hyperplanc)。两类样本中离分类面最近的样本到分类面的距离之和称作分类间隔(margin),最优超平面也称作最大间隔超平面。

上述“间隔最大化准则”是SVM的基本思想,在训练样本具有不同特征的情况下会有所不同,下面的硬间隔和软间隔中会有体现。

硬间隔 SVM (线性可分 SVM)

硬间隔部分可以通过下图来理解:

给定一组数据 (x(1),y(1)),(x(2),y(2),…,(x(m),y(m)){(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)},…,(x^{(m)},y^{(m)})}(x(1),y(1)),(x(2),y(2),…,(x(m),y(m)), 其中 x(i)x^{(i)}x(i)为ddd维列向量,x(i)∈Rdx^{(i)}∈R^dx(i)∈Rd,y(i)y^{(i)}y(i)是一个数,y(i)∈{−1,+1}y^{(i)}∈\{−1,+1\}y(i)∈{−1,+1} 。如果两类样本线性可分,即存在一个超平面 w⊤x+b=0w^⊤x+b=0w⊤x+b=0 将两类样本分隔开,这样可以得到:
{w⊤x(i)+b>0,ify(i)=+1w⊤x(i)+b<0,ify(i)=−1\begin{cases} w^⊤x^{(i)}+b>0, && if && y^{(i)} = +1 \\ w^⊤x^{(i)}+b<0, && if && y^{(i)} = -1 \\ \end{cases} {w⊤x(i)+b>0,w⊤x(i)+b<0,​​ifif​​y(i)=+1y(i)=−1​
将两个式子合并成一个式子后才方便后续的一些计算,所以合并可得:
y(i)sign(w⊤x(i)+b)=1⟺y(i)(w⊤x(i)+b)>0(1.1)y^{(i)}\space sign(w^⊤x^{(i)}+b)=1\space\space\space⟺\space\space\space y^{(i)}(w^⊤x^{(i)}+b)>0 \tag{$1.1$} y(i) sign(w⊤x(i)+b)=1   ⟺   y(i)(w⊤x(i)+b)>0(1.1)
对于任意的 ζ>0ζ>0ζ>0 ,(1.1)(1.1)(1.1) 式等价于 y(i)(ζw⊤x(i)+ζb)>0y^{(i)}(ζw^⊤x^{(i)}+ζb)>0y(i)(ζw⊤x(i)+ζb)>0,则说明 (w,b)(w,b)(w,b) 具有放缩不变性,为了后面优化方便,令 min∣w⊤x+b∣=1min|w^⊤x+b|=1min∣w⊤x+b∣=1,即:
{w⊤x(i)+b≥+1,ify(i)=+1w⊤x(i)+b≤−1,ify(i)=−1\begin{cases} w^⊤x^{(i)}+b≥+1, && if && y^{(i)} = +1 \\ w^⊤x^{(i)}+b≤-1, && if && y^{(i)} = -1 \\ \end{cases} {w⊤x(i)+b≥+1,w⊤x(i)+b≤−1,​​ifif​​y(i)=+1y(i)=−1​
(1.1)(1.1)(1.1) 式就转化为
y(i)(w⊤x(i)+b)≥1(1.2)y^{(i)}(w^⊤x^{(i)}+b)≥1 \tag{$1.2$} y(i)(w⊤x(i)+b)≥1(1.2)
要实现间隔最大化(不知道大家能不能理解“间隔最大化”的目的?目的是得到最优分类面,即w∗w^*w∗和b∗b^*b∗),就需要先表示出间隔。刚刚也提到了间隔就是两类样本中距离分类面最近的样本的距离和,通过类似于平面中点到直线的距离公式可以类比得到ddd维中间隔为离分类面最近的正样本点到分类面和离分类面最近的负样本点到分类面的距离之和,或者可以理解为上图中两条虚线的距离,即1∣∣w∣∣+1∣∣w∣∣=2∣∣w∣∣\frac{1}{||w||}+\frac{1}{||w||} = \frac{2}{||w||}∣∣w∣∣1​+∣∣w∣∣1​=∣∣w∣∣2​。(∣∣w∣∣||w||∣∣w∣∣为www的二范数)

因此,线性SVM的优化目标为:
max⁡w,b2∣∣w∣∣⟹min⁡w,b12∣∣w∣∣2\max \limits_{w,b} \frac{2}{||w||}\space\space\space ⟹\space\space\space \min \limits_{w,b} \frac{1}{2}||w||^2 \\ w,bmax​∣∣w∣∣2​   ⟹   w,bmin​21​∣∣w∣∣2

s.t.y(i)(w⊤x(i)+b)≥1,i=1,2,…,m(1.3)s.t. \space\space\space\space\space\space y^{(i)}(w^⊤x^{(i)}+b)≥1,\space\space\space\space\space i=1,2,…,m \tag{$1.3$} s.t.      y(i)(w⊤x(i)+b)≥1,     i=1,2,…,m(1.3)

这是一个凸二次规划(convex quadratic programming)问题,可用现成的二次规划问题优化方法求解(如:Interior point method、Active set method、Gradient projection method等),但是现有求解方法都比较低效,尤其是在处理大数量的训练样本时。所以现实中一般采用对偶算法(dual algorithm),通过求解原始问题(primal problem)的对偶问题(dual problem),来获得原始问题的最优解。这样做的优点,一是对偶问题往往更容易求解,二是能自然地引入核函数,进而高效地解决高维非线性分类问题。

有关问题的转化了解即可。

原始的优化问题 (1.3)(1.3)(1.3) 式与对偶问题的转换关系如下,

由拉格朗日乘子法,注意这里有 mmm 个样本,于是为每条约束引入拉格朗日乘子 αi≥0\alpha_i≥0αi​≥0 ,(1.3)(1.3)(1.3) 式的拉格朗日函数为:
L(w,b,α)=12∣∣w∣∣2+∑i=1mαi(1−yi(wTxi+b))(2.1)L(w,b,\alpha)=\frac{1}{2}||w||^2+\sum_{i=1}^m \alpha_i(1-y_i(w^Tx_i+b)) \tag{$2.1$} L(w,b,α)=21​∣∣w∣∣2+i=1∑m​αi​(1−yi​(wTxi​+b))(2.1)
其中,α=(α1,α2,...,αm)T∈R+m\alpha=(\alpha_1,\alpha_2,...,\alpha_m)^T∈R_+^mα=(α1​,α2​,...,αm​)T∈R+m​,称为LagrangeLagrangeLagrange乘子。

其相应的对偶问题为:
max⁡αmin⁡w,b12∣∣w∣∣2+∑i=1mαi(1−yi(wTxi+b))s.t.αi≥0,i=1,2,...,m(2.2)\max \limits_{\alpha} \min \limits_{w,b} \frac{1}{2}||w||^2+\sum_{i=1}^m \alpha_i(1-y_i(w^Tx_i+b)) \tag{$2.2$} \\ s.t.\space\space\space\space\space\space \alpha_i≥0,\space\space\space\space\space i=1,2,...,m αmax​w,bmin​21​∣∣w∣∣2+i=1∑m​αi​(1−yi​(wTxi​+b))s.t.      αi​≥0,     i=1,2,...,m(2.2)
上式内层对 (w,b)(w,b)(w,b) 的优化属于无约束优化问题,由极值条件可知,偏导等于零:
∂L∂w=0⟹w=∑i=1mαiyixi∂L∂b=0⟹∑i=1mαiyi=0\frac{∂L}{∂w}=0 \space\space\space⟹\space\space\space w=\sum_{i=1}^m\alpha_iy_ix_i \\ \frac{∂L}{∂b}=0 \space\space\space⟹\space\space\space \sum_{i=1}^m\alpha_iy_i=0 \\ ∂w∂L​=0   ⟹   w=i=1∑m​αi​yi​xi​∂b∂L​=0   ⟹   i=1∑m​αi​yi​=0
代入 (2,2)(2,2)(2,2) 式得:
max⁡α∑i=1mαi−12∑i=1m∑j=1mαiαjyiyjxiTxjs.t.αi≥0,i=1,2,...,m∑i=1mαiyi=0(2.3)\max \limits_{\alpha} \sum_{i=1}^m \alpha_i - \frac{1}{2}\sum_{i=1}^m\sum_{j=1}^m \alpha_i\alpha_jy_iy_jx_i^Tx_j \\ \\ s.t.\space\space\space\space\space\space \alpha_i≥0,\space\space\space\space\space i=1,2,...,m \\ \tag{$2.3$} \sum_{i=1}^m\alpha_iy_i=0 αmax​i=1∑m​αi​−21​i=1∑m​j=1∑m​αi​αj​yi​yj​xiT​xj​s.t.      αi​≥0,     i=1,2,...,mi=1∑m​αi​yi​=0(2.3)


推导过程:
L(w,b,α)=12∣∣w∣∣2+∑i=1mαi(1−yi(wTxi+b))=12wTw+∑i=1m(αi−αiyiwTxi−bαiyi)=12wT∑i=1mαiyixi+∑i=1mαi−wT∑i=1mαiyixi−b∑i=1mαiyi=∑i=1mαi−12wT∑i=1mαiyixi=∑i=1mαi−12(∑i=1mαiyixi)T∑i=1mαiyixi=∑i=1mαi−12∑i=1mαiyixiT∑i=1mαiyixi=∑i=1mαi−12∑i=1m∑j=1mαiαjyiyjxiTxj=∑i=1mαi−12∑i=1m∑j=1mαiαjyiyj<xi,xj>L(w,b,\alpha) \\\\ =\frac{1}{2}||w||^2+\sum_{i=1}^m \alpha_i(1-y_i(w^Tx_i+b))\\\\ = \frac{1}{2}w^Tw+\sum_{i=1}^m (\alpha_i-\alpha_iy_iw^Tx_i-b\alpha_iy_i) \\\\ =\frac{1}{2}w^T\sum_{i=1}^m\alpha_iy_ix_i + \sum_{i=1}^m \alpha_i-w^T\sum_{i=1}^m\alpha_iy_ix_i-b\sum_{i=1}^m\alpha_iy_i \\\\ =\sum_{i=1}^m \alpha_i-\frac{1}{2}w^T\sum_{i=1}^m\alpha_iy_ix_i \\\\ =\sum_{i=1}^m \alpha_i-\frac{1}{2}(\sum_{i=1}^m\alpha_iy_ix_i)^T\sum_{i=1}^m\alpha_iy_ix_i \\\\ =\sum_{i=1}^m \alpha_i-\frac{1}{2}\sum_{i=1}^m\alpha_iy_ix_i^T\sum_{i=1}^m\alpha_iy_ix_i \\\\ =\sum_{i=1}^m \alpha_i-\frac{1}{2}\sum_{i=1}^m\sum_{j=1}^m \alpha_i\alpha_jy_iy_jx_i^Tx_j \\\\ =\sum_{i=1}^m \alpha_i-\frac{1}{2}\sum_{i=1}^m\sum_{j=1}^m \alpha_i\alpha_jy_iy_j<x_i,x_j> \\\\ L(w,b,α)=21​∣∣w∣∣2+i=1∑m​αi​(1−yi​(wTxi​+b))=21​wTw+i=1∑m​(αi​−αi​yi​wTxi​−bαi​yi​)=21​wTi=1∑m​αi​yi​xi​+i=1∑m​αi​−wTi=1∑m​αi​yi​xi​−bi=1∑m​αi​yi​=i=1∑m​αi​−21​wTi=1∑m​αi​yi​xi​=i=1∑m​αi​−21​(i=1∑m​αi​yi​xi​)Ti=1∑m​αi​yi​xi​=i=1∑m​αi​−21​i=1∑m​αi​yi​xiT​i=1∑m​αi​yi​xi​=i=1∑m​αi​−21​i=1∑m​j=1∑m​αi​αj​yi​yj​xiT​xj​=i=1∑m​αi​−21​i=1∑m​j=1∑m​αi​αj​yi​yj​<xi​,xj​>

说明:

  1. 第一个等号后的式子为原式
  2. 第二个等号后的式子:将向量的二范数化为向量乘法的形式(内积),即∣∣w∣∣2=wTw||w||^2=w^Tw∣∣w∣∣2=wTw;将求和符号中的式子展开
  3. 第三个等号后的式子:代入w=∑i=1mαiyixiw=\sum_{i=1}^m\alpha_iy_ix_iw=∑i=1m​αi​yi​xi​;由于www和xxx为向量,其余变量均为数,所以化为如此样式
  4. 第四个等号后的式子:代入∑i=1mαiyi=0\sum_{i=1}^m\alpha_iy_i=0∑i=1m​αi​yi​=0,并合并同类项
  5. 第五个等号后的式子:代入w=∑i=1mαiyixiw=\sum_{i=1}^m\alpha_iy_ix_iw=∑i=1m​αi​yi​xi​
  6. 第六个等号后的式子:由于αi\alpha_iαi​和yiy_iyi​为数值,xix_ixi​为向量,所以相当于对xix_ixi​ 转置
  7. 第七个等号后的式子:将两个求和合并
  8. 第八个等号后的式子:xiTxj=<xi,xj>x_i^Tx_j=<x_i,x_j>xiT​xj​=<xi​,xj​>,<a,b><a,b><a,b>表示两向量的内积,结果为数值

$ (2.2)$ 式的最优解应满足 KKT 条件(不证明),由 KKT 条件中的互补松弛条件(不说明)可知αi(1−yi(wTxi+b))=0\alpha_i(1-y_i(w^Tx_i+b))=0αi​(1−yi​(wTxi​+b))=0。当αi>0\alpha_i>0αi​>0时,yi(wTxi+b)=1y_i(w^Tx_i+b)=1yi​(wTxi​+b)=1,说明这些样本点 (xi,yi)(x_i,y_i)(xi​,yi​) 一定在间隔边界上,它们被称为“支持向量”,这些点共同决定了分离超平面。这是 svm 的一个重要特性: 训练完成后,大部分训练样本不需要保留,最终模型仅与支持向量有关

于是可根据支持向量求 www:
w=∑i=1mαiyixi=∑i:αi=0m0⋅yixi+∑i:αi>0mαiyixi=∑i∈SVαiyixi(2.4)w\\\tag{$2.4$} =\sum_{i=1}^m\alpha_iy_ix_i \\ =\sum_{i:\alpha_i=0}^m 0·y_ix_i+\sum_{i:\alpha_i>0}^m \alpha_iy_ix_i \\ =\sum_{i∈SV} \alpha_iy_ix_i w=i=1∑m​αi​yi​xi​=i:αi​=0∑m​0⋅yi​xi​+i:αi​>0∑m​αi​yi​xi​=i∈SV∑​αi​yi​xi​(2.4)
其中 SVSVSV 代表所有支持向量的集合。对于任意支持向量 (xs,ys)(x_s,y_s)(xs​,ys​),都有 ys(wTxs+b)=1y_s(w^Tx_s+b)=1ys​(wTxs​+b)=1。将 (2.4)(2.4)(2.4)式代入,并利用ys2=1y_s^2=1ys2​=1:
ys(∑i∈SVαiyixiTxs+b)=ys2⟹b=ys−∑i∈SVαiyixiTxsy_s(\sum_{i∈SV} \alpha_iy_ix_i^Tx_s+b)=y_s^2 \space\space\space⟹\space\space\space b=y_s-\sum_{i∈SV}\alpha_iy_ix_i^Tx_s ys​(i∈SV∑​αi​yi​xiT​xs​+b)=ys2​   ⟹   b=ys​−i∈SV∑​αi​yi​xiT​xs​
实践中,为了得到对 bbb 更稳健的估计,通常对所有支持向量求解得到 bbb 的平均值:
b=1∣SV∣∑s∈SV(ys−∑i∈SVαiyixiTxs)b= \frac{1}{|SV|} \sum_{s∈SV}(y_s-\sum_{i∈SV}\alpha_iy_ix_i^Tx_s) b=∣SV∣1​s∈SV∑​(ys​−i∈SV∑​αi​yi​xiT​xs​)

于是线性 svm 的分类决策函数可表示为:
f(x)=sign(∑i∈SVαiyixiTx+b)f(x)=sign(\sum_{i∈SV} \alpha_iy_ix_i^Tx+b) f(x)=sign(i∈SV∑​αi​yi​xiT​x+b)


QDU的PPT中:

输入:线性可分训练集T=(x1,y1),...,(xm,ym)T={(x_1,y_1),...,(x_m,y_m)}T=(x1​,y1​),...,(xm​,ym​),其中xi∈ℵ=Rnx_i∈\aleph=R^nxi​∈ℵ=Rn,yi∈γ=−1,+1,i=1,2,...,my_i∈\gamma={-1,+1},i=1,2,...,myi​∈γ=−1,+1,i=1,2,...,m

输出:最大间隔分离超平面和分类决策函数

(1)构建并求解约束最优化问题(化成极小值形式)
min⁡α12∑i=1m∑j=1mαiαjyiyjxiTxj−∑i=1mαis.t.αi≥0,i=1,2,...,m∑i=1mαiyi=0\min \limits_{\alpha}\frac{1}{2}\sum_{i=1}^m\sum_{j=1}^m \alpha_i\alpha_jy_iy_jx_i^Tx_j - \sum_{i=1}^m \alpha_i \\\\ s.t.\space\space\space\space\space\space \alpha_i≥0,\space\space\space\space\space i=1,2,...,m \\ \sum_{i=1}^m\alpha_iy_i=0 αmin​21​i=1∑m​j=1∑m​αi​αj​yi​yj​xiT​xj​−i=1∑m​αi​s.t.      αi​≥0,     i=1,2,...,mi=1∑m​αi​yi​=0
求得最优解α∗=(α1∗,α2∗,...,αm∗)\alpha^*=(\alpha_1^*,\alpha_2^*,...,\alpha_m^*)α∗=(α1∗​,α2∗​,...,αm∗​)

(2)计算
w∗=∑i=1mαi∗yixib∗=−12(max⁡i:yi=−1wTxi+min⁡i:yi=1wTxi)w^*=\sum_{i=1}^m \alpha_i^*y_ix_i \\ \\ b^*=-\frac{1}{2}(\max \limits_{i:y_i=-1}w^Tx_i + \min \limits_{i:y_i=1}w^Tx_i) w∗=i=1∑m​αi∗​yi​xi​b∗=−21​(i:yi​=−1max​wTxi​+i:yi​=1min​wTxi​)

max⁡i:yi=−1\max \limits_{i:y_i=-1}i:yi​=−1max​ 对应的是负样本点一侧的支持向量,即最上面的图片中穿过负样本点的虚线;

max⁡i:yi=1\max \limits_{i:y_i=1}i:yi​=1max​ 对应的是正样本点一侧的支持向量,即最上面的图片中穿过正样本点的虚线;

(3)得到分离超平面
w∗x+b∗=0w^*x+b^*=0 w∗x+b∗=0
得到分类决策函数
f(x)=sign(w∗x+b∗)f(x)=sign(w^*x+b^*) f(x)=sign(w∗x+b∗)


缺点:1. 不适用于线性不可分数据集。 2. 对离群点(outlier)敏感。

比如下图就无法找到一个超平面将蓝点和紫点完全分开:

下图显示加入了一个离群点后,超平面发生了很大的变动,最后形成的间隔变得很小,这样最终的泛化效果可能不会太好。

软间隔 SVM(近似线性可分 SVM)

为了缓解这些问题,引入了 “软间隔(soft margin)”,即允许一些样本点跨越间隔边界甚至是超平面。如下图中一些离群点就跨过了间隔边界。

于是为每个样本点引入松弛变量 ξiξ_iξi​,优化问题变为:

min⁡w,b,ξ12∣∣w∣∣2+C∑i=1mξis.t.yi(wTxi+b)≥1−ξiξi≥0,i=1,2,...,m(3.1)\min \limits_{w,b,ξ}\frac{1}{2}||w||^2+C\sum_{i=1}^mξ_i \\\\ \tag{$3.1$} s.t.\space\space\space\space\space\space y_i(w^Tx_i+b)≥1-ξ_i \\ ξ_i≥0,\space\space\space\space\space\space i=1,2,...,m w,b,ξmin​21​∣∣w∣∣2+Ci=1∑m​ξi​s.t.      yi​(wTxi​+b)≥1−ξi​ξi​≥0,      i=1,2,...,m(3.1)
由上式可以看出:

  1. 离群点的松弛变量值越大,点就离间隔边界越远。
  2. 所有没离群的点松弛变量都等于0,即这些点都满足 yi(w⊤xi+b)⩾1y_i(w^⊤x_i+b)⩾1yi​(w⊤xi​+b)⩾1
  3. C>0C>0C>0 被称为惩罚参数,即为 scikit-learn 中的 svm 超参数C。当C设的越大,意味着对离群点的惩罚就越大,最终就会有较少的点跨过间隔边界,模型也会变得复杂。而C设的越小,则较多的点会跨过间隔边界,最终形成的模型较为平滑。

该优化问题的求解方法与硬间隔类似,为每条约束引入拉格朗日乘子: αi⩾0\alpha_i⩾0αi​⩾0,βi⩾0\beta_i⩾0βi​⩾0,αi⩾0\alpha_i⩾0αi​⩾0,βi⩾0\beta_i⩾0βi​⩾0 ,(3.1)(3.1)(3.1) 式的拉格朗日函数为:
L(w,b,ξ,α,β)=12∣∣w∣∣2+C∑i=1mξi+∑i=1mαi[1−ξi−yi(wTxi+b)]+∑i=1mβi(−ξi)(3.2)L(w,b,ξ,\alpha, \beta)=\frac{1}{2}||w||^2+C\sum_{i=1}^mξ_i+\sum_{i=1}^m\alpha_i[1-ξ_i-y_i(w^Tx_i+b)]+\sum_{i=1}^m\beta_i(-ξ_i)\tag{$3.2$} L(w,b,ξ,α,β)=21​∣∣w∣∣2+Ci=1∑m​ξi​+i=1∑m​αi​[1−ξi​−yi​(wTxi​+b)]+i=1∑m​βi​(−ξi​)(3.2)
其对偶问题为:
max⁡α,βmin⁡w,b,ξL(w,b,ξ,α,β)s.t.αi≥0,i=1,2,...,mβi≥0,i=1,2,...,m(3.3)\tag{$3.3$} \\ \max \limits_{\alpha, \beta}\min\limits_{w, b, ξ}L(w,b,ξ,\alpha,\beta)\\ s.t.\space\space\space\space\space\space \alpha_i≥0,\space\space\space\space\space\space i=1,2,..., m\\ \space\space\space\space\space\space\space\space\space\space\space\space\space \beta_i≥0,\space\space\space\space\space\space i=1,2,..., m\\ α,βmax​w,b,ξmin​L(w,b,ξ,α,β)s.t.      αi​≥0,      i=1,2,...,m             βi​≥0,      i=1,2,...,m(3.3)
上式内层对 (w,b,ξ)(w,b,ξ)(w,b,ξ) 的优化属于无约束优化问题,则令偏导为零:
∂L∂w=0⟹w=∑i=1mαiyixi(3.4)\frac{∂L}{∂w}=0\space\space\space⟹\space\space\space w=\sum_{i=1}^m\alpha_iy_ix_i \tag{$3.4$} ∂w∂L​=0   ⟹   w=i=1∑m​αi​yi​xi​(3.4)

∂L∂b=0⟹∑i=1mαiyi=0(3.5)\frac{∂L}{∂b}=0\space\space\space⟹\space\space\space \sum_{i=1}^m\alpha_iy_i=0 \tag{$3.5$} ∂b∂L​=0   ⟹   i=1∑m​αi​yi​=0(3.5)

∂L∂ξ=0⟹βi=C−αi(3.6)\frac{∂L}{∂ξ}=0\space\space\space⟹\space\space\space \beta_i=C-\alpha_i \tag{$3.6$} ∂ξ∂L​=0   ⟹   βi​=C−αi​(3.6)

将 (3.4)∼(3.6)(3.4)∼(3.6)(3.4)∼(3.6) 式代入 (3.2)(3.2)(3.2) 式得:
L(w,b,ξ,α,β)=12∑i=1m∑j=1mαiαjyiyjxiTxj+C∑i=1mξi+∑i=1mαi(1−ξi)−∑i=1m(C−αi)ξi=∑i=1mαi−12∑i=1m∑j=1mαiαjyiyjxiTxjL(w,b,ξ,\alpha,\beta)=\frac{1}{2}\sum_{i=1}^m\sum_{j=1}^m\alpha_i\alpha_jy_iy_jx_i^Tx_j+C\sum_{i=1}^mξ_i+\sum_{i=1}^m\alpha_i(1-ξ_i)-\sum_{i=1}^m(C-\alpha_i)ξ_i \\ =\sum_{i=1}^m\alpha_i-\frac{1}{2}\sum_{i=1}^m\sum_{j=1}^m\alpha_i\alpha_jy_iy_jx_i^Tx_j L(w,b,ξ,α,β)=21​i=1∑m​j=1∑m​αi​αj​yi​yj​xiT​xj​+Ci=1∑m​ξi​+i=1∑m​αi​(1−ξi​)−i=1∑m​(C−αi​)ξi​=i=1∑m​αi​−21​i=1∑m​j=1∑m​αi​αj​yi​yj​xiT​xj​
又由 (1.6)(1.6)(1.6) 式: βi=C−αi⩾0β_i=C−α_i⩾0βi​=C−αi​⩾0 ,因而 0⩽αi⩽C0⩽α_i⩽C0⩽αi​⩽C ,于是最后的优化问题化简为:
max⁡α∑i=1mαi−12∑i=1m∑j=1mαiαjyiyjxiTxjs.t.∑i=1mαiyi=00≤αi≤C,i=1,2,...,m(3.7)\max\limits_{\alpha} \sum_{i=1}^m\alpha_i-\frac{1}{2}\sum_{i=1}^m\sum_{j=1}^m\alpha_i\alpha_jy_iy_jx_i^Tx_j \\\\ \tag{$3.7$} s.t.\space\space\space\space\space\space \sum_{i=1}^m\alpha_iy_i=0\\ \space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space0≤\alpha_i≤C,\space\space\space\space\space\space i=1,2,...,m αmax​i=1∑m​αi​−21​i=1∑m​j=1∑m​αi​αj​yi​yj​xiT​xj​s.t.      i=1∑m​αi​yi​=0                                              0≤αi​≤C,      i=1,2,...,m(3.7)
求得α∗=(α1∗,α2∗,...,αm∗)T\alpha^*=(\alpha^*_1, \alpha^*_2,...,\alpha^*_m)^Tα∗=(α1∗​,α2∗​,...,αm∗​)T中对应于αi∗>0\alpha_i^*>0αi∗​>0的样本点 $ (x_i,y_i)$的实例 xix_ixi​。
ξi≥0⟺{ξi=0,xi在间隔边界上0<ξi<1,xi在间隔边界于分离超平面之间ξi=1,xi在分离超平面上ξi>1,xi在分离超平面误分类一侧ξ_i≥0\space\space\space\space\space\space ⟺\space\space\space\space\space\space \begin{cases} ξ_i=0, \space\space\space\space\space\space x_i在间隔边界上\\ 0<ξ_i<1,\space\space\space\space\space\space x_i在间隔边界于分离超平面之间 \\ ξ_i=1,\space\space\space\space\space\space x_i在分离超平面上 \\ ξ_i>1,\space\space\space\space\space\space x_i在分离超平面误分类一侧 \\ \end{cases} ξi​≥0      ⟺      ⎩⎪⎪⎪⎨⎪⎪⎪⎧​ξi​=0,      xi​在间隔边界上0<ξi​<1,      xi​在间隔边界于分离超平面之间ξi​=1,      xi​在分离超平面上ξi​>1,      xi​在分离超平面误分类一侧​

软间隔SVM允许样本有一定程度的误分类。但其实本质依然是线性分类器。

核方法(线性不可分 SVM)

前面展示的硬间隔和软间隔 svm 主要是用于处理线性分类问题,然而现实中很多分类问题是非线性的,如下图所示,无论怎样一个线性超平面都无法很好地将样本点分类:

所以在此引入核函数(kernel function),构造非线性svm,如下图所示,左图使用的是多项式核函数,右图使用的是高斯核函数,二者均能将样本点很好地分类:

核函数的主要作用是将样本从原始空间映射到一个更高维的特征空间,使得样本在这个特征空间内线性可分。下图显示原来在二维空间不可分的两类样本点,在映射到三维空间后变为线性可分:

但回到原来的二维空间中,决策边界就变成非线性的了:

核函数是如何将原始空间映射到高维的特征空间的? 下面先举个例子:

假设做一个2维到3维的映射,Φ:R2⟶R3Φ:R^2⟶R^3Φ:R2⟶R3
ϕ(x)=ϕ(x1x2)=(x122x1x2x22)\phi(x)= \phi \left( \begin{matrix}{} x_1\\x_2 \end{matrix} \right)= \left( \begin{matrix}{} x_1^2\\\sqrt{2}x_1x_2\\x_2^2 \end{matrix} \right) ϕ(x)=ϕ(x1​x2​​)=⎝⎛​x12​2​x1​x2​x22​​⎠⎞​

求 ϕ(a)ϕ(a)ϕ(a) 和 ϕ(b)ϕ(b)ϕ(b) 的内积:
ϕ(a)Tϕ(b)=(a122a1a2a22)T⋅(b122b1b2b22)=a12b12+2a1b1a2b2+a22b22=(a1b1+a2b2)2=((a1a2)T(b1b2))2=(aTb)2\phi(a)^T\phi(b)= \left( \begin{matrix}{} a_1^2\\\sqrt{2}a_1a_2\\a_2^2 \end{matrix} \right)^T · \left( \begin{matrix}{} b_1^2\\\sqrt{2}b_1b_2\\b_2^2 \end{matrix} \right) \\= a_1^2b_1^2 + 2a_1b_1a_2b_2+a_2^2b_2^2 =(a_1b_1+a_2b_2)^2= \left( \begin{matrix}{} \left( \begin{matrix}{} a_1\\a_2 \end{matrix} \right)^T \left( \begin{matrix}{} b_1\\b_2 \end{matrix} \right) \end{matrix} \right)^2= (a^Tb)^2 ϕ(a)Tϕ(b)=⎝⎛​a12​2​a1​a2​a22​​⎠⎞​T⋅⎝⎛​b12​2​b1​b2​b22​​⎠⎞​=a12​b12​+2a1​b1​a2​b2​+a22​b22​=(a1​b1​+a2​b2​)2=((a1​a2​​)T(b1​b2​​)​)2=(aTb)2
可以看出转换后向量的内积等于原向量内积的平方,即 ϕ(a)Tϕ(b)=(aTb)2ϕ(a)^Tϕ(b)=(a^Tb)^2ϕ(a)Tϕ(b)=(aTb)2。

函数 κ(a,b)=(aTb)2κ(a,b)=(a^Tb)^2κ(a,b)=(aTb)2 被称为二次多项核函数,于是如果想计算高维特征空间的内积 ϕ(a)Tϕ(b)ϕ(a)^Tϕ(b)ϕ(a)Tϕ(b),我们只需计算核函数,即原向量内积的平方 (aTb)2(a^Tb)^2(aTb)2 就可以了。这样做的好处有:

  • 将样本点由原始空间映射到高维空间后,有大概率使原来线性不可分的问题变为线性可分。
  • 核函数的计算是在低维特征空间计算的,它避免了在高维特征空间下计算内积的超高计算量。

接下来对问题作正式的定义: 数据在原始特征空间 RdR^dRd 不是线性可分的,则希望通过一个映射 Φ:Rd⟶Rd~Φ:R^d⟶R^{\tilde{d}}Φ:Rd⟶Rd~

,使得数据在新的特征空间 Rd~R^{\tilde{d}}Rd~ 中线性可分,则软间隔 svm 基本型变为:
min⁡w,b,ξ12∣∣w∣∣2+C∑i=1mξis.t.yi(wTϕ(xi)+b)≥1−ξi,i=1,2,...,mξi≥0,i=1,2,...,m\min \limits_{w,b,ξ}\frac{1}{2}||w||^2+C\sum_{i=1}^mξ_i \\\\ s.t. \space\space\space\space\space y_i(w^T\phi(x_i)+b)≥1-ξ_i, \space\space\space\space\space i=1,2,...,m\\ ξ_i≥0,\space\space\space\space\space i=1,2,...,m w,b,ξmin​21​∣∣w∣∣2+Ci=1∑m​ξi​s.t.     yi​(wTϕ(xi​)+b)≥1−ξi​,     i=1,2,...,mξi​≥0,     i=1,2,...,m
找到一个核函数 κ(xi,xj)=ϕ(xi)⊤ϕ(xj)κ(x_i,x_j)=ϕ(x_i)^⊤ϕ(x_j)κ(xi​,xj​)=ϕ(xi​)⊤ϕ(xj​) ,则相应的对偶型转化为核函数型:
max⁡α∑i=1mαi−12∑i=1m∑j=1mαiαjyiyjϕ(xi)⊤ϕ(xj)s.t.∑i=1mαiyi=00≤αi≤C,i=1,2,...,m⟹max⁡α∑i=1mαi−12∑i=1m∑j=1mαiαjyiyjκ(xi,xj)s.t.∑i=1mαiyi=00≤αi≤C,i=1,2,...,m\max \limits_{\alpha} \sum_{i=1}^m \alpha_i-\frac{1}{2}\sum_{i=1}^m\sum_{j=1}^m\alpha_i\alpha_jy_iy_jϕ(x_i)^⊤ϕ(x_j) \\\\ s.t.\space\space\space\space\space \sum_{i=1}^m\alpha_iy_i=0 \\ \space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space 0≤ \alpha_i ≤ C,\space\space\space\space\space i=1,2,...,m \\\\⟹\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\\\\ \max \limits_{\alpha} \sum_{i=1}^m \alpha_i-\frac{1}{2}\sum_{i=1}^m\sum_{j=1}^m\alpha_i\alpha_jy_iy_jκ(x_i,x_j) \\\\ s.t.\space\space\space\space\space \sum_{i=1}^m\alpha_iy_i=0 \\ \space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space 0≤ \alpha_i ≤ C,\space\space\space\space\space i=1,2,...,m αmax​i=1∑m​αi​−21​i=1∑m​j=1∑m​αi​αj​yi​yj​ϕ(xi​)⊤ϕ(xj​)s.t.     i=1∑m​αi​yi​=0                                            0≤αi​≤C,     i=1,2,...,m⟹                                                                                          αmax​i=1∑m​αi​−21​i=1∑m​j=1∑m​αi​αj​yi​yj​κ(xi​,xj​)s.t.     i=1∑m​αi​yi​=0                                            0≤αi​≤C,     i=1,2,...,m
这样使得计算复杂度由 O(d~)O(\tilde{d})O(d~) 降为 O(d)O(d)O(d) 。求解后的分离超平面为:
f(x)=wTϕ(x)+b=∑i∈SVαiyiϕ(xi)Tϕ(x)+b=∑i∈SVαiyiκ(xi,x)+bf(x)=w^T\phi(x)+b \\\\ =\sum_{i∈SV}\alpha_iy_i\phi(x_i)^T\phi(x)+b \\\\ =\sum_{i∈SV}\alpha_iy_iκ(x_i,x)+b f(x)=wTϕ(x)+b=i∈SV∑​αi​yi​ϕ(xi​)Tϕ(x)+b=i∈SV∑​αi​yi​κ(xi​,x)+b
其中 SVSVSV 代表所有支持向量的集合。这样我们就能以较小的计算量解决非线性分类问题,甚至都不需要知道低维空间的数据是怎样映射到高维空间的,只需要在原来的低维空间计算核函数就行了。

名称 形式 优点 缺点
线性核 κ(xi,xj)=xiTxjκ(x_i,x_j)=x_i^Tx_jκ(xi​,xj​)=xiT​xj​ 速度快,可解释性强。 无法解决非线性可分问题。
多项式核 κ(xi,xj)=(λxiTxj+η)dκ(x_i,x_j)=(\lambda x_i^Tx_j+\eta)^dκ(xi​,xj​)=(λxiT​xj​+η)d 比线性核更一般,ddd 直接描述了被映射空间的复杂度。 参数多 (有 λλλ,ηηη,ddd 要选),且当 ddd 很大时会导致计算不稳定。
径向基函数(RBF 核函数) κ(xi,xj)=exp(−∥xi−xj∥22σ2)κ(x_i,x_j)=exp(-\frac{\|x_i-x_j\|^2}{2\sigma^2})κ(xi​,xj​)=exp(−2σ2∥xi​−xj​∥2​) 只有一个参数,无计算不稳定问题,拟合能力强。 可解释性差,计算慢,易过拟合。

boosting 算法

boosting是一种集成学习算法,由一系列基本分类器按照不同的权重组合成为一个强分类器,这些基本分类器之间有依赖关系。

boosting算法包括:

  1. Adaboost算法
  2. 提升树
  3. GBDT算法

boosting 算法的基本思想:

从图中可以看出,Boosting算法的工作机制是首先从训练集用初始权重训练出一个弱学习器1,根据弱学习的学习误差率表现来更新训练样本的权重,使得之前弱学习器1学习误差率高的训练样本点的权重变高,使得这些误差率高的点在后面的弱学习器2中得到更多的重视。然后基于调整权重后的训练集来训练弱学习器2.,如此重复进行,直到弱学习器数达到事先指定的数目T,最终将这T个弱学习器通过集合策略进行整合,得到最终的强学习器。

Adaboost 算法的基本思路

假设训练集样本是
T={(x1,y1),(x2,y2),...,(xm,ym)}T = \{(x_1, y_1), (x_2, y_2), ..., (x_m,y_m)\} T={(x1​,y1​),(x2​,y2​),...,(xm​,ym​)}
训练集的在第kkk个弱学习器的输出权重为
D(k)=(wk1,wk2,...,wkm)k≠1D(1)=(w11,w12,...,w1i,...,w1m),w1i=1mi=1,2,...,mD(k)=(w_{k1}, w_{k2},..., w_{km}) \space\space\space\space\space\space\space\space\space\space\space\space k≠1 \\\\ D(1)=(w_{11}, w_{12},...,w_{1i},..., w_{1m}), \space\space w_{1i}=\frac{1}{m} \space\space\space\space\space\space \space\space\space\space\space\space i=1,2,...,m D(k)=(wk1​,wk2​,...,wkm​)            k​=1D(1)=(w11​,w12​,...,w1i​,...,w1m​),  w1i​=m1​            i=1,2,...,m
第 kkk 个分类器根据输入的特征预测标签,用Dk(x)D_k(x)Dk​(x)表示。

计算学习误差率eee:

对于二分类而言,输出为{−1,+1}\{-1,+1\}{−1,+1},则第 kkk 个弱分类器 Gk(x)G_k(x)Gk​(x) 在训练集上的加权误差率为
ek=P(Gk(xi)≠yi)=∑i=1mwkiI(Gk(xi)≠yi)e_k=P(G_k(x_i)≠y_i)\\\\ \space\space\space\space\space\space\space\space\space\space\space\space\space\space\space=\sum_{i=1}^m w_{ki}I(G_k(x_i)≠y_i) ek​=P(Gk​(xi​)​=yi​)               =i=1∑m​wki​I(Gk​(xi​)​=yi​)

其中I(⋅)I(·)I(⋅)的作用与C语言中bool类型转换为int类型的作用一致,即若表达式 ⋅·⋅ 为真,则I(⋅)I(·)I(⋅)的值为1,否则为0。

上面式子将全部误判的点的权重加起来。

弱学习器权重系数α:

对于二分类问题,第kkk个弱分类器的权重系数为
αk=12log1−ekek\alpha_k=\frac{1}{2}log\frac{1-e_k}{e_k} αk​=21​logek​1−ek​​
从上式可以看出,如果分类误差率 eke_kek​ 越大,则对应的弱分类器权重系数 αkα_kαk​ 越小。也就是说,误差率小的弱分类器权重系数越大。

更新样本权重DDD:

假设第kkk个弱分类器的样本集权重系数为D(k)=(wk1,wk2,...wkm)D(k)=(w_{k1},w_{k2},...w_{km})D(k)=(wk1​,wk2​,...wkm​),则对应的第 k+1k+1k+1个弱分类器的样本集权重系数为
wk+1,i=wkiZKexp(−αkyiGk(xi))w_{k+1,i}=\frac{w_{ki}}{Z_K}exp(-\alpha_ky_iG_k(x_i)) wk+1,i​=ZK​wki​​exp(−αk​yi​Gk​(xi​))
其中,ZKZ_KZK​是规范化因子
ZK=∑i=1mwkiexp(−αkyiGk(xi))Z_K = \sum_{i=1}^mw_{ki}exp(-\alpha_ky_iG_k(x_i)) ZK​=i=1∑m​wki​exp(−αk​yi​Gk​(xi​))
从wk+1,iw_{k+1,i}wk+1,i​i计算公式可以看出,如果第i个样本分类错误,则yiGk(xi)<0y_iG_k(x_i)<0yi​Gk​(xi​)<0,导致样本的权重在第 k+1k+1k+1 个弱分类器中增大,如果分类正确,则权重在第 k+1k+1k+1个弱分类器中减少。

弱分类器的结合策略:

Adaboost 分类采用的是加权表决法,最终的强分类器为
f(x)=sign(∑k=1KαkGk(xi))f(x)=sign(\sum_{k=1}^K\alpha_kG_k(x_i)) f(x)=sign(k=1∑K​αk​Gk​(xi​))

Gk(x)G_k(x)Gk​(x) 的确定:

每个弱分类器都是一个单层决策树,这也就是为什么说“一个特征对应一个弱分类器”。

对于二分类问题
Gk(x)={1pf(x)<pθ0elseG_k(x)= \begin{cases} 1 & pf(x)<p\theta \\ 0 & else \end{cases} Gk​(x)={10​pf(x)<pθelse​
其中,ppp用于控制不等式的符号,如果p=−1p=-1p=−1,那么pf(x)<pθpf(x)<p\thetapf(x)<pθ与f(x)>θf(x)>\thetaf(x)>θ具有相同的含义,引入该变量只是为了方便格式统一;f(x)f(x)f(x)表示图像xxx的某个特征值;θ\thetaθ为阈值,即当特征值大于(当p=−1p=-1p=−1时)阈值时,该分类器判断该样本的标签为1。

出现了三个问题:

① 一个弱分类器对应一个特征(但可能存在多个弱分类器对应同一个特征的情况),那么如何确定该弱分类器要使用哪个特征进行判别?

② 如何确定阈值θ\thetaθ?

③ 如何确定符号ppp?

误差率:是指全部预测错误的样本的权重之和(样本权重就是上面讲到的DDD);

最小误差率:与阈值θ\thetaθ和符号ppp的选取息息相关的,当p=1p=1p=1时,某特征下特征值小于θ\thetaθ的全部样本将被预测成1,其余均为预测成0;类似地,当p=−1p=-1p=−1时,某特征下特征值大于θ\thetaθ的全部样本将被预测成1,其余均为预测成0;那么最小误差率,就是选取合适的θ\thetaθ和ppp使某个特征下的误差率最小。

解决以上三个问题的整体思路:从众多特征中,选择最小误差率最小的特征作为该弱分类器的决策特征(而为保证最小误差率,阈值θ\thetaθ和符号ppp已经确定)。

解决以上三个问题的步骤,即确定Gk(x)G_k(x)Gk​(x)的步骤:

step1:遍历全部特征(值)

step2:得到全部样本该特征的最大值和最小值。选取一定的步长,让阈值θ\thetaθ从最大值变化到最小值,目的是观察每一种θ\thetaθ的选取得到的误差率

step3:判断符号ppp是选1得到的误差率小还是选-1得到的误差率小

step4:记录最小误差率最小的特征,该特征将作为该弱分类器的决策特征,同时也要记录(更新)对应阈值θ\thetaθ和符号ppp

很显然,step1、step2和step3对应着三层嵌套循环。

以下是一段训练弱分类器的代码以方便理解过程:

def buildStump(datMat,classLabels,D):dataMatrix = mat(datMat); labelMat = mat(classLabels).Tm,n = shape(dataMatrix)numSteps = 10.0; # theta变化的步数bestStump = {}; # 保存该弱分类器对应的决策特征、阈值、符号bestClasEst = mat(zeros((m,1))) # 最终会保存训练好的弱分类器对全部样本的预测标签minError = inf #最小错误率初始化为无穷大for i in range(n): # 遍历全部特征rangeMin = dataMatrix[:,i].min(); rangeMax = dataMatrix[:,i].max(); # 全部样本该特征的最大值与最小值stepSize = (rangeMax-rangeMin)/numSteps # 步长for j in range(-1,int(numSteps)+1): # 遍历阈值thetafor inequal in ['lt', 'gt']:  # 遍历符号pthreshVal = (rangeMin + float(j) * stepSize) # 当前遍历到的阈值predictedVals = stumpClassify(dataMatrix,i,threshVal,inequal) # 在第i个特征下,用当前遍历到的阈值theta和符号p,预测一下样本标签errArr = mat(ones((m,1)))errArr[predictedVals == labelMat] = 0 # 误判的都为1,正确的都为0weightedError = D.T*errArr  # 计算误差率,即误判的样本权重和if weightedError < minError: # 更新最小误差率minError = weightedErrorbestClasEst = predictedVals.copy()bestStump['dim'] = ibestStump['thresh'] = threshValbestStump['ineq'] = inequalreturn bestStump,minError,bestClasEst

haar-like 特征

虽然adaboost算法与harr-like特征会一起使用,但是二者是完全不同的方向,一种是分类算法,一种是特征提取算法。因此,将两部分完全分开讲解。

基本haar特征

Haar-like特征最早是由Papageorgiou等应用于人脸表示,Viola和Jones在此基础上,使用3种类型4种形式的特征。

Haar特征分为三类:边缘特征、线性特征、中心特征和对角线特征,组合成特征模板。特征模板内有白色和黑色两种矩形,并定义该模板的特征值为白色矩形像素和减去黑色矩形像素和。Haar特征值反映了图像的灰度变化情况。例如:脸部的一些特征能由矩形特征简单的描述,如:眼睛要比脸颊颜色要深,鼻梁两侧比鼻梁颜色要深,嘴巴比周围颜色要深等。但矩形特征只对一些简单的图形结构,如边缘、线段较敏感,所以只能描述特定走向(水平、垂直、对角)的结构。

对于图中的A, B和D这类特征,特征数值计算公式为:v=Sum白−Sum黑v=Sum_白-Sum_黑v=Sum白​−Sum黑​,而对于C来说,计算公式如下:v=Sum白−2∗Sum黑v=Sum_白-2*Sum_黑v=Sum白​−2∗Sum黑​;之所以将黑色区域像素和乘以2,是为了使两种矩形区域中像素数目一致。

通过改变特征模板的大小和位置,可在图像子窗口中穷举出大量的特征。上图的特征模板称为“特征原型”;特征原型在图像子窗口中扩展(平移伸缩)得到的特征称为“矩形特征”;矩形特征的值称为“特征值”。

扩展haar特征

Lienhart R.等对Haar-like矩形特征库作了进一步扩展,加入了旋转45°角的矩形特征。扩展后的特征大致分为4种类型:边缘特征、线特征环、中心环绕特征和对角线特征:

这些扩展特征主要增加了旋转性,能够提取到更丰富的边缘信息。

haar-like 特征计算

积分图计算

2001年,Viola阐述了利用积分图在相同的时间内,快速计算不同Haar特征值的问题,从而在很大程度上提高了检测速度。
第一步: 首先根据图像计算出积分图像:积分图像中任意一点的值都是原图像中该点左上方所有点的值的累加和

第二步: 利用积分图可以快速计算图像中任意区域像素值的累加和,进而更快的求得矩形特征的特征值。

如:记区域A、B、C、D的像素和分别为IAI_AIA​、IBI_BIB​、ICI_CIC​、IDI_DID​。

则有:
ii1=I1=IAii2=I2=IA+IBii3=I3=IA+ICii4=I4=IA+IB+IC+IDii_1=I_1=I_A \\\\ ii_2=I_2=I_A+I_B \\\\ ii_3=I_3=I_A+I_C \\\\ ii_4=I_4=I_A+I_B+I_C+I_D \\\\ ii1​=I1​=IA​ii2​=I2​=IA​+IB​ii3​=I3​=IA​+IC​ii4​=I4​=IA​+IB​+IC​+ID​
由上述的方程组得到区域D的像素和:
ID=I4+I1−(I2+I3)I_D=I_4+I_1-(I_2+I_3) ID​=I4​+I1​−(I2​+I3​)
又如:记区域A、B的像素和分别为IAI_AIA​、IBI_BIB​。

IA=I4+I1−(I2+I3)IB=I6+I3−(I4+I5)I_A=I_4+I_1-(I_2+I_3) \\\\ I_B=I_6+I_3-(I_4+I_5) \\\\ IA​=I4​+I1​−(I2​+I3​)IB​=I6​+I3​−(I4​+I5​)
其特征值为:
I=IA−IB=(I4−I3)−(I2−I1)+(I4−I3)−(I6−I5)I=I_A-I_B=(I_4-I_3)-(I_2-I_1)+(I_4-I_3)-(I_6-I_5) I=IA​−IB​=(I4​−I3​)−(I2​−I1​)+(I4​−I3​)−(I6​−I5​)
所以,Haar特征值计算,只和端点的积分图有关,而与图像坐标值无关。在计算过程中,无论矩形特征尺度如何,计算所需时间是一定的。所以说积分图的引入提高了检测的速度。

级联分类器

级联分类器本质上并非只能应用于Adaboost算法中。

问题1:在实际应用中,由于Adaboost算法存在退化现象,导致随着弱分类器个数的增加,强分类器的分类能力反而会降低,所以需要对传统的Adaboost算法进行改进。

问题2:Adaboost在待检图像检测过程中,要对每一个位置的每一种尺寸的窗口进行检测,检测量极大;同时,在实际图片中,人脸区域只占整张图片的较小比例,检测时也会花大量的时间在这些无人脸区域上。

问题3:AdaBoost训练出来的强分类器一般具有较小的误识率,但检测率并不很高,一般情况下,高检测率会导致高误识率,这是强分类阈值的划分导致的,要提高强分类器的检测率既要降低阈值,要降低强分类器的误识率就要提高阈值,这是个矛盾的事情。

基于这些问题,人们提出了级联分类器的思想:

联合多个强分类器,对输入的大量子窗口图像,通过级联分类器中的每个强分类器一层一层地过滤掉非人脸的图像,最终留下人脸图像。在级联分类器的前几级构造小型、高效的强分类器用来滤除大量的负样本(非人脸),这样待检测的窗口会越来越少,再调用后面相对复杂的强分类器,达到较低的误检率,从而实现高效地识别。

**级联分类器需要注意的问题:**增加分类器个数可以在提高强分类器检测率的同时降低误识率,所以级联分类器在训练时要考虑如下平衡,一是弱分类器的个数和计算时间的平衡,二是强分类器检测率和误识率之间的平衡。

举个例子来说明为什么级联分类器可行:

级联分类器由若干个简单的AdaBoost分类器串接得来。假设AdaBoost分类器要实现99%的正确率,1%的误检率需要200维特征,而实现具有99.9%正确率和50%的误检率的AdaBoost分类器仅需要10维特征,那么通过级联,假设10级级联,最终得到的正确率和误检率分别为:
TPR=(0.999)10=99.0%FPR=(0.5)10=0.1%TPR=(0.999)^{10}=99.0\%\\\\ FPR = (0.5)^{10}=0.1\% TPR=(0.999)10=99.0%FPR=(0.5)10=0.1%
可以看到通过级联Adaboost分类器们能够使用较少的特征和较简单的分类器更快更好的实现分类。另外在检测的过程中,因为TPRTPRTPR较高,所以一旦检测到某区域不是目标就可以直接停止后续检测,这样大部分检测窗口都能够很快停止,分类速度得到很大的提高。

训练过程:

这部分参考了许多资料都无法理解,这里附上多篇博客中的伪代码。

伪代码1:

 具体的训练过程如下:确定每级的最大误识率f,最小要达到的检测率d;最终级联分类器的误识率Ftarget;P=正样本N=负样本F0=1.0,D0=1.0i=0For Fi<Ftargeti=i+1ni=0;Fi=Fi-1For Fi < f*Fi-1ni=ni+1利用Adaboost在P与N上训练出ni弱分类器权衡当前级联分类器的检出率Di与误检率FiFor 前级联分类器的检出率达到d*Di降低第i层的强分类器的阈值权衡当前级联分类器的检出率Di与误检率FiEndEndN=0利用当前级联分类器检测负样本,将误识样本放入NEnd

伪代码2:

伪代码3:

伪代码4:

Haar 分类器

基于Haar-like 特征的 Adaboost 级联人脸检测分类器。

Haar分类器 = Haar-like特征+积分图方法+AdaBoost + 级联

Haar分类器算法的要点如下:

  • 使用Haar-like特征做检测。

  • 使用积分图对Haar-like特征求值进行加速。

  • 使用AdaBoost算法训练区分人脸和非人脸的强分类器。

  • 使用筛选式级联把分类器级联到一起,提高准确率。

实现代码

【OpenCV入门指南】第一篇 安装OpenCV - CSDN博客

Streaming Face Detection, Training, Recognition - File Exchange - MATLAB Central (mathworks.cn)

Face Parts Detection - File Exchange - MATLAB Central (mathworks.cn)

Face Detection System - File Exchange - MATLAB Central (mathworks.cn)

REF

支持向量机 (一): 线性可分类 svm - 博客园

支持向量机 (二): 软间隔 svm 与 核函数 - 博客园

集成学习之Adaboost算法原理小结 - 博客园

【AdaBoost算法】弱分类器训练过程 - 博客园

Haar-like特征提取原理 - CSDN博客

图像特征提取三大法宝:HOG特征、LBP特征、Haar-like特征 - CSDN博客

浅析人脸检测之Haar分类器方法 - 博客园

基于LBP特征的级联分类器检测与训练原理解析 - CSDN博客

级联分类器 - 博客园

【人工智能】非线性分类器(QDU)相关推荐

  1. 线性分类器与非线性分类器的区别是什么?有哪些优劣特性?

    线性分类器与非线性分类器的区别是什么?有哪些优劣特性? 线性分类器 线性分类器就是用一个"超平面"将两个样本隔离开,如:   (1)二维平面上的两个样本用一条直线来进行分类:    ...

  2. 斯坦福大学公开课机器学习:Neural Networks,representation: non-linear hypotheses(为什么需要做非线性分类器)...

    如上图所示,如果用逻辑回归来解决这个问题,首先需要构造一个包含很多非线性项的逻辑回归函数g(x).这里g仍是s型函数(即 ).我们能让函数包含很多像这的多项式,当多项式足够多时,那么你也许能够得到可以 ...

  3. turicreate 视频_人工智能图片分类器:turicreate在Windows环境下简明使用教程

    近几天笔者深入学习了下机器学习.深度学习,不论是谷歌围棋AIAlphaGo.还是目前使用的阿里云智能语音合成,都非常吸引人.连续多天的理论学习后,总体而言,绝大多数教程都围绕数学算法展开,而实际上我们 ...

  4. 线性分类器与非线性分类器

    线性分类器和非线性分类器是我们经常说的词汇,然而我却并不知道他的真正含义,上网搜索了一下,材料也是很少.整理如下: 对于二类的情形: 线性分类:是用一个超平面能将正负样本区分开,表达式为y=wx,这里 ...

  5. 线性、非线性分类器数据的线性、非线性

    线性.非线性分类器&数据的线性.非线性 一.线性分类器: 有无数个可划分这两个线性可分类的超平面 在二维空间里面,一个线性分类器是一条线.图14.8展示了五个分类例子.这些线有一个函数形式w1 ...

  6. 模式识别中利用二型势函数法求解非线性分类器的原理以及python代码实现

    前言 在学校的深度学习实验过程中,由于要求实现非线性分类器的势函数实验中给出的例程代码是matlab语言的(ps:自从电脑被偷了以后,新电脑没有装matlab),我便想到用python实现非线性分类器 ...

  7. [模式识别].(希腊)西奥多里蒂斯第四版笔记4之__非线性分类器

    1,Exclusive OR(XOR)Booleanfunction问题 布尔量AND和OR是线性可分的 2,两层感知器 对Figure4.1中A类和B类,首先能想到的是画两条直线.如图Figure4 ...

  8. 【人工智能】传统机器学习算法(QDU)

    转载请务必经过我的同意 [人工智能]不确定性推理(QDU) [人工智能]传统机器学习算法(QDU) [人工智能]非线性分类器(QDU) [人工智能]机器学习基础(QDU) [人工智能]深度学习(QDU ...

  9. 【人工智能】机器学习基础(QDU)

    转载请务必经过我的同意 [人工智能]不确定性推理(QDU) [人工智能]传统机器学习算法(QDU) [人工智能]非线性分类器(QDU) [人工智能]机器学习基础(QDU) [人工智能]深度学习(QDU ...

  10. 【人工智能】不确定性推理(QDU)

    转载请务必经过我的同意 [人工智能]不确定性推理(QDU) [人工智能]传统机器学习算法(QDU) [人工智能]非线性分类器(QDU) [人工智能]机器学习基础(QDU) [人工智能]深度学习(QDU ...

最新文章

  1. arcgis设置nodata值_新版白话空间统计(6):在ArcGIS中实现莫兰指数计算
  2. easyui combox使用
  3. Alpine 操作系统是一个面向安全的轻型 Linux 发行版
  4. (四)Linux内核模块化编程
  5. 笨办法学 Python · 续 练习 31:正则表达式
  6. Relay传递基础架构
  7. 什么是python解释器?有什么作用?
  8. 盘点好用的 Markdown 编辑器
  9. 【HEC-RAS】02 软件下载及安装
  10. [本体论][UML][统一建模语言][软件建模][OWL]从本体论到UML到OWL
  11. 度秘语音引擎app_「资源」9个(实时)语音转文字APP分享(推荐收藏)
  12. OPENSTREETMAP电力数据的情况
  13. PE 格式详解与试验
  14. 催收公司承信科技申请纳斯达克IPO上市,募资1500万美元
  15. 淡淡de馨香---职业尊严
  16. 前端websocket连接mqtt服务器(Paho-mqtt,mqttws31.js)以及断开重连
  17. conn触发commit的BUG
  18. 信号完整性(SIPI)学习--21--串扰
  19. 显示器尺寸和分辨率大小
  20. 百度艾菲达成深度合作 引领AI营销新实践

热门文章

  1. 没有基础一样可以一次性拿下CCSK认证?快来看这里!
  2. 基于jsp的新闻发布系统
  3. Android PackageManagerService(三)pm命令安装流程详解
  4. 云计算中网络基础知识
  5. qpython3安装kivy_kivy学习之路:kivy开发环境架设--- windows篇
  6. php漂浮广告代码,js 居中漂浮广告_广告代码
  7. 利用Maven构建appfuse。
  8. java变量表述_下列关于Java变量的描述,错误的是:_学小易找答案
  9. 浪曦_Struts2应用开发系列_第1讲.Struts2入门与配置--出现的问题笔记
  10. usb声卡驱动_香蕉猴Monkeybanana Hapa系列USB麦克风 测评