EDA365电子论坛网

标题: matlab中libsvm的svmtrain函数用法 [打印本页]

作者: uqHZau    时间: 2020-7-21 14:27
标题: matlab中libsvm的svmtrain函数用法
这里的LIBSVM是一个由台湾大学林智仁(Lin Chih-Jen)教授等开发的SVM模式识别与回归的软件包,使用简单,功能强大,本文主要介绍其在Matlab中的使用。2 _& |# q% U; |2 j& d

8 n, I' L9 ^. W/ g注意不是matlab自带的svm实现函数,自带的svm实现函数仅支持分类问题,不支持回归问题;而libsvm不仅支持分类问题,亦支持回归问题,参数可调节,功能更强大。
9 [8 z" R- Y5 s  {( b
+ v" {8 N2 T! @4 E, rlibsvm的配置很简单,只需要下载高级版本的matlab和libsvm,VC或VS编译实现很简单的,这里就不细讲了。6 \0 e( \. W* Q+ G+ E

. K& i- ^! J3 o: Y8 N% |两个步骤:训练建模——>模型预测
7 s' M. p' k* a! R! [$ M" h/ q5 {/ Z% F
分类  model = svmtrain(trainlabel, traindata, '-s 0 -t 2 -c 1.2 -g 2.8');
$ t1 M4 h! O) g# m5 s3 d2 f, E% j% O0 Q
回归  model = svmtrain(trainlabel, traindata, '-s 3 -t 2 -c 2.2 -g 2.8 -p 0.01');' d& ^9 w$ {: r! _& P. Q! L
8 f, \; B* U9 x; K( J  H
参数说明:4 O$ L, s( X" w3 [/ b  h

) \/ K6 _7 X3 r4 H, d-s svm类型:SVM设置类型(默认0)5 ^# X4 C6 G2 |: B
  0 -- C-SVC8 [; F! T/ T. b; f
  1 --v-SVC
2 e3 W1 T; M9 d- ?- L  2 – 一类SVM3 g7 s. P+ I) s  |/ Y8 I. b- {$ S
  3 -- e -SVR2 N' I1 U1 o+ t7 a5 V6 l
  4 -- v-SVR
$ i8 s) N% N/ p; {' j/ I+ j
; _6 _  V0 k# P* `-t 核函数类型:核函数设置类型(默认2)& v, v+ w$ C" ^
  0 – 线性:u'v; I9 B) K% z% X* {1 x0 R- t
  1 – 多项式:(r*u'v + coef0)^degree
0 T$ y8 V% o" g) ^; D  2 – RBF函数:exp(-r|u-v|^2)
: Q3 B) ^4 A* `, c. S  3 –sigmoid:tanh(r*u'v + coef0)
) N: @/ ?' o; t2 f
( V9 `) y: b0 K8 m( R9 m+ s-g r(gama):核函数中的gamma函数设置(针对多项式/rbf/sigmoid核函数)8 F9 d8 y$ d$ d, l: |

$ j+ {0 `' ~1 u7 S# L- I-c cost:设置C-SVC,e -SVR和v-SVR的参数(损失函数)(默认1),惩罚系数/ X8 L0 Y) s, x6 d" l: M
; o! N4 h2 }+ y( C8 v
-n nu:设置v-SVC,一类SVM和v- SVR的参数(默认0.5)
- j. l2 D% t% V0 p) ^; ?
, A* g& n( b1 |2 s- D! p& O5 ]-p p:设置e -SVR 中损失函数p的值(默认0.1)
5 d: C# @, i3 ^! [2 w' F
) e. J; e6 {  `! B' t4 x-d degree:核函数中的degree设置(针对多项式核函数)(默认3)2 b2 J% G3 A: q

! W! \/ C# J7 |* ?& \: S-wi weight:设置第几类的参数C为weight*C(C-SVC中的C)(默认1)2 F9 A, ]* X& Z6 Y% I
, E' g) W4 t) N9 f  N; c# c. k
-v n: n-fold交互检验模式,n为fold的个数,必须大于等于2
- d- |. M/ Y* J$ w8 Z+ Z* [# @5 j) w9 d

" ^3 \% p" Y* F9 I& `4 a7 o% l8 n* T0 ]; j, Z  Q0 V+ ~
libsvm使用误区----------------------
4 G8 g9 k/ b: W# x8 J: r4 k0 I- C3 \3 ]
(1) 直接将训练集合和测试集合简单归一化到[0,1]区间,可能导致实验结果很差。2 [6 U9 t1 c- n' m

3 U6 q2 J, u% H5 Z(2) 如果样本的特征数非常多,那么就不必使用RBF核将样本映射到高维空间。
& i8 h0 Q/ X# }2 V! ka) 在特征数非常多的情况下,使用线性核,结果已经非常好,并且只需要选择参数C即可。
0 M5 f* v) D: W5 h" V6 E3 Z# [' ^b) 虽然说RBF核的结果至少比线性核好,前提下搜索整个的空间。  ?! U4 j* Z% u* C/ U. ^
(3) 样本数<<特征数的情况:推荐使用线性核,可以达到与RBF同样的性能。: y' _1 b- w" e2 x; M) s) B
$ }% Z( X$ `* m# v6 i' w- E" y
(4) 样本数和特征数都非常多:推荐使用liblinear,更少的时间和内存,可比的准确率。4 S' l& K9 k0 C  r

0 U. x# U. ^  h7 U(5) 样本数>>特征数:如果想使用线性模型,可以使用liblinear,并且使用-s 2参数
& w; O, y" H3 M' Y' @5 F: [% E2 {. b) x" d% Z, h( S; Z
3 O6 W' N. E# D5 d, E  Z

  e1 u# `' C3 E; A0 E/ Y" W; u7 d4 X% d2 G! T5 W; s
4 _& |8 n* Y2 S" k

作者: CCxiaom    时间: 2020-7-21 15:23
matlab中libsvm的svmtrain函数用法




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2