2013-08-24 2 views
0

Я использую LibSVM для выполнения некоторых классификаций нескольких классов. Я тренировал модель, используя интерфейс MATLAB LibSVM. Затем я сохранил эту модель в формате, который будет распознан в C. Теперь я хочу классифицировать с помощью svm_predict в C. У меня возникли проблемы с воспроизведением результатов, которые я видел в MATLAB. На самом деле я получаю один и тот же выпуск класса независимо от того, какой тестовый вектор я кормлю (даже вектор нулей). Я думаю, проблема связана с тем, как я загружаю вектор-тест x в структуру svm_node. Ниже приведен фрагмент кода. Дайте мне знать, если это правильно, или если я что-то упустил.Классификация с использованием LibSVM

struct svm_model *libsvm_model = svm_load_model('mymodel.svm'); 
struct svm_node x[2001]; // this is for one feature vector of size 2000x1 
int index = 1; 
int i = 0; 

for (i = 0; i < features.size(); i++) { 
    x[i].index = index; 
    x[i].value = features.at(i); 
    index = index + 1; 
} 

x[i+1].index = -1; 
x[i+1].value = '?'; 

double result = svm_predict(libsvm_model, x); 

ответ

0

Это, как представляется, проблема:

x[i+1].index = -1; 
x[i+1].value = '?'; 

libsvm требует svm_node быть входной вектор, который должен иметь положительные индексы и двойные значения. Вы не должны «оставлять» какое-то странное пустое измерение.

И, кстати, вам не нужно index переменной

for (i = 0; i < features.size(); i++) { 
    x[i].index = index; 
    x[i].value = features.at(i); 
    index = index + 1; 
} 

эквивалентно

for (i = 0; i < features.size(); i++) { 
    x[i].index = i + 1; 
    x[i].value = features.at(i); 
} 
Смежные вопросы