我的应用程序包含一个学习任务,它是SVM 分类。经过艰苦的研究,我了解了 SVM 的基础知识,并且还通过命令行尝试了一些使用libSVM工具的示例。但是,我的应用程序部署在客户端-服务器架构中:
- 训练集存储在负责生成 SVM 模型的服务器端。
- 然后将 SVM 模型发送到客户端并用于预测
- 客户端是安卓移动设备
我的问题是如何在Java代码中使用libSVM而不是通过命令行运行它?
我的应用程序包含一个学习任务,它是SVM 分类。经过艰苦的研究,我了解了 SVM 的基础知识,并且还通过命令行尝试了一些使用libSVM工具的示例。但是,我的应用程序部署在客户端-服务器架构中:
我的问题是如何在Java代码中使用libSVM而不是通过命令行运行它?
I found this project and it works well.
LIBSVM on Android platform with a native library for better performance
由于文档有点少,最好的方法可能是查看 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。
您可以使用包含此项目的方法进行 Android 开发
最通用的多语言方法是实现等式以获得给定经过训练的 SVM 的样本的决策分数。这将适用于 Java、C、Dalvik、Objective C,无论您现在或将来何时使用。
LIBSVM 生成的模型文件有三个重要的东西:
给定一个新点 x,你计算
其中一切都如上所述,K 是您用来训练的内核。
并且该决策只是该决策值的符号(例如 x 的 sgn(f(x)))