如何在Java中获取LibSVM分类器的权重?

时间:2015-03-31 08:53:11

标签: java machine-learning classification weka libsvm

我在Java中使用LibSVM,如下所示:

LibSVM classifier = new LibSVM();
classifier.setCost(C);

我有兴趣从分类器中获取权重w和参数b,以便在线性内核的情况下表征分离超平面:

w^T x + b = 0

我看过some other questions建议如何在MATLAB或其他语言中执行此操作。但是,我不清楚如何在Java中执行此操作。如果您选择documentation,则会找到方法getWeights(),通过阅读名称,应该返回权重列表。但是,因为:

  • 返回类型不是我期望的那种(我原本期望的是double[]而不是String
  • Javadoc不清楚(引用:“获取类i的参数C为weight [i] * C,对于C-SVC(默认为1)。”)

目前尚不清楚这些是我正在寻找的权重wb

我看到here其他用户遇到同样的问题,但他没有找到问题的答案。

感谢。

1 个答案:

答案 0 :(得分:0)

在您提供的文档中,它表示getWeights()返回的字符串是一个包含权重的字符串(由空格分隔的双精度数)。

所以这应该有效:

String a = classifier.getWeights();
String[] weightsString = a.split(' ');
double[] weights = new double[a.length];
for(int i =0; i< a.length; i++)
    weights[i] = Double.valueOf(weightsString[i]);