OnlineSVR算法原理(1)

   OnlineSVR算法原理(1)

 

     通过下面的讲解你将获得对OnlineSVR算法的全面了解。

  目录

     01. SVM简介()

     02. 算法分析

     03. 伪代码算法

     04. 复杂度分析

  05. 测试

                         

2 算法分析

 

    这是该OnlineSVR算法理论中最为严谨和复杂的部分,我们从它的定义开始找到一个如何建立一个OnlineSVR模型的方法。

 

2.1 问题描述

 

    SVM的主要目的是找到一个和训练数据有一定偏差的目标函数f(x),并且要使f(x)尽可能的平滑,但又要防止过拟合。我们可以把它规划为一个凸优化问题:

 

 


min

  

1


2

  wT ·w

 

s.t.  

ì
ï
í
ï
î

yi - (wT ·f(xi) + b) £ e

 

(wT ·f(xi) + b) - yi £ e

 

 

(1)

以上模型只有在假定该问题是可解的前提下才是正确的,若允许存在一定的误差可以加入松弛变量来扩大向量机的容许度。

 


min
w, b 

  

1


2

 wT · w + C

l
å
i=1 

(xi + xi*)

 

s.t.  

ì
ï
ï
ï
í
ï
ï
ï
î

yi - (wT ·f(xi) + b) £ e + xi

 

(wT ·f(xi) + b) - yi £ e + xi*

 

xi,xi* ³ 0,   i=1..l

 

 

(2)

常量C决定了目标函数平面与偏差总和之间的平衡。由于这是一个最小化问题,所以可以把所有的常量设置为大于等于零:

min
w, b 

  P =   

1


2

 wT ·w + C

l
å
i=1 

(xi + xi*)

 

s.t.  

ì
ï
ï
ï
í
ï
ï
ï
î

-yi + (wT ·f(xi) + b) + e+ xi ³ 0

 

yi - (wT ·f(xi) + b) + e+ xi* ³ 0

 

xi,xi* ³ 0,   i=1..l

 

 

(3)

 

 

2.2 优化问题

 

通过该最小化问题,我们把它改写成一个包含所有约束条件的拉格朗日函数,式中加入了一些新的朗格朗日乘子:

LP =

1


2

  wT ·w + C

l
å
i=1 

(xi + xi*)   +

            -

l
å
i=1 

(hixi + h*ix*i)   +

            -

l
å
i=1 

ai(e+ xi + yi - wT ·f(xi) - b)   +

            -

l
å
i=1 

ai*(e+ xi* - yi + wT ·f(xi) + b)

 

s.t.       ai,ai*,hi,hi* ³ 0,   i=1..l

 

(4)

(由于不等式的形式是大于等于,故约束条件都加上了负号。)考虑到拉格朗日函数变量(w, b, x, x*)的偏导数必须为零,可有:

 

LP


b

= -

l
å
i=1 

(ai-a*i) = 0

 

 

LP


w

= w -

l
å
i=1 

f(xi) (ai-a*i) = 0     Þ      w =

l
å
i=1 

f(xi) (ai-a*i)

 

 

LP


¶xi

= C - hi - ai = 0                           Þ      hi = C - ai,    ai Î [0, C]

 

 

LP


¶x*i

= C - h*i - a*i = 0                          Þ      h*i = C - a*i,    a*i Î [0, C]

 

 

LP


¶hi

=

l
å
i=1 

xi = 0

 

 

LP


¶h*i

=

l
å
i=1 

x*i = 0

 

(5)

在拉格朗日函数中新定义变量wh h*

-

1


2

  

l
å
i=1 

 

l
å
j=1 

f(xi) (ai - a*i) · f(xj) (aj - a*j)   +

-

l
å
i=1 

((C - ai)xi + (C - a*i)x*i)   +

-

l
å
i=1 

ai (- yi + (

l
å
j=1 

(f(xi) ·f(xj) (aj-a*j)) + b) + e+ xi)   +

-

l
å
i=1 

a*i (yi - (

l
å
j=1 

(f(xi) ·f(xj) (aj-a*j)) + b) + e+ x*i)

 

(6)

改写成如下形式:

 

-

1


2

  

l
å
i=1 

 

l
å
j=1 

f(xi) ·f(xj) (ai - a*i)(aj - a*j)   +

-

l
å
i=1 

(C - ai)xi       -

l
å
i=1 

(C - a*i)x*i   +

-

l
å
i=1 

 

l
å
j=1 

f(xi) ·f(xj)   ai(aj-a*j)   +

+

l
å
i=1 

 

l
å
j=1 

f(xi) ·f(xj)   a*i(aj-a*j)   +

+

l
å
i=1 

ai yi       -

l
å
i=1 

a*i yi   +

-

l
å
i=1 

ai e       -

l
å
i=1 

a*i e  +

-

l
å
i=1 

ai xi       -

l
å
i=1 

a*ix*i

 

(7)

把一些单项合并在一起,可以写成:

 

-

1


2

  

l
å
i=1 

 

l
å
j=1 

f(xi) ·f(xj) (ai - a*i)(aj - a*j)   +

+

l
å
i=1 

yi  (ai - a*i)   +

-

l
å
i=1 

e (ai + a*i)   +

-

l
å
i=1 

(C xi -aixi + aixi)   +

-

l
å
i=1 

(C x*i -a*ix*i + a*ix*i)

 

(8)

删除无须的部分:

-

1


2

  

l
å
i=1 

 

l
å
j=1 

f(xi) ·f(xj) (ai - a*i)(aj - a*j)   +

+

l
å
i=1 

yi  (ai - a*i)   +

-

l
å
i=1 

e (ai + a*i)   +

- C

l
å
i=1 

(xi + x*i)

 

(9)

最后去掉参数C,用另外的两个约束变量代替:

 

l
å
i=1 

xi = 0   ,     

l
å
i=1 

x*i = 0

(10)

我们得到:

 

-

1


2

  

l
å
i=1 

 

l
å
j=1 

f(xi) ·f(xj) (ai - a*i)(aj - a*j)   +

+

l
å
i=1 

yi  (ai - a*i)   +

-

l
å
i=1 

e (ai + a*i)

 

(11)

为增加可读性,核函数可定义如下:

K(xi,xj) = f(xi) · f(xj) = Qij

(12)

矩阵Q含有核函数的值,故称之为核矩阵。为了便于计算,保存核矩阵显得非常有用。在下一章节中,我们将利用以上的分析结果来说明如何才能达到这些KTT条件。

 

2.3 其他优化问题

 

经过一系列数学推算,为了最小化aa*的值,有以下另外两个优化问题待解决:

 


min
aa* 

  D =   

1


2

  

l
å
i=1 

 

l
å
j=1 

Qij (ai - a*i) (aj - a*j)   +

                     -

l
å
i=1 

yi  (ai - a*i)   +

                     +

l
å
i=1 

e (ai + a*i)

 

s.t.  

ì
ï
ï
í
ï
ï
î

ai, a*i Î [0,C],   i=1..l

 

 

l
å
i=1 

(ai - a*i) = 0

 

 

(13)

同上面的分析,我们计算另一个朗格朗日函数,该函数包含了所有的约束条件,并引入了新的朗格朗日乘子:

LD =   

1


2

  

l
å
i=1 

 

l
å
j=1 

Qij (ai - a*i) (aj - a*j)   +

                     -

l
å
i=1 

yi  (ai - a*i)   +

                     +

l
å
i=1 

e (ai + a*i)   +

                     -

l
å
i=1 

(diai + d*ia*i)   +

                     -

l
å
i=1 

[ui(ai - C) + u*i(a*i - C)]   +

                     + z

l
å
i=1 

(ai - a*i)

 

s.t.       di,d*i,ui,u*i,z ³ 0,   i=1..l

 

(14)

求出朗格朗日函数的偏导:

LD


¶ai

=

1


2

 

l
å
j=1 

Qij (aj-a*j) + e- yi - di + ui + z = 0

 

 

LD


¶a*i

= -

1


2

 

l
å
j=1 

Qij (aj-a*j) + e+ yi - di + ui - z = 0

 

 

LP


¶z

=

l
å
i=1 

(ai-a*i) = 0

 

 

(15)

为便于阅读,我们用z代替b

z = b

(16)

和上面的一样,这也是一个凸优化问题。对某点来说,满足KKT条件的充分条件如下:

 

ai Î [0,C],    ai  (

l
å
j=1 

Qij(aj-a*j) + b - yi + e- di + ui) = 0

 

a*i Î [0,C],    a*i   ( -

l
å
j=1 

Qij(aj-a*j) - b + yi + e- d*i + u*i) = 0

 

di ³ 0,             di ai = 0

 

d*i ³ 0,             d*i a*i = 0

 

ui ³ 0,             ui (ai - C) = 0

 

u*i ³ 0,             u*i (a*i - C) = 0

 

(17)

目标函数f(xi)可写成如下形式:

f(xi) =

l
å
j=1 

Qij (aj-a*j) + b

(18)

边缘函数可写成:

h(xi) º f(xi) + b - yi

(19)

可等价的写成以下形式:

ai Î [0,C],    ai  ( h(xi) + e- di + ui) = 0

 

a*i Î [0,C],    a*i  ( -h(xi) + e- di + ui) = 0

 

di ³ 0,             di ai = 0

 

d*i ³ 0,             d*i a*i = 0

 

ui ³ 0,             ui (ai - C) = 0

 

u*i ³ 0,             u*i (a*i - C) = 0

 

(20)

现在我们需要考虑的是当a发生变化时,h(x)e之间有什么关系。 

 

ai = 0

   Þ   a*i > 0,      di ³ 0,      ui = 0    Þ

   Þ   h(xi) + e-di = 0    Þ

   Þ   h(xi) = - e+di    Þ

   Þ   h(xi) Î [-e,0]

 

a*i = 0

   Þ   ai > 0,      d*i ³ 0,      u*i = 0    Þ

   Þ   -h(xi) + e- d*i = 0    Þ

   Þ   h(xi) = + e- d*i    Þ

   Þ   h(xi) Î [0,+e]

 

0 < ai < C

   Þ   a*i = 0,      di = 0,      ui = 0    Þ

   Þ   h(xi) + e = 0    Þ

   Þ   h(xi) = - e

 

0 < a*i < C

   Þ   ai = 0,      d*i = 0,      u*i = 0    Þ

   Þ   h(xi) - e = 0    Þ

   Þ   h(xi) = + e

 

ai = C

   Þ   a*i = 0,      di = 0,      ui ³ 0    Þ

   Þ   h(xi) + e+ui = 0    Þ

   Þ   h(xi) = - e-ui    Þ

   Þ   h(xi) £ -e

 

a*i = C

   Þ   ai = 0,      d*i = 0,      u*i ³ 0    Þ

   Þ   -h(xi) + e+u*i = 0    Þ

   Þ   h(xi) = + e+u*i    Þ

   Þ   h(xi) ³ +e

 

(21)

 

 

2.4 KKT条件定义

为了简单,我们把q定义为aa*的差值:

qi º ai - a*i

(22)

不等式可以写成如下形式,我们称之为KKT条件:

 

ì
ï
ï
ï
í
ï
ï
ï
î

h(xi) ³ +e                     qi = -C

h(xi) = +e                     qi Î [-C,0]

h(xi) Î [-e,+e]            qi = 0

h(xi) = -e                     qi Î [0,C]

h(xi) £ -e                     qi = +C

 

(23)

Online SVR算法的主要目的是当增加一个新样本后检查所有样本是否都满足KKT条件。

 

2.5 Support集合,Error集合以及Remaining集合

  现在通过以上KKT条件,可以把样本分成三个集合:

SUPPORT SET           S = {i|    (qi Î [0,+C]  Ù  h(xi) = -e)   Ú

                                                        (qi Î [-C,0]  Ù  h(xi) = +e) }

 

ERROR SET               E = {i|    (qi = -C  Ù  h(xi) ³ +e)   Ú

                                                         (qi = +C  Ù  h(xi) £ -e)}

 

REMAINING SET      R = {i|   qi = 0  Ù  |h(xi)| £ e}

 

(24)

我们的目标是在保持满足KKT条件的前提下,把一个新样本加入到SupportErrorRemainning三个集合中的某一个。

 

2.6 增加一个新样本

边缘函数是这样定义的:

h(xi) = f(xi) + b - yi =

l
å
j=1 

Qij qj + b - yi

(25)

当增加一个新样本c后,边缘函数将改变为如下形式:

h(xi) =

l
å
j=1 

Qij j + Qicc + b¢ - yi

(26)

边缘函数的变化量可以很容易地按照下式计算出来:

Dqi = qi¢- qi

 

Db = b¢- b

 

Dh(xi) =

l
å
j=1 

Qij Dqj + QicDqc + Db

 

(27)

根据权值qi的总和是零,可以得到:

 

l
å
i=1 

qi = 0      and      qc+

l
å
i=1 

q¢i = 0      Þ

 

Þ   

l
å
i=1 

Dqi + Dqc = 0    Þ   

l
å
i=1 

Dqi = - Dqc

 

(28)

考察三个集合,会发现只有Support集合中的qj值会随着新样本的加入发生变化:

å
j Î S 

Qij Dqj + Db = - QicDqc      where    i Î SUPPORTSET

 

 


å
j Î S 

Dqj = - qc

 

(29)

定义Support集合为:

S = {s1, s2, ¼, sls}

(30)

等式(29)可写成如下的矩阵形式:

 

é
ê
ê
ê
ê
ê
ë

0

1

¼

1

1

Qs1 s1

¼

Qs1 sls

:

:

···

:

1

Qsls s1

¼

Qsls sls

 

ù
ú
ú
ú
ú
ú
û

 

é
ê
ê
ê
ê
ê
ë

Db

Dqs1

:

Dqsls

 

ù
ú
ú
ú
ú
ú
û

= -

é
ê
ê
ê
ê
ê
ë

1

Qs 1 c

:

Qsls c

 

ù
ú
ú
ú
ú
ú
û

Dqc

(31)

我们看到qb的变化量可以用下式简洁地表达出来:

 

é
ê
ê
ê
ê
ê
ë

Db

Dqs1

:

Dqsls

 

ù
ú
ú
ú
ú
ú
û

= -

é
ê
ê
ê
ê
ê
ë

0

1

¼

1

1

Qs1 s1

¼

Qs1 sls

:

:

···

:

1

Qsls s1

¼

Qsls sls

 

ù
ú
ú
ú
ú
ú
û

-1






 

 

é
ê
ê
ê
ê
ê
ë

1

Qs 1 c

:

Qsls c

 

ù
ú
ú
ú
ú
ú
û

Dqc

(32)

为了简化,矩阵R和向量b可以定义成如下形式:

R =

é
ê
ê
ê
ê
ê
ë

0

1

¼

1

1

Qs1 s1

¼

Qs1 sls

:

:

···

:

1

Qsls s1

¼

Qsls sls

 

ù
ú
ú
ú
ú
ú
û

-1






 

 

(33)

 

b =

é
ê
ê
ê
ê
ê
ë

bb

bs1

:

bsls

 

ù
ú
ú
ú
ú
ú
û

= - R

é
ê
ê
ê
ê
ê
ë

1

Qs 1 c

:

Qsls c

 

ù
ú
ú
ú
ú
ú
û

 

(34)

上式可以重写成如下形式。对于Support集合中的样本来说,随着Dqc值的更新,它的qi值将发生变化,但h值却不会更新,因为它的h值将保持为 |e| 不变:

 

 

é
ê
ê
ê
ê
ê
ë

Db

Dqs1

:

Dqsls

 

ù
ú
ú
ú
ú
ú
û

= b Dqc =

é
ê
ê
ê
ê
ê
ë

bb

bs1

:

bsls

 

ù
ú
ú
ú
ú
ú
û

Dqc

 

(35)

但对ErrorRemainning集合中的样本来说,情况刚好相反。它们不会改变qi的值,却改变h值。非Support集合可定义成:

N = E ÈR = { n1, n2, ¼,nln }

(36)

用矩阵形式重写h变化量的计算公式:

 

 

é
ê
ê
ê
ë

Dh(xn1)

:

Dh(xnln)

 

ù
ú
ú
ú
û

=

é
ê
ê
ê
ë

DQn 1c

:

DQnlnc

 

ù
ú
ú
ú
û

Dqc +

é
ê
ê
ê
ê
ê
ë

0

1

¼

1

1

Qn1 s1

¼

Qn1 sls

:

:

···

:

1

Qnln s1

¼

Qnln sls

 

ù
ú
ú
ú
ú
ú
û

 

é
ê
ê
ê
ê
ê
ë

Db

Dqs1

:

Dqsls

 

ù
ú
ú
ú
ú
ú
û

 

 

(37)

(4.13)式得到的结果来代替qib的变化量:

 

é
ê
ê
ê
ë

Dh(xn1)

:

Dh(xnln)

 

ù
ú
ú
ú
û

=

é
ê
ê
ê
ë

DQn 1c

:

DQnlnc

 

ù
ú
ú
ú
û

Dqc +

é
ê
ê
ê
ê
ê
ë

0

1

¼

1

1

Qn1 s1

¼

Qn1 sls

:

:

···

:

1

Qnln s1

¼

Qnln sls

 

ù
ú
ú
ú
ú
ú
û

b Dqc

 

(38)

现在g可以定义成:

g =

é
ê
ê
ê
ë

DQn 1c

:

DQnlnc

 

ù
ú
ú
ú
û

+

é
ê
ê
ê
ê
ê
ë

0

1

¼

1

1

Qn1 s1

¼

Qn1 sls

:

:

···

:

1

Qnln s1

¼

Qnln sls

 

ù
ú
ú
ú
ú
ú
û

b

 

(39)

         重写等式(38)

 

é
ê
ê
ê
ë

Dh(xn1)

:

Dh(xnln)

 

ù
ú
ú
ú
û

= g Dqc

 

(40)

通过上面的等式,我们就可以方便地通过计算b来更新DqiDb,通过计算g来更新Dh(xn)

 

2.7 Support集合

 
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值