- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
libsvm在vc下的移植
libsvm在vc下的移植(一)
2010-07-23 11:00
LIBSVM软件包是台湾大学林智仁(Chih-Jen Lin)博士等用C++实现的SVM库,并且拥有matlab,perl等工具箱或者代码,移植和使用都比较方便.它可以解决分类问题(包括C-SVC、n-SVC)、回归问题(包括e-SVR、n-SVR)以及分布估计(one-class-SVM )等问题,提供了线性、多项式、径向基和S形函数四种常用的核函数供选择,可以有效地解决多类问题、交叉验证选择参数、对不平衡样本加权、多类问题的概率估计等。在Windows环境下,此软件包只提供DOS工具集(主要包括:训练工具svmtrain.exe,预测工具svmpredict.exe,缩放数据工具svmscale.exe和二维演示工具svmtoy.exe.
如果没有工具箱,可以从这里下载,
文件:libsvm-2.89.rar大小:515KB下载: HYPERLINK /blog/upfile2/090626133546.rar 下载或者从林智仁的主页上下载:.tw/~cjlin/
这里是2.89版本的,在他的windows下有几个工具,主要使用的是svm-scale.exe用来实现数据缩放归一化,svm-train.exe用来训练数据,生成向量机的model模型,svm-predict.exe用来预测.
具体的使用方法已经在以前的文章中说明过了,现在主要说明下在vc下怎么实现使用libsvm.
在源程序里面,主要由以下2个函数来实现:(1) struct svm_model *svm_train(const struct svm_problem *prob, const struct svm_parameter *param);该函数用来做训练,参数prob,是svm_problem类型数据,具体结构定义如下:struct svm_problem //存储本次参加运算的所有样本(数据集),及其所属类别。{int n; //记录样本总数double *y; //指向样本所属类别的数组struct svm_node **x; //指向一个存储内容为指针的数组};其中svm_node的结构体定义如下:struct svm_node //用来存储输入空间中的单个特征{int index; //输入空间序号,假设输入空间数为mdouble value; //该输入空间的值};所以,prob也可以说是问题的指针,它指向样本数据的类别和输入向量,在内存中的具体结构图如下:
图1.1LIBSVM训练时,样本数据在内存中的存放结构只需在内存中申请n*(m+1)*sizeof(struct svm_node)大小的空间,并在里面填入每个样本的每个输入空间的值,即可在程序中完成prob参数的设置。参数param,是svm_parameter数据结构,具体结构定义如下:struct svm_parameter // 训练参数{int svm_type; //SVM类型,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 权重,元素个数由nr_weight 决定*/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 指明是否要做概率估计*/}其中,SVM类型和核函数类型如下:enum { C_SVC, NU_SVC, ONE_CLASS, EPSILON_SVR, N
文档评论(0)