预览加载中,请您耐心等待几秒...
1/3
2/3
3/3

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

libsvm在vc下的移植(一) 2010-07-2311:00 LIBSVM软件包是台湾大学林智仁(Chih-JenLin)博士等用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"http://blogimg.chinaunix.net/blog/upfile2/090626133546.rar"下载或者从林智仁的主页上下载:http://www.csie.ntu.edu.tw/~cjlin/ 这里是2.89版本的,在他的windows下有几个工具,主要使用的是svm-scale.exe用来实现数据缩放归一化,svm-train.exe用来训练数据,生成向量机的model模型,svm-predict.exe用来预测. 具体的使用方法已经在以前的文章中说明过了,现在主要说明下在vc下怎么实现使用libsvm. 在源程序里面,主要由以下2个函数来实现:(1)structsvm_model*svm_train(conststructsvm_problem*prob,conststructsvm_parameter*param);该函数用来做训练,参数prob,是svm_problem类型数据,具体结构定义如下:structsvm_problem//存储本次参加运算的所有样本(数据集),及其所属类别。{intn;//记录样本总数double*y;//指向样本所属类别的数组structsvm_node**x;//指向一个存储内容为指针的数组};其中svm_node的结构体定义如下:structsvm_node//用来存储输入空间中的单个特征{intindex;//输入空间序号,假设输入空间数为mdoublevalue;//该输入空间的值};所以,prob也可以说是问题的指针,它指向样本数据的类别和输入向量,在内存中的具体结构图如下: 图1.1LIBSVM训练时,样本数据在内存中的存放结构只需在内存中申请n*(m+1)*sizeof(structsvm_node)大小的空间,并在里面填入每个样本的每个输入空间的值,即可在程序中完成prob参数的设置。参数param,是svm_parameter数据结构,具体结构定义如下:structsvm_parameter//训练参数{intsvm_type;//SVM类型,intkernel_type;//核函数类型intdegree;/*forpoly*/doublegamma;/*forpoly/rbf/sigmoid*/doublecoef0;/*forpoly/sigmoid*//*thesearefortrainingonly*/doublecache_size;/*inMB制定训练所需要的内存*/doubleeps;/*stoppingcriteria*/doubleC;/*forC_SVC,EPSILON_SVRandNU_SVR,惩罚因子*/intnr_weight;/*forC_SVC权重的数目*/int*weight_label;/*forC_SVC权重,元素个数由nr_weight决定*/double*weight;/*forC_SVC*/doublenu;/*forNU_SVC,ONE_CLASS,andNU_SVR*/doublep;/*forEPSILON_SVR*/intshrinking;/*usetheshrinkingheuristics指明训练过程是否使用压缩*/intprobability;/*doprobabilityestimates指明是否要做概率估计*/}其中,SVM类型和核函数类型如下:enum{C_SVC,NU_SVC,ONE_CLASS,EPSILON_SVR,NU_SVR};/*svm_type*/enum{LINEAR,POLY,RBF,SIGMOID,PRECOMPUTED};/*kernel_type*/只需申请一个svm_parameter结构体,并按实际需要设定SVM类型、核函数和各种参数的值即