OnlineSVR算法原理(1)
通过下面的讲解你将获得对OnlineSVR算法的全面了解。
目录
01. SVM简介(略)
02. 算法分析
03. 伪代码算法
04. 复杂度分析
05. 测试
2 算法分析
这是该OnlineSVR算法理论中最为严谨和复杂的部分,我们从它的定义开始找到一个如何建立一个OnlineSVR模型的方法。
2.1 问题描述
SVM的主要目的是找到一个和训练数据有一定偏差的目标函数f(x),并且要使f(x)尽可能的平滑,但又要防止过拟合。我们可以把它规划为一个凸优化问题:
以上模型只有在假定该问题是可解的前提下才是正确的,若允许存在一定的误差可以加入松弛变量来扩大向量机的容许度。
| 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*
|
|
|
|
|
|
|
|
|
| (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
|
|
|
|
|
|
|
|
|
| (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]
|
|
|
|
|
|
|
|
| (5)
|
在拉格朗日函数中新定义变量w,h ,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
| (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) +
|
|
|
|
|
|
|
| (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) +
|
|
|
|
|
|
| (11)
|
为增加可读性,核函数可定义如下:
K(xi,xj) = f(xi) · f(xj) = Qij
|
| (12)
|
矩阵Q含有核函数的值,故称之为核矩阵。为了便于计算,保存核矩阵显得非常有用。在下一章节中,我们将利用以上的分析结果来说明如何才能达到这些KTT条件。
2.3 其他优化问题
经过一系列数学推算,为了最小化a,a*的值,有以下另外两个优化问题待解决:
| min a, a*
| D =
| 1
2
|
| l å i=1
|
| l å j=1
| Qij (ai - a*i) (aj - a*j) +
|
|
|
|
|
|
|
|
| (13)
|
同上面的分析,我们计算另一个朗格朗日函数,该函数包含了所有的约束条件,并引入了新的朗格朗日乘子:
LD =
| 1
2
|
| l å i=1
|
| l å j=1
| Qij (ai - a*i) (aj - a*j) +
|
|
|
|
-
| l å i=1
| (diai + d*ia*i) +
|
|
-
| l å i=1
| [ui(ai - C) + u*i(a*i - C)] +
|
|
|
|
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
和上面的一样,这也是一个凸优化问题。对某点来说,满足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
|
|
|
|
|
|
|
|
|
u*i ³ 0, u*i (a*i - C) = 0
|
|
|
|
| (17)
|
目标函数f(xi)可写成如下形式:
f(xi) =
| l å j=1
| Qij (aj-a*j) + b
|
| (18)
|
边缘函数可写成:
可等价的写成以下形式:
ai Î [0,C], ai ( h(xi) + e- di + ui) = 0
|
|
|
a*i Î [0,C], a*i ( -h(xi) + e- di + ui) = 0
|
|
|
|
|
|
|
|
|
u*i ³ 0, u*i (a*i - C) = 0
|
|
|
|
| (20)
|
现在我们需要考虑的是当a发生变化时,h(x)和e之间有什么关系。
|
|
Þ a*i > 0, di ³ 0, ui = 0 Þ
|
|
|
|
|
|
|
Þ ai > 0, d*i ³ 0, u*i = 0 Þ
|
|
|
|
|
|
|
Þ a*i = 0, di = 0, ui = 0 Þ
|
|
|
|
|
|
Þ ai = 0, d*i = 0, u*i = 0 Þ
|
|
|
|
|
|
Þ a*i = 0, di = 0, ui ³ 0 Þ
|
|
|
|
|
|
|
Þ ai = 0, d*i = 0, u*i ³ 0 Þ
|
|
|
|
|
|
|
| (21)
|
2.4 KKT条件定义
为了简单,我们把q定义为a和a*的差值:
不等式可以写成如下形式,我们称之为KKT条件:
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) Ú
|
|
|
|
REMAINING SET R = {i| qi = 0 Ù |h(xi)| £ e}
|
|
|
|
| (24)
|
我们的目标是在保持满足KKT条件的前提下,把一个新样本加入到Support,Error和Remainning三个集合中的某一个。
2.6 增加一个新样本
边缘函数是这样定义的:
h(xi) = f(xi) + b - yi =
| l å j=1
| Qij qj + b - yi
|
| (25)
|
当增加一个新样本c后,边缘函数将改变为如下形式:
h(xi) =
| l å j=1
| Qij q¢j + Qicq¢c + b¢ - yi
|
| (26)
|
边缘函数的变化量可以很容易地按照下式计算出来:
|
|
|
|
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
|
|
|
|
|
|
| (29)
|
定义Support集合为:
等式(29)可写成如下的矩阵形式:
| é ê ê ê ê ê ë
|
|
| ù ú ú ú ú ú û
|
| é ê ê ê ê ê ë
|
|
| ù ú ú ú ú ú û
| = -
| é ê ê ê ê ê ë
|
|
| ù ú ú ú ú ú û
| Dqc
|
| (31)
|
我们看到q和b的变化量可以用下式简洁地表达出来:
| é ê ê ê ê ê ë
|
|
| ù ú ú ú ú ú û
| = -
| é ê ê ê ê ê ë
|
|
| ù ú ú ú ú ú û
| -1
|
| é ê ê ê ê ê ë
|
|
| ù ú ú ú ú ú û
| Dqc
|
| (32)
|
为了简化,矩阵R和向量b可以定义成如下形式:
b =
| é ê ê ê ê ê ë
|
|
| ù ú ú ú ú ú û
| = - R
| é ê ê ê ê ê ë
|
|
| ù ú ú ú ú ú û
|
|
| (34)
|
上式可以重写成如下形式。对于Support集合中的样本来说,随着Dqc值的更新,它的qi值将发生变化,但h值却不会更新,因为它的h值将保持为 |e| 不变:
|
| é ê ê ê ê ê ë
|
|
| ù ú ú ú ú ú û
| = b Dqc =
| é ê ê ê ê ê ë
|
|
| ù ú ú ú ú ú û
| Dqc
|
|
|
|
| (35)
|
但对Error和Remainning集合中的样本来说,情况刚好相反。它们不会改变qi的值,却改变h值。非Support集合可定义成:
N = E ÈR = { n1, n2, ¼,nln }
|
| (36)
|
用矩阵形式重写h变化量的计算公式:
|
| é ê ê ê ë
|
|
| ù ú ú ú û
| =
| é ê ê ê ë
|
|
| ù ú ú ú û
| Dqc +
| é ê ê ê ê ê ë
|
|
| ù ú ú ú ú ú û
|
| é ê ê ê ê ê ë
|
|
| ù ú ú ú ú ú û
|
|
|
|
|
| (37)
|
用(4.13)式得到的结果来代替qi和b的变化量:
| é ê ê ê ë
|
|
| ù ú ú ú û
| =
| é ê ê ê ë
|
|
| ù ú ú ú û
| Dqc +
| é ê ê ê ê ê ë
|
|
| ù ú ú ú ú ú û
| b Dqc
|
|
|
|
| (38)
|
现在g可以定义成:
g =
| é ê ê ê ë
|
|
| ù ú ú ú û
| +
| é ê ê ê ê ê ë
|
|
| ù ú ú ú ú ú û
| b
|
|
|
|
| (39)
|
重写等式(38):
通过上面的等式,我们就可以方便地通过计算b来更新Dqi和Db,通过计算g来更新Dh(xn)。
2.7 空Support集合