使用顺序最小优化的支持向量机论文中令人困惑的细节

Confusing details in Support vector machine's papers using Sequential Minimal Optimization

本文关键字:文中令 细节 向量机 支持 顺序 优化      更新时间:2023-10-16

最近我一直在尝试使用Platt(1998)的顺序最小优化来学习支持向量机。这是他们的原始论文:

http://research.microsoft.com/apps/pubs/?id=68391

这里是另一个链接:

http://www.cs.iastate.edu/honavar/smo-svm.pdf

第二个链接描述了原始论文的实现细节,包括c++源代码,可以从这里下载:ftp://www.ai.mit.edu/pub/users/tlp/projects/svm/svm-smo/

(代码不会运行,然而,由于一些问题与drand_48()函数只在Linux上可用,但我已经有该函数的源代码,它不会花费很长时间的代码运行)

然而,在它们的实现中有一些奇怪和令人困惑的细节:1)在第10页步骤takeStep (i1,i2)的第一个链接中,有一行:

  if |a2 - alpha2 | < eps* (a2 + alpha2 + eps) 
             return 0;

,其中a2是"新的"拉格朗日乘子,alpha2是"旧的"拉格朗日乘子。我不太明白这行是干什么的。我所知道的是,在这个函数中:首先,它试图找到最小化(或最大化,如在第二个链接中)目标函数的2个拉格朗日乘数,在某些条件下(即y1 * alpha1 + y2 * alpha2 = const),然后它必须根据KKT条件进行检查(2个alpha必须在一个框(0,C)(0,C))。它通过找到一阶导数消失的点,然后检查该点的二阶导数,看看它是否真的是最小值,如果不是,检查目标函数的边界(论文中的L和H)。SMO将拉格朗日乘子移动到具有最小值的端点目标函数。

这是第一篇论文的节选:

"如果目标函数两端相同(舍入误差在一个小的ε范围内),并且核服从Mercer条件,则联合最小化无法进行。"(page8)

我想这就是描述这一行的意思,但我就是不明白它是如何工作的!

2)第一篇论文第8页的(19):6个复杂的公式:我真的不明白它们是什么意思。非常感谢!

12.3 Psuedo code read

if (|a2 - alph2| < eps*(a2+alpa2+eps))
    return 0;

eps为ε, epsilon,舍入误差较小。因此,如果绝对(正)差变得太小,那么下一行将产生一个很小的值

a1 = alph1+s*(alph2-a2)

,因此函数终止,因为函数不能以如此小的增量进行。