|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
这里的LIBSVM是一个由台湾大学林智仁(Lin Chih-Jen)教授等开发的SVM模式识别与回归的软件包,使用简单,功能强大,本文主要介绍其在Matlab中的使用。( w! `$ H& Q! z2 H: }
! h+ u1 V% o( ?( _' r" T# J7 {% V
注意不是matlab自带的svm实现函数,自带的svm实现函数仅支持分类问题,不支持回归问题;而libsvm不仅支持分类问题,亦支持回归问题,参数可调节,功能更强大。
7 Y6 C' y; h( @! d$ Q( K
& w# v+ z, f0 G7 Qlibsvm的配置很简单,只需要下载高级版本的matlab和libsvm,VC或VS编译实现很简单的,这里就不细讲了。& Z4 _: K6 j6 U
) {- `5 H. m# D4 J7 i3 \两个步骤:训练建模——>模型预测* b( p6 j a" d& f& {$ j: b" s
& \ N$ h0 w8 g1 T. H分类 model = svmtrain(trainlabel, traindata, '-s 0 -t 2 -c 1.2 -g 2.8');. x/ j& Y. M- f
8 V5 b$ g: K; O% U; e+ Y
回归 model = svmtrain(trainlabel, traindata, '-s 3 -t 2 -c 2.2 -g 2.8 -p 0.01');" v) [# b8 R d
* S& D, t! t4 [4 {% I参数说明:
1 L: i1 p) Z3 y2 ^6 k" W
' b$ c" e) W7 e. l8 l' v4 L-s svm类型:SVM设置类型(默认0)% a8 T: r4 f. n+ o( `# m0 l
0 -- C-SVC
1 C$ d( u R, [6 m5 X 1 --v-SVC
& _0 O8 ]( e! Z' I 2 – 一类SVM5 ^7 k1 A' \/ _- I {
3 -- e -SVR
# C. e: x: f1 |, H( T9 X 4 -- v-SVR
% w6 x6 l: O9 S# ^
1 I' |/ y6 G1 X-t 核函数类型:核函数设置类型(默认2)
6 ?# w- J- n! V6 H) M& H 0 – 线性:u'v
6 l' [8 u3 [9 b6 ]. |$ K 1 – 多项式:(r*u'v + coef0)^degree
1 r! O. t N4 Y2 K: v 2 – RBF函数:exp(-r|u-v|^2)" n% `$ Q. p% k h, a3 |0 L* l- {- q
3 –sigmoid:tanh(r*u'v + coef0)* ], w2 }) L z. y& S3 }
; S" J: q& o1 ?; T
-g r(gama):核函数中的gamma函数设置(针对多项式/rbf/sigmoid核函数)
7 {7 ^1 V! S3 r0 v* }8 q8 ?
* w$ O6 \, Z/ S$ p$ {1 V. ~-c cost:设置C-SVC,e -SVR和v-SVR的参数(损失函数)(默认1),惩罚系数6 i) b* B C5 Q1 M1 E3 D+ d) J: u$ {
2 ^) ^7 i; R x/ J4 S% s
-n nu:设置v-SVC,一类SVM和v- SVR的参数(默认0.5), y- H5 I" K% b
4 i5 J( y0 G3 M% \" c4 z6 d
-p p:设置e -SVR 中损失函数p的值(默认0.1)/ Y! R% c5 v4 b& A/ U5 V7 _
3 i" u' }3 i @7 k9 r6 o F-d degree:核函数中的degree设置(针对多项式核函数)(默认3)) \7 k: F$ L9 q1 f( u
3 L( o8 N9 h4 Z; E: e-wi weight:设置第几类的参数C为weight*C(C-SVC中的C)(默认1)
) c3 w9 A0 ]$ y* f# H) a- Z3 o7 Z/ `% a* M/ ]6 `
-v n: n-fold交互检验模式,n为fold的个数,必须大于等于2& [8 d5 P& [8 X$ k( C
7 \6 c) N' O2 ~
7 D7 n# x, {3 P7 I$ x [3 y) d( I: f# L0 i) Z
libsvm使用误区----------------------* J: o4 g& ^% e$ d& B
( I1 F l7 c$ ?: d(1) 直接将训练集合和测试集合简单归一化到[0,1]区间,可能导致实验结果很差。
7 u# M8 P- \3 k1 W
$ F) c. m; S; l(2) 如果样本的特征数非常多,那么就不必使用RBF核将样本映射到高维空间。$ |- g' v' Y7 a) f8 K
a) 在特征数非常多的情况下,使用线性核,结果已经非常好,并且只需要选择参数C即可。( m5 L( G; C" a+ C: L
b) 虽然说RBF核的结果至少比线性核好,前提下搜索整个的空间。+ k0 ~/ K6 ?% L9 v
(3) 样本数<<特征数的情况:推荐使用线性核,可以达到与RBF同样的性能。
' V. r" w% p) W( E8 P% Z
8 [% X% R8 K# g$ j# X( x+ s; B& O(4) 样本数和特征数都非常多:推荐使用liblinear,更少的时间和内存,可比的准确率。
" J7 H) e+ X4 D* m1 j% y' i3 Q1 K6 ?) K3 J$ ~+ q5 j. [
(5) 样本数>>特征数:如果想使用线性模型,可以使用liblinear,并且使用-s 2参数9 {1 a- p. v+ _
+ F; L$ Y: _8 x5 z
+ b$ E9 i- u0 ^" ^4 R$ R2 G* R+ z1 o+ W( g5 A3 Y7 K. x" U( _
: F5 ~) b2 N- r* O; Z- W
. B& V" C5 t# I5 c/ f' l# D& o |
|