在 java 代码中使用 libsvm 在移动设备中执行预测

Posted

技术标签:

【中文标题】在 java 代码中使用 libsvm 在移动设备中执行预测【英文标题】:Using libsvm into java code to perform prediction in a mobile device 【发布时间】:2013-06-05 05:25:10 【问题描述】:

我的应用程序包含一个学习任务,它是一个SVM 分类。经过艰苦的研究,我了解了 SVM 的基础知识,并通过命令行尝试了一些 libSVM 工具的示例。但是,我的应用程序部署在客户端-服务器架构中:

训练集存储在负责生成 SVM 模型的服务器端。 然后将 SVM 模型发送到客户端并用于预测 客户端是安卓移动设备

我的问题是如何在 Java 代码中使用 libSVM 而不是通过命令行运行它?

【问题讨论】:

对不起,没有正确理解这个问题,所以我删除了我的答案。但是,libsvm 页面说 Java 代码接近原生 C 源代码,也许您可​​以按照 C 教程进行操作? 【参考方案1】:

由于文档有点少,最好的方法可能是查看 libsvm 发行版中命令行工具 svm_predict.java 的源代码。

例如从文件加载 svm 模型:

svm_model model = svm.svm_load_model("filename");

那么你就可以做出预测了:

double v = svm.svm_predict(model, x);

svm_predict.java 中的predict() 方法详细介绍了如何设置x。

【讨论】:

【参考方案2】:

您可以使用包含此项目的方法进行 android 开发

LIBSVM for android jni environment

【讨论】:

【参考方案3】:

我找到了这个项目,它运行良好。

LIBSVM on Android platform with a native library for better performance

【讨论】:

【参考方案4】:

执行此操作的最通用、多语言的方法是实现等式以获得给定经过训练的 SVM 的样本的决策分数。这适用于 Java、C、Dalvik、Objective C,无论您现在或将来何时使用。

LIBSVM 生成的模型文件有三个重要的东西:

拉格朗日乘数 (alpha) 支持向量的标签(y_i) 支持向量(训练集中用于描述决策表面的数据点),即 x_i。

给定一个新点 x,你计算

一切都如前所述,K 是你用来训练的内核。

而决策只是这个决策值的符号(sgn(f(x)),例如 x)

【讨论】:

以上是关于在 java 代码中使用 libsvm 在移动设备中执行预测的主要内容,如果未能解决你的问题,请参考以下文章

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

java中使用LibSVM的一个例子

Libsvm java工程实践

使用 LibSVM 的 Java 代码中的 Weka 错误“无法处理数字类”

如何将 libsvm 模型加载到 Android 中

java.lang.NoClassDefFoundError:用于在 Android 中使用 JavaML libsvm