【问题标题】:Confusing details in Support vector machine's papers using Sequential Minimal Optimization使用序列最小优化的支持向量机论文中令人困惑的细节
【发布时间】:2015-08-16 01:13:11
【问题描述】:

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

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/

(但是,由于仅在 Linux 上可用的 drand_48() 函数存在一些问题,该代码无法运行,但我已经拥有该函数的源代码,代码运行不会花费很长时间)

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

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

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

这是第一篇论文的摘录:

“如果两端的目标函数相同(舍入误差在较小的 ε 内)并且内核服从 Mercer 条件,则联合最小化无法取得进展。” (第8页)

我认为这就是描述该行的含义,但我就是无法理解它是如何工作的!

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

【问题讨论】:

    标签: c++ machine-learning svm


    【解决方案1】:

    12.3 伪代码读取

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

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

    a1 = alph1+s*(alph2-a2)
    

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

    【讨论】:

    • 但是为什么不只是 |a2 - alph2|
    猜你喜欢
    • 2016-11-07
    • 2016-08-17
    • 2011-02-03
    • 2013-12-25
    • 2019-05-20
    • 2020-05-17
    相关资源
    最近更新 更多