如何在 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)。”)
不清楚这些是否是我正在寻找的权重w
和b
。
我看到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 代码中使用带有 Weka 的 LibSVM?
我的模型在 libsvm 工具箱 matlab 中预测所有正类到负类