|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
经过几天的学习,终于可以正常的用libsvm工具箱咯……工具箱很强大但是刚开始总是错误百出啊!在遇到问题时google了一下在网上总能找到很多解决方法。。。我总结的是能解决我当时的问题的那些~
5 b5 n( P) a9 i/ Y% `2 c5 \1 p! {4 T9 H! X9 ^8 X8 [
首先附上使用过程
& y* g4 h. b/ D" w z+ z% |- j5 [) |# N# Z9 L
step1: 输入>>mex -setup
4 |; c/ y7 b- O6 N3 O: c6 X/ p, S step2:5 X6 ~# o% M: j' K
Please choose your compiler for building external inteRFace (MEX) files: 3 ^6 V" b8 E" J6 Q# z7 x9 _
Would you like mex to locate installed compilers [y]/n? 是否让matlab自动检测编译器 可以选y8 _) z5 w$ t: W' w2 m/ V
step3:+ o& _1 X( v: R G
Select a compiler:
% F; V& H4 `/ _9 L2 H% C. d [1] Lcc-win32 C 2.4.1 in E:\PROGRA~1\MATLAB\R2010a\sys\lcc
7 \7 q R( ]2 {# X6 [& j [2] Microsoft Visual C++ 2008 SP1 in e:\Program Files\Microsoft Visual Studio 9.0
! G9 Y+ S T, c [3] Microsoft Visual C++ 6.0 in E:\Program Files\Microsoft Visual Studio
( N" N, n7 a7 E7 e8 ~ [0] None 9 c2 b6 ]( P# P3 I( b
[1]matlab 自带的不能用 其他的如果有的话 就相应的选择就行 . B, ~7 j8 H `+ U e$ ]
我选择了 【2】* K% F6 Z# S+ _/ ^* k
step4:
- T) l% ^) g( x% A3 h+ c0 m& x: Z) [ Compiler: Microsoft Visual C++ 2008 SP1 + ~6 G, T* ~$ l$ J+ ^0 O
Location: e:\Program Files\Microsoft Visual Studio 9.0
" G, v S( G! B0 j+ R Are these correct [y]/n? 路径是否正确 是的就选y . c7 H H& n/ A% |- [( b
如果没有自动检测出来依次的话step2就选【n】就可以,再顺着提示下来。
6 ~( C- ~ h5 K6 P* R5 A! u W$ B
) F& r- ?+ @/ Y3 Y* |" WStep 5 & I9 c1 m* _( i% I
0 m R1 n0 \6 G* RMake
. h: Q. @5 z# p! |) Q$ `$ b/ F
" S) H) N) O% x9 V* Z) w后面就是:
7 [% [3 l* n0 H! ~8 c$ e$ ~8 N/ c
) }( _! U7 q# a9 fload heart_scale.mat(此处无分号)
8 O' A! B- m+ C* Y' L+ Y- ?9 y6 \: ~, G: b; L$ |6 A" @$ ^
train = heart_scale_inst;
1 m6 m' ]) `, `& f7 `: P, q2 d. b
train_label=heart_scale_label;8 Y; Y, {+ K+ v& l0 H
& ?8 `6 L! A+ N v3 M1 g
test=train;
* Y, `0 j! u0 h/ }6 D+ \+ K2 _8 S4 z i
test_label=train_label;
8 x: d9 i# y' d' M. E( B, n5 k( `
& N( H8 h* V3 ~; Imodel=svmtrain(train_label,train,'-c 2 -g 0.01');
/ {! {( }4 A7 T; q2 E4 v! m5 p% n% T$ b# u1 ?
[predict_label,accuracy]=svmpredict(test_label,test,model);
6 I3 A+ D' L- D$ S) k
! R" V9 W% L0 M5 \/ ~; T0 {' [- H- K- h, G7 L& u
1 r* N5 N/ D8 A5 J5 y0 q5 d; i
1/ m7 b! m; u2 i4 z3 Z
) C5 H( P% \. _/ Umake这一步报错4 A3 g& q1 ?4 ]: K
% l) I* X0 y; O$ f8 |
Error using mex (line 206)
& u- I9 i! H& i1 D* J" z' o" a8 V: t0 D5 _
Unable to complete successfully.% _# x6 H4 L, I j5 ]' j
3 h1 d1 t r B% D% e9 e% ~Error in make (line 1)
( `9 r1 R5 p" Z2 T8 ]& H. y) B, ~- B2 i2 S3 C( Z# E9 b- P
% This make.m is for MATLAB and OCTAVE
s% v* y* Q) @3 R5 ]( m0 A: b( X2 X8 x, _+ w* h, D' G
under Windows, Mac, and Unix
& ?+ P0 I! r. S5 i
6 [9 w1 D- ~9 [( J4 n) U在尝试了许多方法后,竟然是换了低版本的libsvm,搞定了~~~
& |$ N7 m3 Q' e' o% {, x0 p1 o8 c6 g% W% J0 B2 b" [+ h
另:Libsvm各个版本http://www.csie.ntu.edu.tw/~cjlin/libsvm/matlab/oldfiles/
. \+ s6 ?+ |* ]) a( L$ A& G# y9 x
9 n2 v j5 v, i- u! p" S3 C- H2 q4 N" X Y
9 o) e6 ]( q7 F2 还有一个make这一步出现的错误, H6 f0 b @# ^% H" \
& k( o1 U( H3 s% F5 S+ E
Undefined function or variable 'make'
, i: o+ @6 X) [- U5 P
1 L. H3 l- q" c8 q0 d8 ^, H5 ~- E解决方法为:
' H, h; b- I1 n6 S* j1 s# {3 Z" s, }+ y9 y, f2 x" [. ~# }3 h
设置matlab的path . e1 ~2 L) v9 q7 C% I0 y2 {6 P. G
, j& z9 \* o' h
方法file->set path->set sub path(为什么要sub path因为只有这样才能将你要加的文件目录的子文件都加进去,否则只是加了你所要加的那个目录。); P& G4 c; ?! C. t0 `% I
" E& C" j9 K5 w4 }
还要记得把current folder 设为matlab所在的路径
$ }- L C0 t: O! K: Z' ^! k5 K& _
! X0 y; a! D4 L$ @3 输入load heart_scale.mat;报错' D/ j! U5 h3 k
% h2 b0 l3 n5 K5 N: O- d- V2 q% \
Error using load# N% d' G' T; `4 r3 ~4 i8 W/ Z) k
1 V# z7 X0 d) O1 o1 T6 l; |Unable to read file heart_scale.mat;: No% n, Z0 I0 F$ _- C' x: J( o
8 C, g+ e! q5 R+ v9 F
such file or directory./ @$ l3 E; t( V7 a ^' b, P
# M) u5 p4 V( d/ f
这个问题是这样的,不应该有最后那个; 去掉分号就可以了。。。(粗心所致。。。不知道别人会不会像我这样。。。)& i" Y6 B$ J2 m; G h& L$ K
4 l+ m4 M3 Y7 M2 G5 ^# P4- \ _' k" k! W! H8 b1 F* x
1 Q* U+ ~# ?% z/ N6 ]- n& P
load 这一步报错
, {& @8 v5 H* E% a8 m9 K$ [9 e5 c; N" \# ]) J4 ` [6 i
??? Error using ==> load: |- \* o x R7 a# `0 L7 t, V
Number of columns on line 2 of ASCII file D:\Program
# q" K9 ]5 a$ E8 U3 W2 A! vFiles\MATLAB2010\matlab\toolbox\libsvm-3.13\heart_scale7 [: a' W( [# v
must be the same as previous lines.
; s- Z8 q& \7 Y- V官方现在不给heart_scale.mat,给的都是VC++下的格式。一些旧版本的工具箱还可以找到mat文件,新版本都没有了。所以load会报错:heart_scalemust be same as previous lines)9 P! |" m" Z, F7 U: [9 y; d
一种解决方法是:使用给的一个函数,转化数据。此函数为libsvmread(): i# w2 N# v* @) a; X4 d/ W
使用如下: [label_vector, instance_matrix] =libsvmread('filename'); z: Q+ Y/ d# E8 J, h# N! H1 d/ v4 |
此处为了跟官方统一名称可以[heart_scale_label,heart_scale_inst] =libsvmread('heart_scale');2 g+ F$ Z6 q' F% E+ a: J+ Z
注意:由于heart_scale在libsvm-3.11目录下,不是在matlab下,所以直接用libsvmread命令会报错,要买改变当前路径,或者使用[heart_scale_label,heart_scale_inst] =libsvmread('../heart_scale');../代表返回上层路径。* `6 n* q$ k# h% N, M8 @
但是最简单的方法是,找到旧版本工具箱的mat文件添加上即可!
) ]. |+ R' r' [! o4 a" O" ~. M A, z我把需要的mat文件分享在我的网盘中了
( ~; c+ \" V zhttp://pan.baidu.com/share/link?shareid=127727&uk=2165237662
" h2 B: i/ O6 J/ h4 A7 K; v6 ^5 r) P: w, }' o* N5 y- A1 A- Q
8 e" d- e9 F! m4 G' y+ C( i8 ^
+ m2 {+ H, w/ ]6 `2 @0 p9 a
; C! R7 H8 P% t9 X0 ?5 到svmtrain这一步报错7 e3 R3 }8 K( {5 {7 t6 }% J& v
3 U; _1 j& M6 x
??? Errorusing ==> svmtrain at 172" ?+ r% i0 a! Z( l- c: R% ?1 _
/ ~2 O$ V C4 d1 j! r0 Q; l
Group mustbe a vector.% Z( e( [; q$ Z' K$ p) t, J# o
是因为在添加工具箱的时候没有添加完全,file-Set Path-Add with Subfold ...添加好路径就可以了
' g& c- c, Z) ]5 z% E8 }2 x7 y# s2 ~8 }' k1 W
1 Q$ s4 S$ H( t* @+ a# M+ H G1 Y2 v6 u
在使用过程中到目前只遇到这些错误~现在也只是会简单的用libsvm工具箱……: G" u- V. ^2 g% ~% P4 Q
! w' ?- E" t* N! j" t4 P+ i( j
真是感觉不能偷懒啊!有时候偷懒一步,就要付出更多的代价去解决因此出现的问题^
6 E' h- a5 w* U6 K' G" c
) V! D0 W( [' m/ f0 v5 E
6 l( Y( l7 m4 ~' T. p( Q+ P. R) _$ s: B$ i) [( {# d
( Q! l: w: Z+ m- ]
; L, u9 n# S B6 Q+ i
|
|