如何将 libsvm 模型加载到 Android 中

Posted

技术标签:

【中文标题】如何将 libsvm 模型加载到 Android 中【英文标题】:How to load libsvm model into Android 【发布时间】:2015-07-06 03:22:24 【问题描述】:

我从一个在 MATLAB 中训练的模型生成了一个模型文件,我想将它从移动设备加载到 android 中。

前三个 SV 和参数的模型文件如下所示(应该是正确的):

svm_type 0 
kernel_type 2
gamma 3.3636
coef0 0
nr_class 2
total_sv 1106
rho -0.7401
label 0 1
nr_sv 754 352
SV
0 1:8.02710 2:8.90538 3:9.56450 4:10.15383
0 1:7.87334 2:8.71629 3:9.41049 4:9.45693
0 1:8.52795 2:9.19652 3:10.17247 4:10.30913 ...

但是,当我使用 svm.svm_load_model() 加载它时,生成的模型为空:

FileReader fIn = new FileReader("mymodel.txt");
BufferedReader bufferedReader = new BufferedReader(fIn);
svm_model model = svm.svm_load_model(bufferedReader);

我似乎找不到问题,有人回答了吗?

谢谢

编辑:我知道错误是什么。 MATLAB 输出的模型文件显然与 Android load_model 函数不完全兼容,因为键 svm_type 和 kernel_type 的值必须指定为字符串而不是数字(c_svc 代替 0,rbf 代替 2)。

【问题讨论】:

【参考方案1】:

编辑:我知道错误是什么。 MATLAB 输出的模型文件显然与 Android load_model 函数不完全兼容,因为键 svm_type 和 kernel_type 的值必须指定为字符串而不是数字(c_svc 代替 0,rbf 代替 2)。

【讨论】:

【参考方案2】:

您可以这样做,因为 libsvm 是用 C/C++ 编写的。因此,您可以使用包装器(由 JNI 或其他接口)在 Android 中访问这个“基于 C 的 libsvm 库”

例如,您可以使用这个包装器:https://github.com/yctung/AndroidLibSvm

加载程序后。去编辑“AndroidLibSvm/app/src/main/jni/jnilibsvm.cpp”文件。 在此文件中,您可以通过

加载模型文件
model=svm_load_model(modelFile);

您还可以根据需要访问其他 libsvm 功能

【讨论】:

尽管等待了很长时间,但我很感激这个答案;)但是,我发现了问题所在。 MATLAB 输出的模型文件与 Android 的 load_model 函数不完全兼容,svm_type 和 kernel_type 参数必须用关键字(如 c_svc)而不是数字来编写。

以上是关于如何将 libsvm 模型加载到 Android 中的主要内容,如果未能解决你的问题,请参考以下文章

加载模型上的 Java libSVM NullPointerException

如何在 R 中使用 libsvm 加载 SVM 模型拟合/集成

如何将 LIBSVM 模型(使用 LIBSVM 保存)读入 PySpark?

如何在 C# 中将数据集加载到 libsvm 中

使用 LibSVM 进行分类

使用带有 CNN 的 LibSVM 文件的 Deeplearning4j 困难