如何将 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 模型拟合/集成