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

问题描述 投票:0回答:1

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

有人成功更改了svm.cpp以计算点与超平面之间的距离吗?如果可以的话,您可以解释一下我怎么做吗?

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

c++ libsvm
1个回答
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-> obj是目标值的变量
  2. 添加for循环以计算alpha的总和
  3. 计算2 *(si-> obj + alpha的总和)并打印其平方根。您现在得到| w |。您需要重新编译代码

所以新代码将是:

{
    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);
}
© www.soinside.com 2019 - 2024. All rights reserved.