Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 支持向量机中的混乱细节&x27;s论文的序列最小优化_C++_Machine Learning_Svm - Fatal编程技术网

C++ 支持向量机中的混乱细节&x27;s论文的序列最小优化

C++ 支持向量机中的混乱细节&x27;s论文的序列最小优化,c++,machine-learning,svm,C++,Machine Learning,Svm,最近,我一直在学习Platt(1998)使用序列最小优化的支持向量机。这是他们的原稿: 这是另一个链接: 第二个链接描述了原始文件的实现细节,包括一个C++源代码,可以从这里下载: (但是,由于drand_48()函数仅在Linux上可用,因此代码无法运行,但我已经有了该函数的源代码,代码运行时间不会太长) 然而,在它们的实现中有一些奇怪且令人困惑的细节: 1) 在第一个链接,第10页,步骤步骤(i1,i2)中,有一行: if |a2 - alpha2 | < eps* (a2

最近,我一直在学习Platt(1998)使用序列最小优化的支持向量机。这是他们的原稿:

这是另一个链接:

第二个链接描述了原始文件的实现细节,包括一个C++源代码,可以从这里下载:

(但是,由于drand_48()函数仅在Linux上可用,因此代码无法运行,但我已经有了该函数的源代码,代码运行时间不会太长)

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

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

以下是第一篇论文的摘录:

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

我想这就是这句话的意思,但我就是不明白它是如何运作的

2) 第8页的(19):6个复杂的公式,第一篇论文:我真的不明白它们的意思。 多谢各位

12.3 Psuedo代码读取

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

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

但为什么不只是| a2-alph2 |a1 = alph1+s*(alph2-a2)