|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
这里的LIBSVM是一个由台湾大学林智仁(Lin Chih-Jen)教授等开发的SVM模式识别与回归的软件包,使用简单,功能强大,本文主要介绍其在Matlab中的使用。
% V X0 W8 y {. l
z4 O/ a& I5 ~ n% |9 w注意不是matlab自带的svm实现函数,自带的svm实现函数仅支持分类问题,不支持回归问题;而libsvm不仅支持分类问题,亦支持回归问题,参数可调节,功能更强大。: Q6 ~' e& R0 O, F# F( w5 k/ U
& s8 l' e. V& R% n# |6 W, N% y4 j
libsvm的配置很简单,只需要下载高级版本的matlab和libsvm,VC或VS编译实现很简单的,这里就不细讲了。
& `+ R1 K+ a/ t1 ]( q5 F( R6 W% i! _9 ~
两个步骤:训练建模——>模型预测
1 w, ^- q9 |; d8 ]; U: f/ q/ n+ M5 S. b8 u0 k
分类 model = svmtrain(trainlabel, traindata, '-s 0 -t 2 -c 1.2 -g 2.8');" A# z' z& y* ~7 l* Q& n
2 Z; P* s- n `* A z
回归 model = svmtrain(trainlabel, traindata, '-s 3 -t 2 -c 2.2 -g 2.8 -p 0.01');
; h: f) S; t6 l6 L/ V4 x. z& I! i/ W5 |4 o4 I0 r* a4 W y
参数说明:. C8 o- u" x, e5 j! W
& {; O7 T p) x2 R. C-s svm类型:SVM设置类型(默认0)/ U) D8 t1 n% a% ^* e i2 E
0 -- C-SVC
- |3 h, U6 X5 G {5 O 1 --v-SVC
1 |+ Q/ x1 r. _" [" l$ c# X! R, Z. A 2 – 一类SVM- h; F5 O. A$ w: \5 T, Z6 k0 z: w4 }
3 -- e -SVR4 I" ^" H9 t( n0 w: m. r4 V; j
4 -- v-SVR
- }0 a- k k, o# K4 f# n9 z# D) ]9 ?8 N- T9 v; q4 P9 A6 V
-t 核函数类型:核函数设置类型(默认2)+ v9 y% Z: n. u, \6 e# u% L+ F
0 – 线性:u'v- `$ g4 r( P0 [: t% U, R
1 – 多项式:(r*u'v + coef0)^degree9 O# n+ y) g! g% q2 i
2 – RBF函数:exp(-r|u-v|^2)3 i- R& X, I7 @8 e( z$ P1 |/ u
3 –sigmoid:tanh(r*u'v + coef0)7 |5 K1 `. X/ b5 o) E6 q! i0 Y
# [! h5 x# b2 A; `
-g r(gama):核函数中的gamma函数设置(针对多项式/rbf/sigmoid核函数)/ d9 x1 s! } T4 t7 M4 ?% k
t; x% W, {8 P8 o8 w( ~% [
-c cost:设置C-SVC,e -SVR和v-SVR的参数(损失函数)(默认1),惩罚系数- W! H$ I8 _! c$ ~8 D
$ s4 D2 Q N! P5 R1 z
-n nu:设置v-SVC,一类SVM和v- SVR的参数(默认0.5), f. p1 A3 Y; m
7 }4 G8 _3 {# d! A6 M3 ?-p p:设置e -SVR 中损失函数p的值(默认0.1)
& G* \4 w5 i6 Y; o$ b$ T! r' t& a0 _
-d degree:核函数中的degree设置(针对多项式核函数)(默认3)
/ K7 K) z% u+ Z* V0 H$ k# G/ [% b% t
-wi weight:设置第几类的参数C为weight*C(C-SVC中的C)(默认1)
* ?8 K" q( ` i( X1 e* R9 Z
2 N+ X7 i( C Q# v6 D4 E-v n: n-fold交互检验模式,n为fold的个数,必须大于等于2. ]( `% `, ?# N
4 P, v* o( X! T, \2 a; ~; I8 T
+ `: ?* P* ?5 a- w9 ~- h- E
2 K+ x4 |! C/ x: blibsvm使用误区----------------------, @( V; a. z8 ~0 ?' s: V4 E
% W$ N" j9 ? O/ |(1) 直接将训练集合和测试集合简单归一化到[0,1]区间,可能导致实验结果很差。6 i9 C' L# W. H. Z, w5 l3 ~" k
& G( Q7 {; n' _(2) 如果样本的特征数非常多,那么就不必使用RBF核将样本映射到高维空间。0 ]0 h. R0 Z {2 _
a) 在特征数非常多的情况下,使用线性核,结果已经非常好,并且只需要选择参数C即可。
9 `" h8 F; H& @* I8 ]b) 虽然说RBF核的结果至少比线性核好,前提下搜索整个的空间。
_+ D _; F$ h S, I+ L(3) 样本数<<特征数的情况:推荐使用线性核,可以达到与RBF同样的性能。
! l7 B- a6 \/ Q( a0 ]; N
: h4 O# b6 \# f8 T(4) 样本数和特征数都非常多:推荐使用liblinear,更少的时间和内存,可比的准确率。
3 C4 |8 x$ P+ c, e3 ]* l) u! F: G. {7 F$ s& M
(5) 样本数>>特征数:如果想使用线性模型,可以使用liblinear,并且使用-s 2参数
# Z% y- g) d. \* {3 {4 H
% S, R5 T9 M+ Z0 h6 O1 u- Y
; w& T9 T* \; f* v0 V3 A$ ~. F8 w" U" F% O3 X; O
; k6 h O1 H7 o) o
9 a$ G$ i8 y) f |
|