|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
这里的LIBSVM是一个由台湾大学林智仁(Lin Chih-Jen)教授等开发的SVM模式识别与回归的软件包,使用简单,功能强大,本文主要介绍其在Matlab中的使用。: ?3 j- K2 }* M
; F3 w: h8 n6 B
注意不是matlab自带的svm实现函数,自带的svm实现函数仅支持分类问题,不支持回归问题;而libsvm不仅支持分类问题,亦支持回归问题,参数可调节,功能更强大。
( d+ z* ]$ G" }% y# k- F4 u ~
7 {$ P; s$ }; w" y2 F+ Glibsvm的配置很简单,只需要下载高级版本的matlab和libsvm,VC或VS编译实现很简单的,这里就不细讲了。. B' \' E: x, I
7 |% j. n6 E7 B* N+ w; I
两个步骤:训练建模——>模型预测
7 C) Q' ]& i8 y6 P- e p3 C* g$ I& q2 c1 s4 K* R
分类 model = svmtrain(trainlabel, traindata, '-s 0 -t 2 -c 1.2 -g 2.8');! _, c* ~) M# s9 l
/ M; B: y7 ?: E) j回归 model = svmtrain(trainlabel, traindata, '-s 3 -t 2 -c 2.2 -g 2.8 -p 0.01');
: E3 X& B! A! I; f/ g* h- r6 A
8 ]9 B8 N$ b* `0 g4 v5 ^参数说明:
! n0 I8 P$ G X; Y* s
9 S4 O$ B$ t; _) ~! g- z-s svm类型:SVM设置类型(默认0)
# a+ m: ]; E2 E' g/ |+ ~$ A: x 0 -- C-SVC& y5 G5 y j* [, U+ I
1 --v-SVC
" j5 e! m- \) v- Y 2 – 一类SVM
% S% }! g% o! z/ E0 e8 `4 ?$ _, o 3 -- e -SVR+ t# H. H* ~. { L5 d3 W7 D. d/ R
4 -- v-SVR7 |* m6 u! g% y) E9 d% I
6 D$ C& R: F5 f+ b
-t 核函数类型:核函数设置类型(默认2)
" i T$ U$ C4 H& P 0 – 线性:u'v+ ^ f0 e& o$ G( b1 |4 s) \' J3 C) d
1 – 多项式:(r*u'v + coef0)^degree
9 Z7 y, c* o7 M4 b. ]$ j) a$ R5 a 2 – RBF函数:exp(-r|u-v|^2)/ K7 I6 I3 @, y( d. ~
3 –sigmoid:tanh(r*u'v + coef0)! t4 u& U7 g% E7 K
( C1 y) n* j0 L/ Y
-g r(gama):核函数中的gamma函数设置(针对多项式/rbf/sigmoid核函数)- Z4 U- R8 v2 Q: t* p: t0 L) l
8 ^" z/ n5 g6 D3 z4 Z
-c cost:设置C-SVC,e -SVR和v-SVR的参数(损失函数)(默认1),惩罚系数0 R1 Q4 _; M+ S9 A W" n# g
" P `& A, X5 _0 n6 b1 i-n nu:设置v-SVC,一类SVM和v- SVR的参数(默认0.5)* ?3 s5 M/ H$ k
& d9 [( @$ f% t+ c1 Y F
-p p:设置e -SVR 中损失函数p的值(默认0.1)
; z' l. ] i( n
' U. r2 L0 o8 S( w1 g- q" y-d degree:核函数中的degree设置(针对多项式核函数)(默认3)
, R2 n7 D7 f! b/ O5 @4 W! _% [4 E( ^& `7 k8 B$ v
-wi weight:设置第几类的参数C为weight*C(C-SVC中的C)(默认1)
" [; I) w1 v# B. `. D7 C; u
. P8 ~, Y: i5 A; N. F8 x J-v n: n-fold交互检验模式,n为fold的个数,必须大于等于20 l8 q7 K# U. `: N$ n# N
# E/ V' Y5 Z! X5 _+ n
6 I h3 i( q" o! r4 E
4 V0 T! w: L6 Y' Glibsvm使用误区----------------------
* L2 e' l! l: H5 G, ^& @, D6 }* P8 X6 }- t' V( o) g+ x
(1) 直接将训练集合和测试集合简单归一化到[0,1]区间,可能导致实验结果很差。$ B, \$ D$ q: _) F3 T" L
+ M; C) \' y+ R% ]: b. ]1 t- R) I(2) 如果样本的特征数非常多,那么就不必使用RBF核将样本映射到高维空间。) F7 o l/ z S, V* C
a) 在特征数非常多的情况下,使用线性核,结果已经非常好,并且只需要选择参数C即可。) D8 f y. h/ F* v o
b) 虽然说RBF核的结果至少比线性核好,前提下搜索整个的空间。
+ O# Y' j$ T2 Q* [; X. e(3) 样本数<<特征数的情况:推荐使用线性核,可以达到与RBF同样的性能。2 P+ F) X* S$ v( x8 D1 f8 W
" Q2 E1 F2 }; J+ n7 W# ]/ F% ?(4) 样本数和特征数都非常多:推荐使用liblinear,更少的时间和内存,可比的准确率。
+ _2 Y" q, [2 C7 K' u# [* d. v1 s$ P* G/ `# Y0 L
(5) 样本数>>特征数:如果想使用线性模型,可以使用liblinear,并且使用-s 2参数( d8 Z1 L+ ^9 { U
+ [0 Z$ C2 ~7 ], g+ q
* h' O3 @8 N& h' R5 t2 V$ x' t+ {8 m2 `' g+ B" w- M
8 ?2 ^9 z) K' c( }% L5 G+ _' s
) g' i% `) j! U* o$ v0 F* s# q
|
|