【问题标题】:Distance between a point and the hyperplane in SVM, MATLABSVM,MATLAB中点与超平面之间的距离
【发布时间】:2013-10-27 08:28:34
【问题描述】:

我正在为 MATLAB 使用 LIBSVM。现在我正在尝试计算一个点和超平面之间的距离。

根据官方解决方案(http://www.csie.ntu.edu.tw/~cjlin/libsvm/faq.html#f4151):

"距离是

|decision_value| / |w|

我们有

|w|^2 = w^Tw = alpha^T Q alpha = 2*(dual_obj + sum alpha_i). 

因此请在svm.cpp中找到我们计算对偶目标值的地方(即子程序Solve())并添加语句打印w^Tw。”

但我有点困惑:“svm.cpp”中有超过 3,000 行,“我们计算双重目标的地方”在哪里?谁能告诉我怎么做???

或者有没有其他方法可以计算出与超平面的距离?

谢谢!

【问题讨论】:

    标签: matlab svm


    【解决方案1】:

    免责声明:这不是答案。我对这个包一点也不熟悉,所以我只是猜测。我会把它放在 cmets 中,但它不适合,所以放在这里。

    我认为您要查找的代码可能在计算目标值的 line #747 of svm.cpp 附近。请注意,FAQ 引用了双重目标值,但 svm.cpp 中没有出现“双重”一词。因此,如果我们假设该函数从一开始就设置为解决对偶问题,那么这可能会起作用:

    // calculate objective value
    {
        char buf[BUFSIZ];
        double sum_alpha = 0;
    
        double v = 0;
        int i;
        for(i=0;i<l;i++)
        {
            v += alpha[i] * (G[i] + p[i]);
            sum_alpha += alpha[i];
        }
        si->obj = v/2;
    
        vsprintf(buf,"Distance to hyperplane = %f",v+2*sum_alpha);
        (*svm_print_string)(buf);
    }
    

    我没有编译也没有测试过这段代码,我也不知道这是否是正确的做法,所以对整个答案持保留态度

    【讨论】:

      猜你喜欢
      • 2012-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-25
      • 1970-01-01
      • 2016-02-04
      • 2015-08-11
      • 1970-01-01
      相关资源
      最近更新 更多