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

Posted

技术标签:

【中文标题】如何在 Java 中获取 LibSVM 分类器的权重?【英文标题】:How to get weights for a LibSVM classifier in Java? 【发布时间】:2015-06-04 13:05:54 【问题描述】:

我在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】:

在您提供的文档中,它说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]);

【讨论】:

是的,但是w^tx + b 中的b 呢?

以上是关于如何在 Java 中获取 LibSVM 分类器的权重?的主要内容,如果未能解决你的问题,请参考以下文章

java中使用libsvm的文档分类

如何使用 LibSVM 进行“多分类”方法?

如何在我的 Java 代码中使用带有 Weka 的 LibSVM?

我的模型在 libsvm 工具箱 matlab 中预测所有正类到负类

如何使用 LIBSVM 的 Android Java 包装器正确设置 LIBSVM.scale() 的参数

如何使用 LIBSVM 从混淆矩阵中获得分类精度?