如何修改svm.cpp来计算点与超平面之间的距离? (LIBSVM)

时间:2016-01-05 17:18:51

标签: c++ libsvm

我想使用LIBSVM(不在MATLAB中)计算点与超平面之间的距离。我试着遵循这些指示,但我想我失败了。 http://www.csie.ntu.edu.tw/~cjlin/libsvm/faq.html#f4151

有人成功更改了svm.cpp以计算点与超平面之间的距离吗?如果你这样做,你能解释我怎么样?

我非常感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:0)

GitHub上找到的libsvm代码,您有:

{
    double v = 0;
    int i;
    for(i=0;i<l;i++)
        v += alpha[i] * (G[i] + p[i]);

    si->obj = v/2;
}

website上的说明说:

  1. 在那个地方,si-&gt; obj是目标值的变量
  2. 添加for循环以计算alpha
  3. 的总和
  4. 计算2 *(si-> obj + alpha之和)并打印它的平方根。你现在得到| w |。您需要重新编译代码
  5. 所以新代码将是:

    {
        double v = 0;
        int i;
        for(i=0;i<l;i++)
            v += alpha[i] * (G[i] + p[i]);
        si->obj = v/2;
    
        double sum_alpha = 0;
        for (int i = 0; i<l; ++i) {
            sum_alpha += alpha[i];
        }
        double w_square = 2*(si->obj + sum_alpha);
        double w = sqrt(w_square);
    
        printf("The value for abs(w) is %f \n", w);
    }