And*_*ein 5 c++ matlab machine-learning libsvm
我使用libsvm版本3.16.我在Matlab做过一些训练,并创建了一个模型.现在我想将此模型保存到磁盘并在我的C++程序中加载此模型.到目前为止,我发现了以下替代方案:
因此,这两种选择都不令人满意,
有没有人有想法?
选项1实际上是相当合理的。如果通过 matlab 将模型保存为 libsvm 的 C 格式,则可以使用 libsvm 提供的函数在 C/C++ 中直接使用模型。尝试在 C++ 中处理 matlab 格式的数据可能会困难得多。
main
“svm-predict.c”(位于 libsvm 包的根目录)中的函数可能包含您需要的大部分内容:
if((model=svm_load_model(argv[i+1]))==0)
{
fprintf(stderr,"can't open model file %s\n",argv[i+1]);
exit(1);
}
Run Code Online (Sandbox Code Playgroud)
x
例如,要使用模型预测标签,您可以运行
int predict_label = svm_predict(model,x);
Run Code Online (Sandbox Code Playgroud)
其中最棘手的部分是将数据传输为 libsvm 格式(除非您的数据采用 libsvm 文本文件格式,在这种情况下您可以只使用predict
“svm-predict.c”中的函数)。
libsvm 向量是表示稀疏数据数组的x
数组。struct svm_node
每个 svm_node 都有一个索引和一个值,并且向量必须以设置为 -1 的索引终止。例如,要对向量 进行编码[0,1,0,5]
,您可以执行以下操作:
struct svm_node *x = (struct svm_node *) malloc(3*sizeof(struct svm_node));
x[0].index=2; //NOTE: libsvm indices start at 1
x[0].value=1.0;
x[1].index=4;
x[1].value=5.0;
x[2].index=-1;
Run Code Online (Sandbox Code Playgroud)
对于分类器 (C_SVC) 以外的 SVM 类型,请查看predict
“svm-predict.c”中的函数。
归档时间: |
|
查看次数: |
2639 次 |
最近记录: |