吴恩达老师机器学习记录----SVM之SMO算法步骤总结

先贴一下cs229课程的官网地址:http://cs229.stanford.edu/

首先是待优化问题:

$$max_\alpha W(\alpha) = \sum_{i=1}^m \alpha_i - \frac{1}{2}\sum_{i,j=1}^m y^{(i)}y^{(j)}\alpha_i\alpha_j<x^{(i)}x^{(j)}>$$

$$ st. 0 \leq \alpha_i \leq C , i = 1,2, ... ..., m$$

$$ \sum_{i=1}^m \alpha_i y^{(i)} = 0$$

然后是SMO算法的大体流程:

Repeat till convergence {

1、从\(\alpha_1,\alpha_2, ... ... , \alpha_m\)中选取出一对\(\alpha_j\)和\(\alpha_k\)进行优化;

2、将除了上一步中挑选的\(\alpha_j\)和\(\alpha_k\)以外的\(\alpha\)看做常数,对选出的两个\(\alpha\)进行更新使得\(W(\alpha)\)取得更大的值;

}

最后,算法流程中三个地方详细说明:

1、循环的结束条件,即如何算是收敛。略。

2、如何选取\(\alpha_j\)和\(\alpha_k\)。略(这个现在没搞明白)。

3、如何更新\(\alpha_j\)和\(\alpha_k\):

公式\(\sum_{i=1}^m \alpha_i y^{(i)}\)中除\(\alpha_j\)和\(\alpha_k\)以外\(\alpha\)都被看做常数,所以我们将约束:

$$ \sum_{i=1}^m \alpha_i y^{(i)} = 0$$

写成另一种形式:

$$\alpha_j y^{(j)} + \alpha_k y^{(k)} + \zeta = 0$$

再做一点变形即\(\alpha_jy^{(j)} + \alpha_ky^{(k)} = -\zeta\),其中\(\zeta\)表示一个常数。

我们将\(\zeta\)前面的负号去掉(\(\zeta\)是我们自己定义的一个常数,这里负号去掉并没什么关系)然后解出\(\alpha_j\):\(\alpha_j = \frac{\zeta - \alpha_k y^{(k)}}{y^{(j)}}\)

所以此时的\(W(\alpha)\)是只关于\(\alpha_k\)的函数(因为\(W(\alpha)\)中的参数\(\alpha_1,...,\alpha_m\)中除\(\alpha_j\)和\(\alpha_k\)外都是常数,\(\alpha_j\)也可以用\(\alpha_k\)表示)。

所以原优化问题变成了:

$$max_{\alpha_k} W(\alpha_k)$$

$$st. 0 \leq \alpha_k \leq C$$

从原来的优化问题的\(W(\alpha)\)表达式中可以看出,\(W(\alpha)\)中\(\alpha\)的最高次幂为2,所以我们的新优化问题中\(max_{\alpha_k} W(\alpha_k)\)实际是一个关于\(\alpha_k\)的二次函数,对于自变量\(\alpha_k\)有个限制条件是必须要在0到C之间,这个新优化问题应该绝大部分人都会求了。

求出\(\alpha_k\),再利用\(\alpha_j = \frac{\zeta - \alpha_k y^{(k)}}{y^{(j)}}\)求出\(\alpha_j\),这样就求出了新的\(\alpha_j\)和\(\alpha_k\),替换原来的值就可以了。

总结:

对\(m\)个\(\alpha\)初始化一下,比如说全赋值为0。然后选取想要进行更新的两个\(\alpha\),然后用上面的第三步对这两个\(\alpha\)进行更新。最后一直循环执行更新\(\alpha\)的步骤,直到我们使\(W(\alpha)\)取得极值。

猜你喜欢

转载自blog.csdn.net/wang2011210219/article/details/81114867
今日推荐