【问题标题】:How to get jlibsvm prediction probability in multi-class classification如何获得多类分类中的jlibsvm预测概率
【发布时间】:2017-06-12 18:58:47
【问题描述】:

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

我正在制作 3 个 SVM(所以 3 个不同的模型),在训练时,在 SVM_A 中,属于 CLASS A 的句子将有一个真实的标签,即 1 和其他句子将有一个 -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();

我做错了什么?

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

【问题讨论】:

    标签: machine-learning svm libsvm


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-02-11
      • 2018-10-12
      • 2021-12-04
      • 2016-01-05
      • 2017-06-12
      • 2016-12-04
      • 2021-07-31
      • 2022-06-28
      • 2019-10-25
      相关资源
      最近更新 更多