我在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)。”)
尚不清楚这些是否是权重w
和b
我正在寻找。
我见过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/