如何在多类分类中获得jlibsvm预测概率

时间:2017-01-27 06:33:17

标签: machine-learning svm libsvm

我是SVM的新手。我正在使用 jlibsvm 来解决多类分类问题。基本上,我正在做一个句子分类问题。有 3个类。我的理解是我正在做一对一分类。我的火车相对较小。共75个句子​​,每个班级有25个句子。

我正在制作3个SVM(所以3个不同的模型),其中,在训练中,在 SVM_A 中,属于CLASS A的句子将具有真正的标签,即 1 和其他句子将有一个 -1 标签。相应地为 SVM_B SVM_C 完成。

在测试时,为了获得句子的真实标签,我将句子给予3个模型,并且我将采用这3个模型返回的预测概率。哪一个返回最高的将是句子所属的类。

这就是我的表现。但是我为所有模型的测试集中的每个句子获得相同的预测概率

A predicted:0.012820514
B predicted:0.012820514
C predicted:0.012820514

对训练集中的所有句子重复这些值。

以下是我为训练设置参数的方法:

C_SVC svm = new C_SVC();
MutableBinaryClassificationProblemImpl problem;

ImmutableSvmParameterGrid.Builder builder = ImmutableSvmParameterGrid.builder();

// create training parameters ------------
HashSet<Float> cSet;
HashSet<LinearKernel> kernelSet;

cSet = new HashSet<Float>();
cSet.add(1.0f);

kernelSet = new HashSet<LinearKernel>();
kernelSet.add(new LinearKernel());

// configure finetuning parameters

builder.eps = 0.001f; // epsilon
builder.Cset = cSet; // C values used
builder.kernelSet = kernelSet; //Kernel used
builder.probability=true; // To get the prediction probability
ImmutableSvmParameter params = builder.build();

我做错了什么?

除此之外还有其他更好的方法来进行多级分类吗?

1 个答案:

答案 0 :(得分:2)

您获得相同的输出,因为您生成了相同的模型三次。

原因是,jlibsvm能够根据提供的数据开箱即用地执行多类分类(LIBSVM本身也支持这一点)。如果检测到,在给定数据中提供了两个以上的类实验,它会自动执行多类分类。因此不需要手动1vsN方法。只需为每个类别提供类别标签的数据。

但是,jlibsvm仍处于 beta 状态,并且依赖于LIBSVM(2.88)的旧版本。很多人都有changed。对于更加直观的Java绑定(与默认的LIBSVM版本相比),您可以查看zlibsvm,它可以通过Maven Central和最新的LIBSVM版本获得。