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, r
libsvm的配置很简单,只需要下载高级版本的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 d
2 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-SVC
8 [; F! T/ T. b; f
1 --v-SVC
2 e3 W1 T; M9 d- ?- L
2 – 一类SVM
3 g7 s. P+ I) s |/ Y8 I. b- {$ S
3 -- e -SVR
2 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# x
8 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! k
a) 在特征数非常多的情况下,使用线性核,结果已经非常好,并且只需要选择参数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; A
0 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