|
|
|
@ -82,14 +82,13 @@ $$
|
|
|
|
|
s.t. y_i(w^Tx+b)\geq1
|
|
|
|
|
$$
|
|
|
|
|
</center>
|
|
|
|
|
<br>
|
|
|
|
|
|
|
|
|
|
这就是线性可分支持向量机的基本型。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 对偶问题
|
|
|
|
|
|
|
|
|
|
我们已经知道了支持向量机的基本型,问题本身是一个凸二次规划问题,可以用现成的优化计算包求解,不过可以用更高效的方法。支持向量机的模型如下:
|
|
|
|
|
现在已经知道了支持向量机的基本型,问题本身是一个凸二次规划问题,可以用现成的优化计算包求解,不过可以用更高效的方法。支持向量机的模型如下:
|
|
|
|
|
|
|
|
|
|
<center>
|
|
|
|
|
$$
|
|
|
|
@ -169,10 +168,8 @@ y_if(x_i)-1\geq0\\
|
|
|
|
|
\end{cases}
|
|
|
|
|
$$
|
|
|
|
|
</center>
|
|
|
|
|
<br>
|
|
|
|
|
|
|
|
|
|
于是,对任意训练样本$$(x_i,y_i)$$,总有$$\alpha_i=0$$或$$y_if(x_i)=1$$。若$$\alpha_i=0$$,则该样本将不会出现在式子$$4$$中,也就不会对$$f(x)$$,有任何影响。若$$\alpha_i>0$$,则必有$$y_if(x_i)=1$$,所对应的样本点位于最大间隔边界上,是一个支持向量。这显示出支持向量机的一个重要性质:**训练完后,大部分的训练样本都不需要保留,最终模型仅与支持向量有关**。
|
|
|
|
|
|
|
|
|
|
于是,对任意训练样本$$(x_i,y_i)$$,总有$$\alpha_i=0$$或$$y_if(x_i)=1$$。若$$\alpha_i=0$$,则该样本将不会出现在式子$$4$$中,也就不会对$$f(x)$$,有任何影响。若$$\alpha_i>0$$,则必有$$y_if(x_i)=1$$,所对应的样本点位于最大间隔边界上,是一个支持向量。这显示出支持向量机的一个重要性质: 训练完后,大部分的训练样本都不需要保留,最终模型仅与支持向量有关。
|
|
|
|
|
|
|
|
|
|
##线性支持向量机
|
|
|
|
|
|
|
|
|
@ -180,9 +177,9 @@ $$
|
|
|
|
|
|
|
|
|
|
<div align=center><img src="./img/1030.jpg", height="250"/></div>
|
|
|
|
|
|
|
|
|
|
按照线性可分支持向量机的思想,黄色的线就是最佳的决策边界。很明显,这条线的泛化性不是很好,造成这样结果的原因就是数据中存在着异常点,那么如何解决这个问题呢,支持向量机引入了**软间隔最大化**的方法来解决。
|
|
|
|
|
按照线性可分支持向量机的思想,黄色的线就是最佳的决策边界。很明显,这条线的泛化性不是很好,造成这样结果的原因就是数据中存在着异常点,那么如何解决这个问题呢,支持向量机引入了软间隔最大化的方法来解决。
|
|
|
|
|
|
|
|
|
|
所谓的**软间隔**,是相对于硬间隔说的,刚刚在**间隔与支持向量**中提到的间隔就是硬间隔。
|
|
|
|
|
所谓的软间隔,是相对于硬间隔说的,刚刚在间隔与支持向量中提到的间隔就是硬间隔。
|
|
|
|
|
|
|
|
|
|
接着我们再看如何可以软间隔最大化呢?SVM 对训练集里面的每个样本$$(x_i,y_i)$$引入了一个松弛变量$$\xi_i\geq0$$,使函数间隔加上松弛变量大于等于$$1$$,也就是说:
|
|
|
|
|
|
|
|
|
@ -197,7 +194,7 @@ $$
|
|
|
|
|
|
|
|
|
|
<div align=center><img src="./img/1031.jpg", height="250"/></div>
|
|
|
|
|
|
|
|
|
|
当然,松弛变量不能白加,这是有成本的,每一个松弛变量$$\xi_i$$, 对应了一个代价$$\xi_i$$,这个就得到了我们的**软间隔最大化的支持向量机**,模型如下:
|
|
|
|
|
当然,松弛变量不能白加,这是有成本的,每一个松弛变量$$\xi_i$$, 对应了一个代价$$\xi_i$$,这个就得到了我们的软间隔最大化的支持向量机,模型如下:
|
|
|
|
|
|
|
|
|
|
<center>
|
|
|
|
|
$$
|
|
|
|
@ -220,7 +217,7 @@ $$
|
|
|
|
|
|
|
|
|
|
这里,$$C>0$$为惩罚参数,可以理解为我们一般回归和分类问题正则化时候的参数。$$C$$越大,对误分类的惩罚越大,$$C$$越小,对误分类的惩罚越小。也就是说,我们希望权值的二范数尽量小,误分类的点尽可能的少。$$C$$是协调两者关系的正则化惩罚系数。在实际应用中,需要调参来选择。
|
|
|
|
|
|
|
|
|
|
同样的,使用**拉格朗日函数**将软间隔最大化的约束问题转化为无约束问题,利用相同的方法得到数学模型:
|
|
|
|
|
同样的,使用拉格朗日函数将软间隔最大化的约束问题转化为无约束问题,利用相同的方法得到数学模型:
|
|
|
|
|
|
|
|
|
|
<center>
|
|
|
|
|
$$
|
|
|
|
@ -241,18 +238,17 @@ $$
|
|
|
|
|
</center>
|
|
|
|
|
<br>
|
|
|
|
|
|
|
|
|
|
这就是软间隔最大化时的**线性支持向量机**的优化目标形式,和之前的硬间隔最大化的线性可分支持向量机相比,我们仅仅是多了一个约束条件:
|
|
|
|
|
这就是软间隔最大化时的线性支持向量机的优化目标形式,和之前的硬间隔最大化的线性可分支持向量机相比,我们仅仅是多了一个约束条件:
|
|
|
|
|
|
|
|
|
|
<center>
|
|
|
|
|
$$
|
|
|
|
|
0\leq\alpha_i\leq C
|
|
|
|
|
$$
|
|
|
|
|
</center>
|
|
|
|
|
<br>
|
|
|
|
|
|
|
|
|
|
##smo算法
|
|
|
|
|
|
|
|
|
|
**序列最小优化算法** ($$smo$$算法)是一种启发式算法, $$SVM$$中的模型参数可以使用该算法进行求解。其基本思路是:如果所有变量的解都满足此最优化问题的$$KKT$$条件,那么这个最优化问题的解就得到了。因为$$KKT$$条件是该最优化问题的充分必要条件。否则,选择两个变量,固定其他变量,针对这两个变量构建一个二次规划问题。这个二次规划问题关于这两个变量的解应该更接近原始二次规划问题的解,因为这会使得原始二次规划问题的目标函数值变得更小。重要的是,这时子问题可以通过解析方法求解,这样就可以大大提高整个算法的计算速度。子问题有两个变量,一个是违反$$KKT$$条件最严重的那一个,另一个由约束条件自动确定。如此,$$smo$$算法将原问题不断分解为子问题并对子问题求解,进而达到求解原问题的目的。具体如下:
|
|
|
|
|
序列最小优化算法($$smo$$算法)是一种启发式算法, $$SVM$$中的模型参数可以使用该算法进行求解。其基本思路是:如果所有变量的解都满足此最优化问题的$$KKT$$条件,那么这个最优化问题的解就得到了。因为$$KKT$$条件是该最优化问题的充分必要条件。否则,选择两个变量,固定其他变量,针对这两个变量构建一个二次规划问题。这个二次规划问题关于这两个变量的解应该更接近原始二次规划问题的解,因为这会使得原始二次规划问题的目标函数值变得更小。重要的是,这时子问题可以通过解析方法求解,这样就可以大大提高整个算法的计算速度。子问题有两个变量,一个是违反$$KKT$$条件最严重的那一个,另一个由约束条件自动确定。如此,$$smo$$算法将原问题不断分解为子问题并对子问题求解,进而达到求解原问题的目的。具体如下:
|
|
|
|
|
|
|
|
|
|
选择两个变量$$\alpha_1,\alpha_2$$,其它变量$$\alpha_i,i=3,4,..m$$是固定的。
|
|
|
|
|
于是,$$smo$$的最优化问题的子问题可以写成:
|
|
|
|
@ -274,7 +270,6 @@ $$
|
|
|
|
|
0\leq\alpha_i\leq C,i=1,2
|
|
|
|
|
$$
|
|
|
|
|
</center>
|
|
|
|
|
<br>
|
|
|
|
|
|
|
|
|
|
其中:$$k_{ij}=k(x_i,x_j)$$
|
|
|
|
|
|
|
|
|
@ -360,9 +355,8 @@ $$
|
|
|
|
|
\alpha_2^{new,unc}=\alpha_2^{old}+\frac{y_2(E_1-E_2)}{k_{11}+k_{22}-2k_{12}}
|
|
|
|
|
$$
|
|
|
|
|
</center>
|
|
|
|
|
<br>
|
|
|
|
|
|
|
|
|
|
###smo算法两个变量的选择
|
|
|
|
|
### smo算法两个变量的选择
|
|
|
|
|
|
|
|
|
|
$$smo$$算法需要选择合适的两个变量做迭代,其余的变量做常量来进行优化,那么怎么选择这两个变量呢?
|
|
|
|
|
|
|
|
|
@ -372,7 +366,7 @@ $$smo$$算法称选择第二一个变量为内层循环,假设我们在外层
|
|
|
|
|
|
|
|
|
|
如果内存循环找到的点不能让目标函数有足够的下降, 可以采用遍历支持向量点来做$$\alpha_2$$,直到目标函数有足够的下降, 如果所有的支持向量做$$\alpha_2$$都不能让目标函数有足够的下降,可以跳出循环,重新选择$$\alpha_1$$。
|
|
|
|
|
|
|
|
|
|
###计算阈值b和差值Ei
|
|
|
|
|
### 计算阈值b和差值Ei
|
|
|
|
|
|
|
|
|
|
在每次完成两个变量的优化之后,需要重新计算阈值$$b$$。当$$0<\alpha_1^{new}< C$$时,我们有:
|
|
|
|
|
|
|
|
|
@ -467,3 +461,4 @@ $$
|
|
|
|
|
</center>
|
|
|
|
|
|
|
|
|
|
`7`.如果满足则结束,返回$$\alpha^{k+1}$$,否则转向步骤`2`
|
|
|
|
|
|
|
|
|
|