我正在使用LibSVM进行一些多类分类。我使用LibSVM的MATLAB界面训练了模型。然后,我以在C语言中可以识别的格式保存了该模型。实际上,无论输入什么测试向量(甚至是零向量),我都得到相同的类输出,我认为问题在于将测试向量x加载到svm_node结构中的方式。下面是代码片段。让我知道这是正确的方法还是我遗漏了一些东西。

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);

最佳答案

这似乎是一个问题:

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);
}

关于c - 使用LibSVM进行分类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18416725/

10-13 04:19