LibSVM使用记录 C++ Visual studio
程序员文章站
2022-06-17 11:32:16
...
记录LIbSVM使用的关键。不是教程,教程可以参考:https://blog.csdn.net/shayne000/article/details/88756447
从LIbSVM的训练模型函数说起:
svm_model* svmModel = svm_train(&prob, ¶m);
这是一个模型训练函数,训练成功之后会产生一个SVM模型。
所以前期工作就是对实现连个参数:&prob, ¶m
prob相当于问题数据空间,param相当于模型求解的算法参数
首先看一下参数选项,具体的解释在说明文档里面有:
struct svm_parameter
{
int svm_type;
int kernel_type;
int degree; /* for poly */
double gamma; /* for poly/rbf/sigmoid */
double coef0; /* for poly/sigmoid */
/* these are for training only */
double cache_size; /* in MB */
double eps; /* stopping criteria */
double C; /* for C_SVC, EPSILON_SVR and NU_SVR */
int nr_weight; /* for C_SVC */
int *weight_label; /* for C_SVC */
double* weight; /* for C_SVC */
double nu; /* for NU_SVC, ONE_CLASS, and NU_SVR */
double p; /* for EPSILON_SVR */
int shrinking; /* use the shrinking heuristics */
int probability; /* do probability estimates */
};
然后看一下问题数据空间
struct svm_problem
{
int l;//样本数量
double *y;//样本Y值是一个以为数组
struct svm_node **x;//样本特征值是一个二维数据,一个svm_node的一维数组代表一个样本
};
接下来看看svm_node的数据结构:
struct svm_node
{
int index;//样本特征索引
double value;//样本特征值
};
当index = -1 的时候表示这个样本结束
所以首先填充一维的svm_node数组作为样本,然后将很多个样本放到struct svm_node **x;,同时也要把y复制还有样本数量赋值。
在调用训练函数之前还要先检查一下参数是否有问题
//检查参数设置是否错误;
if (svm_check_parameter(&prob, ¶m) != NULL)
{
std::cout << svm_check_parameter(&prob, ¶m) << std::endl;
}
如果没有问题就是保存模型,然后加载模型,然后预测啦
//保存模型
svm_save_model(modelFileName.c_str(), svmModel);
//加载模型
svm_model* svmModel = svm_load_model(modelFileName.c_str());
//单样本预测(也有成组的预测)
//建立一个待预测样本
svm_node* input = new svm_node[FEATUREDIM + 1];
....
//预测
int predictValue = svm_predict(svmModel, input);
上一篇: 了解Mybatis 1(IDEA)
推荐阅读
-
使用Visual Studio的查找与替换替代默认的系统搜索
-
使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序)
-
Microsoft Visual Studio 2017 for Mac Preview安装使用案例分享
-
使用Visual Studio 2017写静态库
-
Visual Studio 2013中scanf函数无法使用的详细解决办法
-
Visual Studio 2010怎么使用自带的安装项目打包程序?
-
带你使用Visual Studio 2019创建一个MVC Web应用
-
Visual Studio 2017的安装与使用
-
如何在Mac系统使用Visual Studio Code运行Python
-
使用 Visual Studio Code 进行远程开发