|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
经过几天的学习,终于可以正常的用libsvm工具箱咯……工具箱很强大但是刚开始总是错误百出啊!在遇到问题时google了一下在网上总能找到很多解决方法。。。我总结的是能解决我当时的问题的那些~
: `+ s6 q8 p* X$ \; u% f# B% b# h( w4 @! t7 @3 ]4 Y, G
首先附上使用过程1 g; I: ^: A6 O
- Y ^) X7 Y# D) H& [
step1: 输入>>mex -setup" {5 B! t! K0 T1 ]) W
step2:$ z" X/ u% k# ]' s: u/ p
Please choose your compiler for building external inteRFace (MEX) files:
T, E* X; O7 t6 f) c; N7 F Would you like mex to locate installed compilers [y]/n? 是否让matlab自动检测编译器 可以选y
1 Y/ s K. [+ F5 J step3:
2 I) Q5 b; ^# C# j7 G6 v Select a compiler:
! A2 ^0 ~( Z1 o+ E, o/ z3 q& V [1] Lcc-win32 C 2.4.1 in E:\PROGRA~1\MATLAB\R2010a\sys\lcc 5 A0 j# o9 [# c' x
[2] Microsoft Visual C++ 2008 SP1 in e:\Program Files\Microsoft Visual Studio 9.0 , W- [0 u! Z+ B& g8 `; n1 U
[3] Microsoft Visual C++ 6.0 in E:\Program Files\Microsoft Visual Studio
% i- n6 p2 g) F: A3 \8 p9 ] [0] None ' S0 K# p# }. ?/ \9 `" G
[1]matlab 自带的不能用 其他的如果有的话 就相应的选择就行 . ]5 f; j% a( e3 F! k0 q) ?
我选择了 【2】
3 ~6 Y' c* b6 \ X7 v6 P. C1 H step4:
& ^; T; `& m* o7 A; Q( `9 I" a Compiler: Microsoft Visual C++ 2008 SP1
m8 o5 ~! G' k Location: e:\Program Files\Microsoft Visual Studio 9.0
7 v W. |$ k; o2 }3 t( ] Are these correct [y]/n? 路径是否正确 是的就选y % [0 |9 A& t1 i1 x$ j
如果没有自动检测出来依次的话step2就选【n】就可以,再顺着提示下来。: r5 |3 Z5 F+ _) v+ n1 b# ~9 } e
4 B) d% {9 R8 e8 A/ ]
Step 5 ; `5 A0 V/ r2 X9 G! s1 S( \9 n* M' w9 ]
- m- }" P4 g" m. n1 {
Make
1 y4 Z) o# I) Q- x2 I- c. a' N2 D% D6 i3 L: A7 b$ i
后面就是:3 U/ M2 a3 H: `) j
: Z: ]) b8 v. ], b" w0 i+ Z
load heart_scale.mat(此处无分号)9 _7 s) }4 e9 `5 s, A$ H9 ^7 ?; b: T
1 x8 @, t7 w$ {# u
train = heart_scale_inst;7 ~" |6 ]& t: y, m$ t
4 f4 g3 [9 M% Y9 _& ]
train_label=heart_scale_label;
4 T2 J% @7 f4 z0 C6 t) Y
8 u8 l4 D4 @; i! v4 N4 ttest=train;
$ d" }! Q; O. I* {4 y9 P7 {( @. d. l' {- V+ N4 z) s0 G
test_label=train_label;5 ] }5 C2 Y+ ~. @5 S, ~( g/ r
0 z! k5 O J7 ~# R5 I" i. Y' `: h/ z+ @# b
model=svmtrain(train_label,train,'-c 2 -g 0.01');# ^9 C& }2 u1 V
! a$ D- N$ K0 t% Z
[predict_label,accuracy]=svmpredict(test_label,test,model);
; P+ {, K4 G- S1 S. j( t7 P- G; h4 c5 ]% e$ r/ V
8 w* c4 X# P4 E
4 W+ x: M3 i; T7 a+ k2 f1% P* m: k3 ?0 v7 ?! w A2 w
; H4 |; I+ T0 k! x+ ^, z4 A
make这一步报错
2 P- b6 B9 S* `8 s: p8 Z7 |
/ m* Z, C6 G7 a: @8 RError using mex (line 206)8 ^2 s: S3 v0 x# D k
* Z2 V; m( L# f' Q& C/ dUnable to complete successfully.
2 h& J! _9 U" N Q2 v( _9 U
7 M' x) l5 |4 k/ V: aError in make (line 1)
' P6 N4 q5 K' d+ U' L4 f
6 z1 Z$ P& s; T9 ]6 [: ]) f, @% This make.m is for MATLAB and OCTAVE$ H3 M8 K7 ^7 F9 h
& O0 V: `0 q! s$ P% i
under Windows, Mac, and Unix
9 u! p K4 x( n( g. t5 H1 w, W% e6 a, H
在尝试了许多方法后,竟然是换了低版本的libsvm,搞定了~~~7 t% d& ^1 b: T! R7 P
: e) ~9 W( Z8 i/ Z9 b
另:Libsvm各个版本http://www.csie.ntu.edu.tw/~cjlin/libsvm/matlab/oldfiles/ ~- q# v0 C+ J8 x
* G4 x3 ~ ]* |, a1 ]. I( |
! T: D* z' Z% a6 n$ x% S
- s9 u/ |7 {) E: t9 U& U2 还有一个make这一步出现的错误
6 W! x5 ?, X+ e5 V& j& W5 g% `6 o# k0 p& Q7 j
Undefined function or variable 'make'
- r8 v; O( ~1 ?5 k/ ]! `* _7 @
; O0 Y0 G! ^) h3 m; G4 Z解决方法为:
0 ^7 X* w- I# ?: c
& @; L0 X7 b7 h1 n设置matlab的path
1 S, q) p9 ]4 D2 E" C. h8 T& ~% v4 b4 V
方法file->set path->set sub path(为什么要sub path因为只有这样才能将你要加的文件目录的子文件都加进去,否则只是加了你所要加的那个目录。)0 x4 F& Y2 J8 j) O4 @2 w
! @8 o3 p; W V3 o- q; f
还要记得把current folder 设为matlab所在的路径
3 P r2 ]# G$ P( R6 u, l% R+ x" A$ e/ r3 z
3 输入load heart_scale.mat;报错
( B9 }# X a; a, r, @* b1 f6 w6 |4 q0 n" I" B( P- z
Error using load! } ~6 U5 J4 n* R- m; B2 v
/ @5 x! ^1 v/ a7 N; {2 v
Unable to read file heart_scale.mat;: No5 z' r( L0 u2 \6 P" v/ |$ O+ G2 M
- f0 @5 W8 p4 ]+ X' r
such file or directory.
! y8 n/ g$ f" m7 q+ u
9 t3 c% Q% c+ p" P- n5 V这个问题是这样的,不应该有最后那个; 去掉分号就可以了。。。(粗心所致。。。不知道别人会不会像我这样。。。)5 P! U3 g+ i8 p- S$ E) b) _0 j1 s! T
% M" o& G E" e, I
41 ?; V+ a" I+ d3 _
! v% h3 h- A! I; g8 m5 B/ v% H5 Z5 bload 这一步报错$ G( R* y9 I3 B( U
3 z; E" W( i$ R6 X* v- s: x9 o0 d% j
??? Error using ==> load; m7 I. `; [* P
Number of columns on line 2 of ASCII file D:\Program- S: \% L2 u+ G% c9 b
Files\MATLAB2010\matlab\toolbox\libsvm-3.13\heart_scale
! {3 {4 K7 H7 _: j" K" y; Wmust be the same as previous lines./ p9 { u) V( \4 {+ ^3 \# x
官方现在不给heart_scale.mat,给的都是VC++下的格式。一些旧版本的工具箱还可以找到mat文件,新版本都没有了。所以load会报错:heart_scalemust be same as previous lines)1 {! m8 b& e5 _$ V% O- F, q. x. v
一种解决方法是:使用给的一个函数,转化数据。此函数为libsvmread()
0 @% h6 S5 l1 C: s" |! M使用如下: [label_vector, instance_matrix] =libsvmread('filename');! L- d" M; g7 N4 y8 o6 v, N
此处为了跟官方统一名称可以[heart_scale_label,heart_scale_inst] =libsvmread('heart_scale');
6 B/ D: i& @6 ]( A$ N( @! Q9 V注意:由于heart_scale在libsvm-3.11目录下,不是在matlab下,所以直接用libsvmread命令会报错,要买改变当前路径,或者使用[heart_scale_label,heart_scale_inst] =libsvmread('../heart_scale');../代表返回上层路径。
6 S9 D1 _( o. l- F- }! @/ n但是最简单的方法是,找到旧版本工具箱的mat文件添加上即可!4 v% _4 n8 \! r! j0 b4 ^
我把需要的mat文件分享在我的网盘中了* v3 T" |7 V0 f& q* D; f/ [' G
http://pan.baidu.com/share/link?shareid=127727&uk=2165237662' r- m6 C0 h: J5 Z, B( `- a- J
6 ?7 V2 @, w2 b8 E( h3 x7 {+ O
& T- F# f2 Z0 M, X4 K+ v2 w3 V
t9 \* t5 e/ j' j; L, C8 p8 I6 y7 E" Z
5 到svmtrain这一步报错
' Q0 m; ]+ n; R) l
8 [* |$ A. c( f2 W7 ^9 A3 [??? Errorusing ==> svmtrain at 172
- E+ {- o5 m1 U6 }& k
: T: L" m2 R1 M M) @# j% XGroup mustbe a vector./ V6 F' i1 `6 r. i
是因为在添加工具箱的时候没有添加完全,file-Set Path-Add with Subfold ...添加好路径就可以了
3 H G8 J$ I/ v3 A9 c8 S8 m! J
1 L4 x" y& g- c2 q# o6 A# N. d
# q- g: ~5 l1 c- c. n8 w0 m$ V" H0 c) P' }9 E
在使用过程中到目前只遇到这些错误~现在也只是会简单的用libsvm工具箱……
& |' }# l) q7 h. _( T: E3 E3 c$ ]
真是感觉不能偷懒啊!有时候偷懒一步,就要付出更多的代价去解决因此出现的问题^
$ `( b9 _. V9 S/ L% x) |( b3 Y7 Z& s9 H* m; h" b6 V- A$ S5 r% c. D) }
" J& |! V' {3 K( D( }
2 n' h/ |9 b0 n7 o- z( m# U5 @0 D6 o" M% J: Z/ v; n
Q8 ~: U: K, {. p X |
|