2014-02-17 2 views
1

Привет, я сейчас работаю над проектом и начал использовать библиотеку LIBSVM (http://www.csie.ntu.edu.tw/~cjlin/libsvm/) для моего приложения Java для обучения набора данных с несколькими измерениями для каждого изображения.LIBMSVM Формат svm_node

У меня есть вопрос относительно svm_problem и svm_node

В svm_problem мы имеем следующий код

package libsvm; 
public class svm_problem implements java.io.Serializable 
{ 
    public int l; 
    public double[] y; 
    public svm_node[][] x; 
} 

Правильно ли я сказать, что

  • л представляет размер все изображение?

  • у- метку изображения, как в моем случае я хочу + 1/-1

А теперь приводит к моему второму вопросу о svm_node [] [] х

package libsvm; 
public class svm_node implements java.io.Serializable 
{ 
    public int index; 
    public double value; 
} 

каждый svm_node от 1 до i, где i - номер моего атрибута, хранятся в каждой позиции массива.

так, например, у меня есть значения изображения следующим

1 1: 1.5 2: 2.5 3: 4.5

-1 1: 1 2: 2 3: 3

Так что мой Int л = 3

мой у будет

у [0] = 1

у [1] = -1

х [0] [0] = 1 .index

х [0] [0] .value = 1,5

х [0] [1] = 2 .index

х [0] [1] = 2,5 .value

х [0] [2] .index = 3

х [0] [2] = 4,5 .value

х [1] [0 ] .index = 1

х [1] [0] = 1 .value

х [1] [1] = 2 .index

х [1] [1] = 2 .value

х [1] [2] .index = 3

х [1] [2] .value = 3

Правильно ли я в моем понимании?

ответ

2

Вы близко.

svm_problem.l это количество образцов в базе данных, поэтому в данном случае это будет 2.

Поскольку libsvm использует редкую запись, так что вам нужно, чтобы указать, когда каждая строка заканчивается с индексом - 1, например:

х [0] [0] = 1 .index

х [0] [0] .value = 1,5

х [0] [1] = 2 .index

x [0] [1] .val Ue = 2,5

х [0] [2] .index = 3

х [0] [2] .value = 4,5

х [0] [3] .index = -1

+0

согласно https://github.com/cjlin1/libsvm указание в конце строки не требуется в версии java, это необходимо в версии C++ – Clocker