一 运行
wang@linux:~/test/libsvm-2.84>./svm-train heart_scale
*
optimization finished, #iter =162
nu = 0.431029
obj = -100.877288, rho =0.424462
nSV = 132, nBSV = 107
Total nSV = 132
#iter为迭代次数
nu 是你选择的核函数类型的参数
obj为SVM文件转换为的二次规划求解得到的最小值
rho为判决函数的偏置项b
nSV 为标准支持向量个数(0<a[i]<c),nBSV为边界上的支持向量个数(a[i]=c)
Total nSV为支持向量总个数(对于两类来说,因为只有一个分类模型Total nSV = nSV,但是对于多类,这个是各个分类模型的nSV之和)。
并产生了一个train.model文件
wang@linux:~/test/libsvm-2.84>head -n 10 heart_scale.model
svm_type c_svc //所选择的svm类型,默认为c_svc
kernel_type rbf //训练采用的核函数类型,此处为RBF核
gamma 0.0769231 //RBF核的参数γ
nr_class 2 //类别数,此处为两分类问题
total_sv 132 //支持向量总个数
rho 0.424462 //判决函数的偏置项b
label 1 -1 //原始文件中的类别标识
nr_sv 64 68 //每个类的支持向量机的个数
SV //以下为各个类的权系数及相应的支持向量
1 1:0.166667 2:1 3:-0.3333334:-0.433962 5:-0.383562 6:-1 7:-1 8:0.0687023 9:-1 10:-0.903226 11:-1 12:-113:1
二 svmtrain的参数
svmtrain我们在前面已经接触过,他主要实现对训练数据集的训练,并可以获得SVM模型。
用法: svmtrain[options] training_set_file [model_file]
其中,options为操作参数,可用的选项即表示的涵义如下所示:
-s 设置svm类型:
0– C-SVC
1– v-SVC
2– one-class-SVM
3– ε-SVR
4– n - SVR
-t 设置核函数类型,默认值为2
0-- 线性核:u'*v
1-- 多项式核: (g*u'*v+ coef 0)degree
2-- RBF 核:exp(-γ*||u-v||2)
3-- sigmoid 核:tanh(γ*u'*v+ coef 0)
-d degree: 设置多项式核中degree的值,默认为3
-gγ: 设置核函数中γ的值,默认为1/k,k为特征(或者说是属性)数;
-rcoef 0:设置核函数中的coef 0,默认值为0;
-ccost:设置C-SVC、ε-SVR、n - SVR中从惩罚系数C,默认值为1;
-nv :设置v-SVC、one-class-SVM 与n - SVR 中参数n ,默认值0.5;
-p ε :设置v-SVR的损失函数中的e ,默认值为0.1;
-mcachesize:设置cache内存大小,以MB为单位,默认值为40;
-e ε :设置终止准则中的可容忍偏差,默认值为0.001;
-hshrinking:是否使用启发式,可选值为0 或1,默认值为1;
-b 概率估计:是否计算SVC或SVR的概率估计,可选值0 或1,默认0;
-wiweight:对各类样本的惩罚系数C加权,默认值为1;
-vn:n折交叉验证模式;
model_file:可选项,为要保存的结果文件,称为模型文件,以便在预测时使用。
默认情况下,只需要给函数提供一个样本文件名就可以了,但为了能保存结果,还是要提供一个结果文件名,比如:test.model,则命令为: svmtrain test.txt test.model
三 程序框架
http://blog.youkuaiyun.com/flydreamgg/article/details/4470121
3.1 train
model= svm_train(&prob,¶m);
svm_save_model(model_file_name,model);
svm_destroy_model(model);
a. svm_model是干什么的?
structsvm_model
{
svm_parameter param; //parameter
int nr_class; //number of classes, = 2 in regression/one class svm
int l; //total #SV 132
svm_node **SV; // SVs (SV[l])
double **sv_coef; // coefficients for SVs in decision functions(sv_coef[k-1][l]) 系数
double *rho; //constants in decision functions (rho[k*(k-1)/2]) 常数
double *probA; //pariwise probability information
double *probB;
// for classification only
int *label; //label of each class (label[k])
int *nSV; //number of SVs for each class (nSV[k])
// nSV[0] + nSV[1]+ ... + nSV[k-1] = l
// XXX
int free_sv; //1 if svm_model is created by svm_load_model
// 0 if svm_modelis created by svm_train
};
赋值
四 分界线的输出
参考文献
http://blog.youkuaiyun.com/flydreamgg/article/details/4470121
多类别时http://zhidao.baidu.com/question/561654193.html
Libsvm 框架 http://blog.youkuaiyun.com/flydreamGG/article/details/4470121
LibSVM中select_working_set函数 数学
http://blog.youkuaiyun.com/zhuyue3938199/article/details/7469868
关于libsvm 两类及多类分类情况下的model的参数的意义
http://wbxin2007.blog.163.com/blog/static/164314125201211901357344/
数据集
http://blog.163.com/crazyzcs@126/blog/static/129742050201010169304255/
这篇博客详细介绍了libsvm的SVM训练过程,包括SVM模型的参数、训练参数的意义,如svm_type、kernel_type、gamma等,并解释了模型文件的内容,如支持向量个数、判决函数的偏置项。还提到了svmtrain的用法及其参数设置,如C-SVC、ε-SVR的选择和核函数类型。此外,文章还探讨了程序框架和分界线的输出,提供了多类分类情况下的model参数解析。
1665

被折叠的 条评论
为什么被折叠?



