matlab中libsvm的svmtrain函数用法

这里的LIBSVM是一个由台湾大学林智仁(Lin Chih-Jen)教授等开发的SVM模式识别与回归的软件包,使用简单,功能强大,本文主要介绍其在Matlab中的使用。

注意不是matlab自带的svm实现函数,自带的svm实现函数仅支持分类问题,不支持回归问题;而libsvm不仅支持分类问题,亦支持回归问题,参数可调节,功能更强大。

libsvm的配置很简单,只需要下载高级版本的matlab和libsvm,VC或VS编译实现很简单的,这里就不细讲了。

两个步骤:训练建模——>模型预测

分类  model = svmtrain(trainlabel, traindata, '-s 0 -t 2 -c 1.2 -g 2.8');

回归  model = svmtrain(trainlabel, traindata, '-s 3 -t 2 -c 2.2 -g 2.8 -p 0.01');

参数说明:

-s svm类型:SVM设置类型(默认0)
  0 -- C-SVC
  1 --v-SVC
  2 – 一类SVM
  3 -- e -SVR
  4 -- v-SVR

-t 核函数类型:核函数设置类型(默认2)
  0 – 线性:u'v
  1 – 多项式:(r*u'v + coef0)^degree
  2 – RBF函数:exp(-r|u-v|^2)
  3 –sigmoid:tanh(r*u'v + coef0)

-g r(gama):核函数中的gamma函数设置(针对多项式/rbf/sigmoid核函数)

-c cost:设置C-SVC,e -SVR和v-SVR的参数(损失函数)(默认1),惩罚系数

-n nu:设置v-SVC,一类SVM和v- SVR的参数(默认0.5)

-p p:设置e -SVR 中损失函数p的值(默认0.1)

-d degree:核函数中的degree设置(针对多项式核函数)(默认3)

-wi weight:设置第几类的参数C为weight*C(C-SVC中的C)(默认1)

-v n: n-fold交互检验模式,n为fold的个数,必须大于等于2


libsvm使用误区----------------------

(1) 直接将训练集合和测试集合简单归一化到[0,1]区间,可能导致实验结果很差。

(2) 如果样本的特征数非常多,那么就不必使用RBF核将样本映射到高维空间。
  • a) 在特征数非常多的情况下,使用线性核,结果已经非常好,并且只需要选择参数C即可。
  • b) 虽然说RBF核的结果至少比线性核好,前提下搜索整个的空间。
(3) 样本数<<特征数的情况:推荐使用线性核,可以达到与RBF同样的性能。

(4) 样本数和特征数都非常多:推荐使用liblinear,更少的时间和内存,可比的准确率。

(5) 样本数>>特征数:如果想使用线性模型,可以使用liblinear,并且使用-s 2参数

你可能感兴趣的:(matlab)