2017-01-27 99 views
0

我是SVM的新手。我使用jlibsvm多级分类问题。基本上,我正在做一个句子分类问题。有3类。我的理解是我在做一对一的分类。我有一个相对较小的火车。总共75个句子​​,其中25个句子属于每个类别。如何在多类分类中获得jlibsvm预测概率

我提出3个支持向量机(所以3个不同的型号),其中,在训练中,SVM_A,句子属于A类将有一个真正的标签,即和其他句子将有- 1标签。相应地为SVM_BSVM_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(); 

我在做什么错?

还有其他更好的办法吗多级分类除此之外呢?

回答

2

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

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

但是,jlibsvm仍然在测试版并依靠相当老版本的LIBSVM(2.88)。很多有changed。要获得更直观的Java绑定(与默认版本LIBSVM版本相比),您可以查看zlibsvm,该版本可通过Maven Central以及最新的LIBSVM版本获得。

相关问题