|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
这里的LIBSVM是一个由台湾大学林智仁(Lin Chih-Jen)教授等开发的SVM模式识别与回归的软件包,使用简单,功能强大,本文主要介绍其在Matlab中的使用。) Q1 e+ S6 p( K3 g0 a k1 z* k& ~
1 ?# T: q( Q; X& j$ V$ I/ x
注意不是matlab自带的svm实现函数,自带的svm实现函数仅支持分类问题,不支持回归问题;而libsvm不仅支持分类问题,亦支持回归问题,参数可调节,功能更强大。, ~2 o, d# r9 y& Q( k9 @
: k, P# k) p9 B/ s" I5 i
libsvm的配置很简单,只需要下载高级版本的matlab和libsvm,VC或VS编译实现很简单的,这里就不细讲了。
2 R# `) }. g: G
1 h7 J4 [# y2 _- ] T5 q两个步骤:训练建模——>模型预测
. C3 }$ ^/ F' r6 w( J! d- c( A
. I5 t4 Y0 t# b分类 model = svmtrain(trainlabel, traindata, '-s 0 -t 2 -c 1.2 -g 2.8');4 y8 T2 [& X- ? i$ v
% c5 W9 x& W8 n% i, j回归 model = svmtrain(trainlabel, traindata, '-s 3 -t 2 -c 2.2 -g 2.8 -p 0.01');
# [, d5 v8 L- X: |, P0 y; {, v
+ C; N o8 R4 Z8 z7 k6 o参数说明:6 o5 M( S$ f4 x
, I7 O* X4 g3 s# c; y- ^
-s svm类型:SVM设置类型(默认0)
: C% {! ?' J: z. ?, s( L! | q; ]5 q% n 0 -- C-SVC
; O: b5 _( k( u8 U! F9 R 1 --v-SVC& n7 c8 D( q# W2 I I# N
2 – 一类SVM- n8 _+ [- ~7 h& L9 c
3 -- e -SVR
5 f6 r, V7 {/ v, _7 ~ 4 -- v-SVR
% v E) ~) _) t. o/ N- A+ K; j: `& C7 j5 F2 ]
-t 核函数类型:核函数设置类型(默认2)
6 N: v" g. a& ]; |" O7 P) Z 0 – 线性:u'v3 P; I1 ?$ H+ N
1 – 多项式:(r*u'v + coef0)^degree. C) y. v. U' G& n @1 i' {
2 – RBF函数:exp(-r|u-v|^2)
# a3 ~! X, u0 S 3 –sigmoid:tanh(r*u'v + coef0)* r$ d9 I. k' y% k
. R7 n, Z$ q8 H7 m& g
-g r(gama):核函数中的gamma函数设置(针对多项式/rbf/sigmoid核函数)- m4 j' y0 p4 v, \8 Q7 f6 V
5 U5 p: G; C5 @! F% R# X
-c cost:设置C-SVC,e -SVR和v-SVR的参数(损失函数)(默认1),惩罚系数9 n; |# u6 C" o ?1 R* I1 A
. [. d9 H2 l9 K3 [+ `3 n! J
-n nu:设置v-SVC,一类SVM和v- SVR的参数(默认0.5)5 C+ e4 O7 I; a5 ^
" F; j7 i1 V* A6 m, d! N
-p p:设置e -SVR 中损失函数p的值(默认0.1)) \$ Q( ^/ @2 k- l; S1 {
; q. W+ Q7 }4 G: ?9 ]- l! K& `
-d degree:核函数中的degree设置(针对多项式核函数)(默认3)6 V) i4 N9 W; c. H3 I9 s, L
% d) A$ \& ?9 Z: K
-wi weight:设置第几类的参数C为weight*C(C-SVC中的C)(默认1)* m8 Z, P+ H G2 B
; V9 n/ t W, F8 W5 e
-v n: n-fold交互检验模式,n为fold的个数,必须大于等于2* g" v) J( l* S. ^7 l0 P' P; f6 A
4 }" `* x& o; f" D$ S
/ q7 P7 f0 e6 r6 Q; v
4 g% s; P$ j' E) A9 V$ \" N
libsvm使用误区----------------------- _/ p% E3 H) x5 h
( Z2 S) }, l$ z: I0 ^/ g
(1) 直接将训练集合和测试集合简单归一化到[0,1]区间,可能导致实验结果很差。9 e8 r/ s; w9 s3 Z) I6 M$ y
0 K' v: @! I! }3 d% ?) w
(2) 如果样本的特征数非常多,那么就不必使用RBF核将样本映射到高维空间。, q- z# m: z p p, ]: i! [. D- h
a) 在特征数非常多的情况下,使用线性核,结果已经非常好,并且只需要选择参数C即可。
% P7 O- p9 U+ d' D3 Rb) 虽然说RBF核的结果至少比线性核好,前提下搜索整个的空间。
; Q0 n6 Y1 W0 f* T( G; V* e9 T(3) 样本数<<特征数的情况:推荐使用线性核,可以达到与RBF同样的性能。& d0 g) q" v* j; U4 Y% V2 Q' z9 G' m- i
9 a* h' r7 ]3 i( O* b ^(4) 样本数和特征数都非常多:推荐使用liblinear,更少的时间和内存,可比的准确率。# E! C) k$ [ j
; p/ p6 ~2 X/ B( ?
(5) 样本数>>特征数:如果想使用线性模型,可以使用liblinear,并且使用-s 2参数/ L; X& R) S" x) N! X* H
, K# O1 y9 N' v$ o& t/ `
9 N. G8 H( u' k" m( O R( L" V9 L9 h1 ?" |1 W7 D( @; h% C
& g4 B6 n8 {; h/ |+ G& N* v H$ @. K5 q0 h
- e- `1 e' z: M2 \& a7 Q |
|