一. LIBSVM 软件包简介
LIBSVM 是台湾大学林智仁(Chih-Jen Lin)博士等开发设计的一个操作简单、易于使用、快速有效的通用SVM 软件包,可以解决分类问题(包括C- SVC、 n - SVC )、回归问题(包括e - SVR、n - SVR )以及分布估计(one-class-SVM 一类SVM)等问题,提供了线性、多项式、径向基和S形函数四种常用的核函数供选择,可以有效地解决多类问题、交叉验证选择参数、对不平衡样本加权(-w)、多类问题的概率估计等。
http://blog.tianya.cn/blogger/post_show.asp?BlogID=302961&PostID=6667238
二.LIBSVM 使用的一般步骤
1) 按照LIBSVM软件包所要求的格式准备数据集;
2) 对数据进行简单的缩放操作;
3) 考虑选用RBF 核函数2 K(x,y) e x y = -g - ;
4) 采用交叉验证选择最佳参数C与g ;
5) 采用最佳参数C与g 对整个训练集进行训练获取支持向量机模型;
6) 利用获取的模型进行测试与预测。
三.SVM函数
1.svmtrain
-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为特征(或者说是属性)数;
-r coef 0:设置核函数中的coef 0,默认值为0;
-c cost:设置C-SVC、ε-SVR、n - SVR中从惩罚系数C,默认值为1;
-n v :设置v-SVC、one-class-SVM 与n - SVR 中参数n ,默认值0.5;
-p ε :设置v-SVR的损失函数中的e ,默认值为0.1;
-m cachesize:设置cache内存大小,以MB为单位,默认值为40;
-e ε :设置终止准则中的可容忍偏差,默认值为0.001;
-h shrinking:是否使用启发式,可选值为0 或1,默认值为1;
-b 概率估计:是否计算SVC或SVR的概率估计,可选值0 或1,默认0;
-wi weight:对各类样本的惩罚系数C加权,默认值为1;
-v n:n折交叉验证模式;
Group = svmclassify(SVMStruct,Sample)
Group = svmclassify(SVMStruct,Sample,'Showplot',true)
eg.
svmStruct = svmtrain(xdata,group,'showplot',true);
species = svmclassify(svmStruct,[5 2],'showplot',true) % 对[5 2]进行分类
hold on;plot(5,2,'ro','MarkerSize',12);hold off %将[5 2]这个样本在图中标记出来
%二维特征向量的分类问题可以画图表示
四.交叉验证(CV cross validation)
1.hold-out method(合作的方法)
将所有的样本分为两部分,一部分作为训练集,一部分作为测试集,分别对SVM进行训练和测试。
优点:实现简单
缺点:这种分类方法实际上并没有用到交叉验证的思想,所得结果的说服力并不是很强的;准确率易受分组的影响。
分类器的性能指标:验证所得的分类器的准确率
具体实现:
[train,test]=crossvalind('holdout',groups); %随机分割数据集
返回值train和test均为代表不同样本的逻辑值
2.K-fold cross validation(K-CV)
将样本分为K组,每组都作为一次测试集,其余的K-1为训练集对SVM进行训练,然后进行测试;最后会得到K个模型、K个验证集的分类准确率的值,计算这些准确率的平均值,变化K的值,将准确率平均值最低的那个K作为最佳的分组,所得的model为最佳的分类器。交叉验证重复K次,每个子样本验证一次,平均K次的结果或者使用其它结合方式,最终得到一个单一估测。
在样本数目比较少的时候K一般从开始,实际操作更多的是从3开始。
优点:有效避免过学习以及欠学习的情况,所得的结果也比较有说服力。
具体实现:在训练的时候用到参数 -v
-v n : n-fold cross validation mode
当svm-train使用-v参数时,此时svm-train返回的不再是一个结构体model,而是交叉验证的精度,对于分类问题,返回的是交叉检验下的平均分类准确率;回归问题,返回的是交叉检验下的平均均方根误差(MSE)。
-v 交叉验证后会返回一个效率值,你找到这个效率最大的c和g
3.leave-one-out cross validation(留/缺一交叉验证法)
每次留一个样本作为测试集,其余的作为训练集进行训练,最后会得到N个model以及分类准确率,将这N个验证集的分类准确率的均值作为该留一验证法的性能指标
优点:所有的样本都参与训练,结果可靠;不受随机因素的影响,确保实验过程是可以被复制的。
缺点:计算成本高。