|
|
|
@ -216,11 +216,9 @@ $$
|
|
|
|
|
|
|
|
|
|
2.求minL(w,b,α)对α的极大,即是对偶问题
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
3.求max转换成min:
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
接下来就是求解α的问题了,但是我们还得解决另外的一个问题
|
|
|
|
|
|
|
|
|
@ -262,10 +260,105 @@ Maximum soft interval
|
|
|
|
|
|
|
|
|
|
Kernel function
|
|
|
|
|
|
|
|
|
|
现在到了这里:
|
|
|
|
|
**现在到了这里:**
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
**目前的问题:**
|
|
|
|
|
|
|
|
|
|
式子中间有xi核xj的点积
|
|
|
|
|
|
|
|
|
|
例如在手写数字数据集中,训练集有6万个样本,6万乘6万勉强能接受
|
|
|
|
|
|
|
|
|
|
但如果每个样本有784维,6万样本两两做点积,是非常慢的。如果x是更高的维度呢?
|
|
|
|
|
|
|
|
|
|
**梳理一下:**
|
|
|
|
|
|
|
|
|
|
1. 由于公式的需要,我们需要计算xi和xj的点积
|
|
|
|
|
2. 此外,我们需要将样本映射到高维去,加入映射函数ø(x),那么ø(xi)和ø(xj)的维度数目进一步扩大,它们的点积会让运算变得极其复杂
|
|
|
|
|
3. 我们希望存在一个函数K(xi,yi)=ø(xi)×ø(xj),但函数K的计算方式更简单。也就是说,我们将样本通过函数升维得到ø(xi)和ø(xj),接下来要计算它们的点积,能不能有个简单的计算公式,计算出来的结果和ø(xi)×ø(xj)一样?那样我们就不用再去算ø(xi)和ø(xj)的结果了,直接用简单方式计算不是更好吗?
|
|
|
|
|
|
|
|
|
|
这个简便方式,就是核函数
|
|
|
|
|
|
|
|
|
|
**在SVM中,我们通常使用高斯核:**
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
在计算x和z的点积时,直接用这个公式替代就好了
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 序列最小最优化算法(SMO)
|
|
|
|
|
|
|
|
|
|
Sequetial minimal optimization
|
|
|
|
|
|
|
|
|
|
之前我们还剩下α求解,我们用SMO
|
|
|
|
|
|
|
|
|
|
**我们最后求解出来的α,一定是让整个结果满足KKT条件的。如果不满足,那一定不是最优解。**
|
|
|
|
|
|
|
|
|
|
**所以我们可以不断地调整α的值,直到所有α都满足KKT条件,这是我们一定能得到最优解。**
|
|
|
|
|
|
|
|
|
|
**怎么调整呢?——用SMO**
|
|
|
|
|
|
|
|
|
|
假设整个式子中有N个α(α1,α2,α3,...,αN),先固定其它α,找α1,先让α1满足KKT条件。但如果固定除α1以外的所有α,等于也固定了α1.
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
所以我们每次选择优化两个α
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
进一步,原式中目前hi有α1和α2两个变量,我们将其它作为常数去除。
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
整理如下:
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
目前可知,α1一定在0和C之间
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
**最终得到结果:**
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
其中,L与H是所在对角线段端点的界,如果y1≠y2(如下左图所示),则
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
如果y1=y2(如下右图所示),则
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
现在对于两个α,我们已经知道该怎么优化了。那么怎么从总舵的α中挑选两个合适的来进行优化呢?
|
|
|
|
|
|
|
|
|
|
——找到**违反KKT最严重**的。
|
|
|
|
|
|
|
|
|
|
**第一个变量的选择:**
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
**第二个变量的选择:**
|
|
|
|
|
|
|
|
|
|
在第一个变量步子迈大的情况下,再找一个步子迈得最大的α。它的量化方式|E1-E2|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
两个α都找到一个,进行优化,然后找下一对α,直到再也找不到不违反KKT的α为止。
|
|
|
|
|
|
|
|
|
|