|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
这里的LIBSVM是一个由台湾大学林智仁(Lin Chih-Jen)教授等开发的SVM模式识别与回归的软件包,使用简单,功能强大,本文主要介绍其在Matlab中的使用。
3 z; Y5 J. a, w, @ @7 X
M. l m6 f; E# `! F注意不是matlab自带的svm实现函数,自带的svm实现函数仅支持分类问题,不支持回归问题;而libsvm不仅支持分类问题,亦支持回归问题,参数可调节,功能更强大。9 c2 y/ {! _" D3 J& x
5 N& @7 n$ E( X: W" _" o
libsvm的配置很简单,只需要下载高级版本的matlab和libsvm,VC或VS编译实现很简单的,这里就不细讲了。
9 } s) _- o9 |0 J! x# v! K+ j. }" l4 p" k" q
两个步骤:训练建模——>模型预测2 ~. U$ Z/ ?, }
2 F; Z( L7 g! Q! D+ Z' |分类 model = svmtrain(trainlabel, traindata, '-s 0 -t 2 -c 1.2 -g 2.8');
1 v5 J' ?6 B5 S9 d& O9 _* f
9 w5 Z, @9 {8 h \/ t3 A! p回归 model = svmtrain(trainlabel, traindata, '-s 3 -t 2 -c 2.2 -g 2.8 -p 0.01');
, R! h9 W8 H) k8 g- A0 X$ h* \: ?# y6 m6 V- S
参数说明:2 ~! ]( k* N3 b$ ?7 s
5 _1 |& J- D( |-s svm类型:SVM设置类型(默认0)
, W& K1 N, `2 ~( \! ] 0 -- C-SVC
" y4 k0 `" }1 e b" D4 E 1 --v-SVC
1 O( f& p3 X" }0 C, \+ G 2 – 一类SVM3 q) L+ \2 ]1 e) y$ v, [( x
3 -- e -SVR
$ Q2 k$ r' [5 F 4 -- v-SVR
6 q8 \* ?1 i9 F) e1 \; p+ p. c0 z7 S% V& T6 [, V
-t 核函数类型:核函数设置类型(默认2)- s; y4 X5 G+ y7 I
0 – 线性:u'v
& C4 @/ H! M) V6 F6 o$ i8 M9 i 1 – 多项式:(r*u'v + coef0)^degree
+ _5 U' h/ b9 r' q 2 – RBF函数:exp(-r|u-v|^2)7 {0 t7 A% s, x$ }: m$ r( E
3 –sigmoid:tanh(r*u'v + coef0)
* P. y; g/ t1 y2 o9 Q+ Q! ~) V1 L' z% t8 n: H( b
-g r(gama):核函数中的gamma函数设置(针对多项式/rbf/sigmoid核函数)2 m( z+ G" E" N* C! g
* H8 g, p& K, R' L8 c, \. m
-c cost:设置C-SVC,e -SVR和v-SVR的参数(损失函数)(默认1),惩罚系数
. Q V' w/ U# v' r9 V% s5 i: T- G* y8 D/ d* q+ Y' g4 e; a
-n nu:设置v-SVC,一类SVM和v- SVR的参数(默认0.5)3 }) W* W2 l) P% b) w# @
7 v# `( E0 D9 b- K; D8 ^
-p p:设置e -SVR 中损失函数p的值(默认0.1)
6 P" |; _' X2 L5 O# p; F8 e/ T/ L
-d degree:核函数中的degree设置(针对多项式核函数)(默认3)* w% I9 D: Z9 b$ [/ d0 K
, z* X `( r& |) ]; t- E+ ~% }-wi weight:设置第几类的参数C为weight*C(C-SVC中的C)(默认1): n" f6 s* Q8 D) \
4 ~) R6 X* a. V-v n: n-fold交互检验模式,n为fold的个数,必须大于等于2
+ A* Q' c. S0 J5 U y! p
7 C/ I- M# a0 h+ [1 n* `$ |, D
2 t5 l( H; C1 t* v$ k3 ?4 E, } L3 \% A/ X
libsvm使用误区----------------------) t" O" K( H+ h* ^& B z# y. ]* x
& x, `3 ~; C2 i [* b( u) s
(1) 直接将训练集合和测试集合简单归一化到[0,1]区间,可能导致实验结果很差。2 d+ \8 Z+ r1 r: Q! i0 G
( `6 Q6 p* q0 r( f6 A& J" v* S1 J( `(2) 如果样本的特征数非常多,那么就不必使用RBF核将样本映射到高维空间。& @+ \) l. `+ }1 N
a) 在特征数非常多的情况下,使用线性核,结果已经非常好,并且只需要选择参数C即可。7 ~, V+ u$ x# T: d% `, f% P( h
b) 虽然说RBF核的结果至少比线性核好,前提下搜索整个的空间。
6 z- l7 X- { {/ y" D% D, ?; P(3) 样本数<<特征数的情况:推荐使用线性核,可以达到与RBF同样的性能。
+ |6 O* v0 v& @" q' U' M: D" u- T0 i& j! d
(4) 样本数和特征数都非常多:推荐使用liblinear,更少的时间和内存,可比的准确率。- ?1 i8 {4 @0 g4 S7 h8 ] A3 k6 G
. F' `$ @8 d2 r(5) 样本数>>特征数:如果想使用线性模型,可以使用liblinear,并且使用-s 2参数
- b& W ?4 A1 _: d5 j% G3 Z! [- K# E) m2 c0 M1 v, M& B' K
' B7 u7 `6 S5 D4 ^+ y6 C
" b/ M8 c& x# [: U6 o
u" R. M" m, Z# u& a9 O9 Z; ?( Q
2 U2 I$ j7 r- A/ o |
|