|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
这里的LIBSVM是一个由台湾大学林智仁(Lin Chih-Jen)教授等开发的SVM模式识别与回归的软件包,使用简单,功能强大,本文主要介绍其在Matlab中的使用。9 W" D0 M0 L) S* [) @7 R1 f* n M
2 C" Z9 X+ W6 ?6 k5 z注意不是matlab自带的svm实现函数,自带的svm实现函数仅支持分类问题,不支持回归问题;而libsvm不仅支持分类问题,亦支持回归问题,参数可调节,功能更强大。
% g4 m; q6 \7 z6 F
5 ~/ A) v! G9 x9 i5 R7 glibsvm的配置很简单,只需要下载高级版本的matlab和libsvm,VC或VS编译实现很简单的,这里就不细讲了。% U7 O' a' b N7 h) t! F9 n
( I/ B/ b. z# R! v; x
两个步骤:训练建模——>模型预测$ k( P' Z8 _0 v4 E# A; j3 j
' S; Z6 `& g' }8 o7 t1 s8 C& c! ^分类 model = svmtrain(trainlabel, traindata, '-s 0 -t 2 -c 1.2 -g 2.8');2 ]/ y2 V! c [) T; ]$ [
6 y8 a: ~5 q% @7 b1 r
回归 model = svmtrain(trainlabel, traindata, '-s 3 -t 2 -c 2.2 -g 2.8 -p 0.01');* _* W g- I2 @: \$ n5 W
$ Z' a; ^5 q3 w- u: k+ o$ g8 ^参数说明:
* B& W2 ~9 I4 n0 z: M: t! ^4 u% [2 O) z2 m6 T- {( ]
-s svm类型:SVM设置类型(默认0)
, q3 \5 ]7 A5 y, l2 w/ w t. H 0 -- C-SVC
2 I+ N7 F1 P) X7 ?5 g* B 1 --v-SVC5 d" z! J _3 z9 A0 P& u' n
2 – 一类SVM0 c( T$ C4 g& n% J2 F4 x1 e
3 -- e -SVR
( Z* w4 F3 f! \6 @ 4 -- v-SVR, W$ [4 u7 g$ `6 U
- U$ G6 V7 S. G, d- b-t 核函数类型:核函数设置类型(默认2)
. G f0 S y5 F7 Q 0 – 线性:u'v
. `% H' G, [0 ~3 @. C 1 – 多项式:(r*u'v + coef0)^degree$ d' t7 _' C! [$ E$ W. w
2 – RBF函数:exp(-r|u-v|^2)1 K: w1 a" e5 U7 T: u' x! x8 _
3 –sigmoid:tanh(r*u'v + coef0)2 h+ e, o4 v2 C o, v" M
% v% I( N# [/ S+ ]' y+ L-g r(gama):核函数中的gamma函数设置(针对多项式/rbf/sigmoid核函数)
. J3 b3 u# L7 r( |' |, s$ J! V/ A3 {: v! E
-c cost:设置C-SVC,e -SVR和v-SVR的参数(损失函数)(默认1),惩罚系数
R* _& E1 ?0 g* W( q7 Q
0 Y3 X" ?& F$ l! d: H5 {-n nu:设置v-SVC,一类SVM和v- SVR的参数(默认0.5)$ |0 _4 j) y3 C3 U ~$ T3 W% f6 S
0 X) x8 ^* \. q8 i# s: b
-p p:设置e -SVR 中损失函数p的值(默认0.1)6 I! y- z; r; G5 N
- t- u+ Y' y5 i-d degree:核函数中的degree设置(针对多项式核函数)(默认3)5 b* A' i6 }5 P; Q F! ^" ^
1 d. f# H/ u8 J! v! y
-wi weight:设置第几类的参数C为weight*C(C-SVC中的C)(默认1)
9 p& f# x* r. J0 a7 S; [9 V& Y; D
0 D- Y. S/ z% d-v n: n-fold交互检验模式,n为fold的个数,必须大于等于26 R" P7 r% a% r3 c ^8 F6 E5 U
3 U2 y. J- u6 X4 E7 {: a
5 K+ q4 B0 y; x9 b/ v# a& ~& G3 ?, F+ d9 K, w9 M1 { l
libsvm使用误区----------------------8 [; d# o: B" w( q1 A. r
* N8 U( }8 F& r0 i
(1) 直接将训练集合和测试集合简单归一化到[0,1]区间,可能导致实验结果很差。
- h( X$ z3 {2 q+ n
' _1 M- L5 D/ o(2) 如果样本的特征数非常多,那么就不必使用RBF核将样本映射到高维空间。
( R6 X+ D& j5 {+ Ha) 在特征数非常多的情况下,使用线性核,结果已经非常好,并且只需要选择参数C即可。
7 G( z& w$ x8 v, e5 ~8 T* Xb) 虽然说RBF核的结果至少比线性核好,前提下搜索整个的空间。- J, G+ v& u$ P
(3) 样本数<<特征数的情况:推荐使用线性核,可以达到与RBF同样的性能。6 I! Y2 |9 r7 s& Y h- L% ?' q( O
. @, w: s* @7 D2 F5 b6 t- U(4) 样本数和特征数都非常多:推荐使用liblinear,更少的时间和内存,可比的准确率。; \% \$ M* t0 p1 {! e F
U- Z( u; R# ?9 O. B
(5) 样本数>>特征数:如果想使用线性模型,可以使用liblinear,并且使用-s 2参数
/ F7 f2 v& E: L6 G+ R
$ w# t _/ E0 k* _5 m! K9 \- e4 C
2 |( v7 h6 p! ^0 Z9 x4 d9 D3 c4 p& |
! Q3 Q9 ^" y: u% l) O3 T+ W& S- O+ k+ S
|
|