如何在Matlab中训练模型,保存到磁盘,并在C++程序中加载?

我使用的是libsvm 3.16版本。我已经在Matlab中进行了一些训练,并创建了一个模型。现在我想将这个模型保存到磁盘,并在我的C++程序中加载这个模型。到目前为止,我找到了以下几种替代方案:

  1. 这个回答解释了如何从C++保存模型,这是基于这个网站的。并不是我所需要的,但可以进行调整。(这需要开发时间)。
  2. 我可以在Matlab中找到最佳的训练参数(核函数,C),然后在C++中重新训练所有内容。(每次更改参数时都需要在C++中进行训练。这不具备可扩展性)。

因此,这两种选择都不令人满意,

有谁有好的建议吗?


回答:

实际上,第一个选项相当合理。如果你通过Matlab将模型保存为libsvm的C格式,那么使用libsvm提供的函数在C/C++中处理模型就非常简单了。尝试在C++中处理Matlab格式的数据可能会困难得多。

“svm-predict.c”文件中的main函数(位于libsvm包的根目录)可能包含你需要的大部分内容:

if((model=svm_load_model(argv[i+1]))==0){    fprintf(stderr,"can't open model file %s\n",argv[i+1]);    exit(1);}

例如,要使用模型预测标签x,你可以运行

int predict_label = svm_predict(model,x);

这其中最棘手的部分是将你的数据转换为libsvm格式(除非你的数据已经是libsvm文本文件格式,在这种情况下,你可以直接使用”svm-predict.c”中的predict函数)。

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; //注意:libsvm索引从1开始x[0].value=1.0;x[1].index=4;x[1].value=5.0;x[2].index=-1;

对于分类器(C_SVC)以外的SVM类型,请查看”svm-predict.c”中的predict函数。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注