|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
经过几天的学习,终于可以正常的用libsvm工具箱咯……工具箱很强大但是刚开始总是错误百出啊!在遇到问题时google了一下在网上总能找到很多解决方法。。。我总结的是能解决我当时的问题的那些~
3 C8 L) D% P5 A- L# Y
* j$ b) o# h3 H# a首先附上使用过程
2 N1 F* ?0 Q7 F: U- C9 {# L$ y7 \7 |9 |& J {
step1: 输入>>mex -setup( L! G7 z# i0 P9 { r* x
step2:3 Y* n- d0 Q2 }/ ~7 L6 q
Please choose your compiler for building external inteRFace (MEX) files: 4 K$ u1 u3 E4 u2 _: ]$ `
Would you like mex to locate installed compilers [y]/n? 是否让matlab自动检测编译器 可以选y
& c$ C# M& S& H6 V* Y* L8 _ step3:' s* J2 l Y9 ~
Select a compiler: 1 y: F$ x* `% g! w7 P% m) T8 A" |
[1] Lcc-win32 C 2.4.1 in E:\PROGRA~1\MATLAB\R2010a\sys\lcc 6 T# N' L2 K1 J5 b. Z* I8 K9 r
[2] Microsoft Visual C++ 2008 SP1 in e:\Program Files\Microsoft Visual Studio 9.0 ) c0 L0 M/ V- ?) N' a
[3] Microsoft Visual C++ 6.0 in E:\Program Files\Microsoft Visual Studio
4 T3 b7 }3 J" |' ^6 H [0] None
6 M' @% k8 N" J [1]matlab 自带的不能用 其他的如果有的话 就相应的选择就行 8 R0 G7 a9 C5 ^& d V2 s
我选择了 【2】2 P( y6 M1 c: N1 {: ^5 l+ \
step4:& n* e& x- I4 O5 F: f0 U
Compiler: Microsoft Visual C++ 2008 SP1 & o$ E( y9 X! @% @$ k0 D& n1 p
Location: e:\Program Files\Microsoft Visual Studio 9.0
$ \& Z; M/ Y' R% Z% P/ w Are these correct [y]/n? 路径是否正确 是的就选y
3 r" ^$ N+ A; V1 V: Z 如果没有自动检测出来依次的话step2就选【n】就可以,再顺着提示下来。
. n% W7 C6 l% N/ F( R! W& v
* @% V4 O, x4 [7 @7 i0 V0 z) IStep 5
, z$ L8 c9 P' q" w& f8 a4 P: P) T
- c0 E6 R3 g7 y$ L, WMake5 q9 O( |' k5 k
/ P/ L9 Q( m8 H9 M! d% p v* j后面就是:
+ d4 d- x, |# ]0 x( h3 ^$ A& A. _, N+ \0 |9 i! c9 \4 y
load heart_scale.mat(此处无分号)
8 C7 |2 E; {5 w/ B5 d: R4 Z8 |! t T g9 }6 S" N: C# L N, j
train = heart_scale_inst;" G8 x0 E" w$ `/ H# j3 i
9 E; d3 l; A5 P d/ z9 M2 y" Qtrain_label=heart_scale_label;
$ C- H7 r; Q1 f0 X- Q+ M* s2 @6 m. m4 {: `" x. p
test=train;
' k+ B# Q- J% e3 w/ ~" P3 L( ]7 b* q! ^- `/ M5 O2 V, k8 _
test_label=train_label;
" E# T y. H) D+ R
# K, n$ A( i M5 w4 R' pmodel=svmtrain(train_label,train,'-c 2 -g 0.01');
# w% p7 t% W- ]* |" F! D1 o
: y: i3 _( }' z[predict_label,accuracy]=svmpredict(test_label,test,model);5 L* P: u5 _/ F) \, ?: R
2 R) }$ t7 {# I# A/ P
/ A7 e8 l& T; h& J# b
, B3 y& {4 a# N0 H% d6 a6 `- m0 X11 d V' f. Q7 K
3 e4 V; }: w5 S+ D( ]& Zmake这一步报错+ i4 b) w2 M* g
, @0 S+ Q' I9 I9 M: O
Error using mex (line 206)
& s/ ~* B% }( M K4 r
- v$ M+ f0 d0 R% [+ MUnable to complete successfully.
* I8 W0 Z1 K+ M
- l+ k' F1 t5 a" y% p; s: JError in make (line 1)! S: W* {5 x6 ] u
8 H& W9 _8 h+ d9 C% This make.m is for MATLAB and OCTAVE
8 y6 M4 V4 D4 B
- } H0 C" P/ `1 i4 n2 yunder Windows, Mac, and Unix9 Y5 ~. g6 V3 J- `( n5 w$ G
6 n9 S- @. b2 L7 q在尝试了许多方法后,竟然是换了低版本的libsvm,搞定了~~~. |0 ?' h0 I& \5 c/ _# u4 s9 }
9 G' g8 t, l+ H. ~% D' B
另:Libsvm各个版本http://www.csie.ntu.edu.tw/~cjlin/libsvm/matlab/oldfiles/ g( c4 r4 t+ j' F) J, N. U
: i7 B, L) d7 J9 q: B: u
, ?+ @% u$ K- |( `
3 p- x B7 l; @4 m6 c+ O2 c; ?2 还有一个make这一步出现的错误
" a# v6 {' b. d5 g- T) M; L$ l+ ]) U* J% W: }
Undefined function or variable 'make'
) \5 w9 r. q$ r# j, E2 l4 ^0 I1 V8 X% z$ F7 d2 Q' e9 h
解决方法为:& p; w: n& r2 W" |4 q
; E) t% \1 `" e& z设置matlab的path
# \, L' D9 J3 x4 u* g& p0 {0 G) r; @
: J, D. v( m8 a: E3 F2 L 方法file->set path->set sub path(为什么要sub path因为只有这样才能将你要加的文件目录的子文件都加进去,否则只是加了你所要加的那个目录。)8 G1 S3 c8 C- V9 Z# U6 D. e
5 O; [ {# m# U9 H
还要记得把current folder 设为matlab所在的路径
5 y+ F% i1 G/ W" b
6 ^, @- c/ J# ^# k3 输入load heart_scale.mat;报错" v& _9 Z; d) \% B
5 s9 D% a# R6 N
Error using load
" u- y( S9 ]: Y) D4 T, w; a# ]) g! C, z! o8 R
Unable to read file heart_scale.mat;: No, ]. u/ P2 W& p. b0 M" S' Y
& h, \1 A. `8 z# f \5 Lsuch file or directory.; t- d/ ^8 U" H4 ?$ e# ?8 U
7 g) s# e! V1 \. F% O9 c这个问题是这样的,不应该有最后那个; 去掉分号就可以了。。。(粗心所致。。。不知道别人会不会像我这样。。。), K# V9 H' s5 P7 N
# q- q# v1 i! p
4
2 q0 W4 ~4 }" U* y9 h O, k& J5 G; P$ p, U9 Q* H5 W
load 这一步报错
; ~7 ~ a' m& y C& G! S2 @! H
# O6 q8 @/ W* ]4 `, v. U- A3 J$ M% `??? Error using ==> load0 ^) b* Z) k+ q/ K6 r. o
Number of columns on line 2 of ASCII file D:\Program
' u( A: X1 X' E/ ^Files\MATLAB2010\matlab\toolbox\libsvm-3.13\heart_scale1 G1 J0 R y# u" s1 g& Z
must be the same as previous lines.
- M* F( }. _: r8 u& B' M官方现在不给heart_scale.mat,给的都是VC++下的格式。一些旧版本的工具箱还可以找到mat文件,新版本都没有了。所以load会报错:heart_scalemust be same as previous lines). I6 V$ n$ @: |/ Z* h1 u
一种解决方法是:使用给的一个函数,转化数据。此函数为libsvmread()5 D4 o! p3 o R# k
使用如下: [label_vector, instance_matrix] =libsvmread('filename');: Y/ C4 o7 D2 h/ q9 `$ w; K
此处为了跟官方统一名称可以[heart_scale_label,heart_scale_inst] =libsvmread('heart_scale');. k9 k" }% i0 V. n- E- h b. F
注意:由于heart_scale在libsvm-3.11目录下,不是在matlab下,所以直接用libsvmread命令会报错,要买改变当前路径,或者使用[heart_scale_label,heart_scale_inst] =libsvmread('../heart_scale');../代表返回上层路径。# i5 h+ A$ e$ A
但是最简单的方法是,找到旧版本工具箱的mat文件添加上即可!
* s, h4 x6 U. q6 [- u% D2 B我把需要的mat文件分享在我的网盘中了4 y4 S7 _, D$ R K Z5 [
http://pan.baidu.com/share/link?shareid=127727&uk=2165237662& q x6 Y3 m$ [% b
7 {& k1 m& \5 ?
* Q; L5 t1 b" x- r3 B8 [5 u+ w; p0 L6 ~; ~
4 K& L) W* f1 j q# g3 d' X5 到svmtrain这一步报错6 g$ o$ Z" q$ i* i& E! j3 W# t
& H8 d1 C3 z+ W* T5 [, P6 [??? Errorusing ==> svmtrain at 172# M8 h5 x W9 A
* D. q' _% P! j! }3 f0 c
Group mustbe a vector.
6 a$ L% q0 I$ `; w( l& k* ]是因为在添加工具箱的时候没有添加完全,file-Set Path-Add with Subfold ...添加好路径就可以了, o2 c# u- Y3 ~/ C; J
' R9 `4 [; r7 _4 L, Q. ]
9 Q! K/ v% c! L4 \& V/ ?7 y& f. Q/ q/ Z; `
在使用过程中到目前只遇到这些错误~现在也只是会简单的用libsvm工具箱……
/ B6 m% y- C0 i% x
1 p( l: q1 r' P# Z& n5 T- Q真是感觉不能偷懒啊!有时候偷懒一步,就要付出更多的代价去解决因此出现的问题^
0 R6 B5 c, G) y; L( b. x7 }0 n- X
' u* n* T/ `2 T9 ?. E: }, S6 q
( Z3 D3 k" h9 t, z+ e1 [- n6 z
& A2 @5 V6 o) j! O7 e9 \' k
/ }" O+ G2 |% M* i; N" p |
|