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

标签 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另一位用户也有同样的问题,但他没有找到问题的答案。

谢谢。

最佳答案

在您提供的文档中,它说 getWeights() 返回的字符串是包含权重的字符串(由空格分隔的 double )。

所以这应该有效:

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]);

关于java - 如何在 Java 中获取 LibSVM 分类器的权重?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29364460/

相关文章:

java - 谷歌GSON : Deserialize JSON data to Java

machine-learning - 前馈神经网络中的变量输入

java - 不同类别的产品比较

java - Weka 打包和扩展

python - float 分类器

java - hibernate中这两种查询方式有什么区别?

java - 使用 Google 的快速按钮后 Phonegap 应用程序崩溃

machine-learning - libsvm 100% 准确度

java - IOC容器: de-duplicating the configuration code

machine-learning - 为什么 Tensorflow CNN 使用过多内存?