|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
这里的LIBSVM是一个由台湾大学林智仁(Lin Chih-Jen)教授等开发的SVM模式识别与回归的软件包,使用简单,功能强大,本文主要介绍其在Matlab中的使用。
/ r4 G5 A+ P* ?% y0 s# i* X+ d; B6 x+ W
注意不是matlab自带的svm实现函数,自带的svm实现函数仅支持分类问题,不支持回归问题;而libsvm不仅支持分类问题,亦支持回归问题,参数可调节,功能更强大。4 q) i- d* P; u: ?: D9 v) d
0 x+ x% ?: u: ]! t# w0 V2 j# I
libsvm的配置很简单,只需要下载高级版本的matlab和libsvm,VC或VS编译实现很简单的,这里就不细讲了。+ f0 W, l3 r; p: U ^
' u9 x$ H8 k) w- R
两个步骤:训练建模——>模型预测
' {# ]' i( B/ k. b& V D- I+ B* m6 F5 f
分类 model = svmtrain(trainlabel, traindata, '-s 0 -t 2 -c 1.2 -g 2.8');
/ s4 t8 G6 c s; [
& x- P( n5 d' s+ y* {4 U# s. P0 C回归 model = svmtrain(trainlabel, traindata, '-s 3 -t 2 -c 2.2 -g 2.8 -p 0.01');5 P7 K @( H Q, U% ?
/ v, @0 ]4 x8 m2 J4 j' E
参数说明:' `$ g7 A; a4 J% Q
5 \+ k1 V( C& R
-s svm类型:SVM设置类型(默认0)+ S$ A4 D Q& Q' a w: u/ @9 j& D
0 -- C-SVC9 g. [% M9 N: {; }* N- {
1 --v-SVC
+ J$ \# c) o x 2 – 一类SVM% s5 i: ]$ b; F* H3 _+ K
3 -- e -SVR& ?9 D5 z) h/ ~$ l
4 -- v-SVR
1 V/ r7 t( ~: u! y9 M) \6 e- k" r6 ~, R4 w3 c# g2 `( r
-t 核函数类型:核函数设置类型(默认2)% P+ R8 g) N7 J. n) s$ w" {) M
0 – 线性:u'v+ b7 G' r2 K% I5 q5 `$ y( w( e
1 – 多项式:(r*u'v + coef0)^degree& ^/ ?) a7 n* H z' _
2 – RBF函数:exp(-r|u-v|^2)
7 j' A4 J% O0 b$ o 3 –sigmoid:tanh(r*u'v + coef0)
/ Q8 j# W. V: @1 ^, p2 s8 ?5 D/ R- r9 ^
-g r(gama):核函数中的gamma函数设置(针对多项式/rbf/sigmoid核函数)
/ \ R4 O: H4 x6 Y' d, T, t; T3 s9 U; F
0 y: ~9 ^6 \$ _! C-c cost:设置C-SVC,e -SVR和v-SVR的参数(损失函数)(默认1),惩罚系数$ C% W% v Z& ^' F- z0 U+ E
, |: J- t+ E6 p/ Z" o5 H/ q-n nu:设置v-SVC,一类SVM和v- SVR的参数(默认0.5)0 g6 d6 R. s$ a" Z/ k
* X. c0 x! K2 d8 i7 y6 r& J
-p p:设置e -SVR 中损失函数p的值(默认0.1)$ L* H9 M+ j1 a
# Z a, A2 f* @ g-d degree:核函数中的degree设置(针对多项式核函数)(默认3)
2 I( Z$ u) r* h" ]; R
7 k; v1 H v2 H6 W-wi weight:设置第几类的参数C为weight*C(C-SVC中的C)(默认1)
* e6 |8 N% J: J2 B% K/ [
8 r$ P+ x8 ?4 w J& o9 n% b-v n: n-fold交互检验模式,n为fold的个数,必须大于等于2
7 ^: ?% M0 `7 y+ y
5 t; Q' L7 K9 E" b, G) g/ R" D+ c" P
" j& o+ ?3 `& l& L5 M) m
libsvm使用误区----------------------
4 g, [% K2 e0 ]$ ~% u8 c" e6 I" e; R1 p+ D4 d8 ~) s* Z+ {
(1) 直接将训练集合和测试集合简单归一化到[0,1]区间,可能导致实验结果很差。& j8 `1 u0 v# B* b9 K0 L
4 f# I' c$ h8 `(2) 如果样本的特征数非常多,那么就不必使用RBF核将样本映射到高维空间。
% B+ G0 S- ]" W4 l0 L) Qa) 在特征数非常多的情况下,使用线性核,结果已经非常好,并且只需要选择参数C即可。$ n0 K6 J& b1 v0 d' y( [
b) 虽然说RBF核的结果至少比线性核好,前提下搜索整个的空间。
9 Y8 O2 @& q: A(3) 样本数<<特征数的情况:推荐使用线性核,可以达到与RBF同样的性能。
5 V1 N# @( t! K# z X/ X" b$ s7 X0 k9 }' t0 X- X
(4) 样本数和特征数都非常多:推荐使用liblinear,更少的时间和内存,可比的准确率。
( i |& H+ X/ [, O+ x9 y6 ~& p3 }6 V4 e
(5) 样本数>>特征数:如果想使用线性模型,可以使用liblinear,并且使用-s 2参数9 W- J- X( ^6 Z! W! R2 V
( F4 E2 V# r+ Y) H$ l% W/ D, W$ W) { d3 V; r
& z/ W* n4 [6 j( C( B% _
) Y! j6 b: @7 P$ _) y
5 z. `# h% }2 Z. |' A |
|