将libsvm用于java代码以在移动设备中执行预测

时间:2013-06-09 11:01:38

标签: java android machine-learning classification libsvm

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

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

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

4 个答案:

答案 0 :(得分:1)

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

e.g。从文件加载svm模型:

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

然后你可以做出预测:

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

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

答案 1 :(得分:1)

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

LIBSVM for android jni environment

答案 2 :(得分:1)

我找到了这个项目并且效果很好。

LIBSVM on Android platform with a native library for better performance

答案 3 :(得分:0)

这种最通用,多语言的方法是实现方程式,以便在给定训练的SVM的情况下获得样本的决策分数。这将适用于Java,C,Dalvik,Objective C,无论您现在使用还是将来使用。

LIBSVM生成的模型文件有三个重要的事项:

  • 拉格朗日乘数(alphas)
  • 支持向量的标签(y_i's)
  • 支持向量(来自训练集的数据点,用于描述决策表面),x_i's。

给定一个新的点x,你计算

$\sum_{i=0}^{Nsv} y_i \alpha_i K(x,x_i)$

所有内容如上所述,K是您用来训练的内核。

并且决定只是这个决定值的标志(sgn(f(x))对于一个例子x)