使用 LibSVM 进行分类

Posted

技术标签:

【中文标题】使用 LibSVM 进行分类【英文标题】:Classification using LibSVM 【发布时间】:2013-08-27 07:48:25 【问题描述】:

我正在使用 LibSVM 进行一些多类分类。我使用 LibSVM 的 MATLAB 接口训练了模型。然后我以 C 可以识别的格式保存了这个模型。我现在想在 C 中使用 svm_predict 进行分类。我无法重现我在 MATLAB 中看到的结果。事实上,无论我输入什么测试向量(甚至是零向量),我都会得到相同的类输出,我认为问题在于我将测试向量 x 加载到 svm_node 结构中的方式。下面是代码sn-p。如果这是正确的方法,或者我遗漏了什么,请告诉我。

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

【问题讨论】:

【参考方案1】:

这似乎是个问题:

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

【讨论】:

以上是关于使用 LibSVM 进行分类的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 LibSVM 进行“多分类”方法?

如何使用 libsvm 进行文本分类?

使用 LIBSVM 进行分类的 100% 准确度 - 可能有啥问题?

使用 libsvm 进行一类分类

使用java libsvm进行文本分类——模型、参数选择

java中使用libsvm的文档分类