2013-10-18 107 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); 
} 

我還沒有編制,也沒有測試此代碼,我也不知道這是否是正確的要做的事情,所以採取一個大粒鹽的整個答案