2015-03-31 65 views
1

我在Java中使用SVM,如下:如何在Java中獲取LibSVM分類器的權重?

LibSVM classifier = new LibSVM(); 
classifier.setCost(C); 

我感興趣的是得到的權重w和分類參數b,以表徵分離超平面線性核的情況下:

w^T x + b = 0 

我看過some other questions,建議如何在MATLAB或其他語言中做到這一點。但是,我不清楚如何在Java中執行此操作。如果你去的是documentation,你會發現方法getWeights(),通過讀取名字應該返回一個權重列表。然而,因爲:

  • 返回類型不是我期待(我本來期望像double[]而不是一個單一String
  • 的Javadoc不明確(引用了一句:「獲取參數類C I體重[I] * C,對於C-SVC(缺省爲1)。「)

目前尚不清楚是否這些wb我要找的權重。

我看過here另一個用戶有同樣的問題,但他沒有找到他的問題的答案。

謝謝。

+0

我面臨同樣的問題,你得到這個問題的答案。 – 2016-10-20 08:54:49

回答

0

在您提供的文檔中,它表示由getWeights()返回的字符串是一個包含權重的字符串(由空白分隔的雙打)。

那麼這應該工作:

String a = classifier.getWeights(); 
String[] weightsString = a.split(' '); 
double[] weights = new double[a.length]; 
for(int i =0; i< a.length; i++) 
    weights[i] = Double.valueOf(weightsString[i]); 
+1

是的,但'w^tx + b'中的'b'怎麼辦? – Eleanore 2015-03-31 10:10:24

相關問題