2013-08-24 82 views
0

我正在使用LibSVM來執行一些多類分類。我使用LibSVM的MATLAB接口來訓練模型。然後,我將這個模型保存爲可以在C中識別的格式。我現在想用C中的svm_predict進行分類。我無法重現我在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); 
}