2015-03-31 1 views
1

Я использую LibSVM в Java, следующим образом:Как получить вес для классификатора LibSVM в Java?

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 класса я взвешивать [я] * C, для C-SVC (по умолчанию 1). ")

не ясно, являются ли эти веса w и b Ищу.

Я видел here другой пользователь, имеющий такую ​​же проблему, но он не нашел ответа на свой вопрос.

Спасибо.

+0

я столкнулся с той же проблемой вы получите ответ на этот вопрос. –

ответ

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

Да, но как насчет 'b' в' w^tx + b'? – Eleanore