我對如何正確使用libSVM C++代碼有些疑惑。 使用我自己的數據矩陣我已經使用作者提供的svm-train exe訓練了一個二進制SVM分類器。我還使用svm-predict可執行文件測試了模型。已創建的訓練集和測試矩陣由作者的建議:libsvm svm_node和svm_predict
標籤1:val_1 ..... N:val_n
標籤1:val_1 ..... N:val_n
標籤1:val_1 ..... N:val_n
.....
標籤1:val_1 ..... N:val_n
該模型似乎以這種方式工作得很好。
目前我正在嘗試從C++應用程序加載模型並要求進行分類。我認爲這個問題是,當我創建了svm_node陣列,我做的是以下
Mat featureVector = ....; //opencv matrix 1 rows x n cols
int n = featureVector.cols;
struct svm_node *x = (struct svm_node *) malloc((n+1)*sizeof(struct svm_node));
int nonZero = 0;
for(int i = 0; i < n; i++){
//Escape zero values
if(featureVector.at<float>(0,i) != 0){
x[nonZero].index = i+1; //libsvm index start from 1
x[nonZero].value = featureVector.at<float>(0,i);
nonZero++;
}
}
x[nonZero].index = -1;//requested by libSVM
x = (struct svm_node *) realloc(x, (nonZero+1) * sizeof(struct svm_node));
//finally ask for prediction
int prediction = svm_predict(model, x);
的分類只是生產總是相同的結果。我不確定是否必須逃避零值,否則結果不一樣。有誰知道我是否做錯了什麼?