2013-10-18 59 views
1

我正在使用MATLAB的LIBSVM。现在我试图计算一个点和超平面之间的距离。SVM中的一个点与超平面之间的距离,MATLAB

根据官方的解决办法(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请找theplace,我们计算出双客观值(即子程序Solve())并添加一条语句以打印w^Tw。“

但我有点困惑:'svm.cpp'中有超过3000行,'我们计算双重目标的地方'在哪里?谁能告诉我如何使它?

还有没有其他解决方案来找出超平面的距离?

谢谢!

回答

0

声明:这不是一个答案。我根本不熟悉这个软件包,所以我只是在猜测。我会把它放在评论中,但它不适合,所以它就是这样。

我认为你正在寻找的代码可能在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); 
} 

我还没有编制,也没有测试此代码,我也不知道这是否是正确的要做的事情,所以采取一个大粒盐的整个答案