我是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();
我做错了什么?
除此之外还有其他更好的方法来进行多级分类吗?