|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
经过几天的学习,终于可以正常的用libsvm工具箱咯……工具箱很强大但是刚开始总是错误百出啊!在遇到问题时google了一下在网上总能找到很多解决方法。。。我总结的是能解决我当时的问题的那些~
" B, I: H8 O* n, u" Z" m4 T: `9 Z8 }, G! _4 b/ \8 r, g& \$ X8 K
首先附上使用过程
0 H" q# M- f2 p+ q( q Y0 r; \( @) C2 Q, d' m
step1: 输入>>mex -setup
" J9 i/ y$ O% r. c) G8 l' W step2:
' G: g" d+ ^9 d* h! K2 l$ @2 V0 B Please choose your compiler for building external inteRFace (MEX) files:
0 g9 s& @2 y+ Z7 C Would you like mex to locate installed compilers [y]/n? 是否让matlab自动检测编译器 可以选y
0 ~# ~/ `" ^ p S: ~, V; @% P step3:
) h1 ]6 w; @6 P8 [ X4 J Select a compiler:
7 g1 {0 O% p+ t) V6 _# f" z9 [: T [1] Lcc-win32 C 2.4.1 in E:\PROGRA~1\MATLAB\R2010a\sys\lcc ! F8 ^3 {, l3 [, T* A
[2] Microsoft Visual C++ 2008 SP1 in e:\Program Files\Microsoft Visual Studio 9.0
7 D$ V; |& L+ r2 M, Q [3] Microsoft Visual C++ 6.0 in E:\Program Files\Microsoft Visual Studio
1 D% N8 E1 ^) d2 p0 ]# c [0] None $ ^6 Y7 l$ p: s
[1]matlab 自带的不能用 其他的如果有的话 就相应的选择就行
7 c: f( R5 }* s: ~ 我选择了 【2】6 j% J, I7 E7 L; F8 `# C
step4:
( w3 G3 r" S) G; b Compiler: Microsoft Visual C++ 2008 SP1
2 a5 e& R& K9 X+ _6 e$ r Location: e:\Program Files\Microsoft Visual Studio 9.0 ! [* a+ v* h2 g4 _
Are these correct [y]/n? 路径是否正确 是的就选y ; x/ I4 F/ n. y/ ]
如果没有自动检测出来依次的话step2就选【n】就可以,再顺着提示下来。& h5 |5 ^/ V, B2 n" J% T, e
" @, u; ?4 w& _9 _, u K
Step 5 T9 M9 p% z5 r1 U+ e# v( J
9 `6 Q4 \6 P: U6 b; i
Make: a+ r. ~: k/ L9 G' V) K- p
8 h' o% e: a- H( G4 C6 N后面就是:$ ]+ L- S! {! A0 G
8 ]8 U) K. [0 H/ w5 E. r
load heart_scale.mat(此处无分号)
, |6 L. n# u: m7 r. R- l3 B4 v& n7 j5 a. `$ L
train = heart_scale_inst;) w$ T8 w1 ^% a) `9 @$ N
- @! f5 w! E6 {, q$ k* \5 m
train_label=heart_scale_label;7 L; f4 U9 {- m+ [) W6 Z+ O
, J) K6 E5 @( ^% ]# Ktest=train;8 R# f8 ^7 ^7 e$ r6 L. m$ D6 E
: r1 O' M8 A6 J, Ftest_label=train_label;
3 [, g3 P( x7 c6 ]* w
' z1 `5 f1 M. D* o; nmodel=svmtrain(train_label,train,'-c 2 -g 0.01');9 G# M; V9 k: L6 \
4 i: W- W, N' l3 ~: E" \! t
[predict_label,accuracy]=svmpredict(test_label,test,model);5 C7 f9 M& b9 @
6 j& Q \; u9 G* s$ Y7 v7 m
}/ P: [5 R: S: ^9 w& U' R1 A" P& j' p
1
# H2 O {/ \. w v! J+ @& I9 o6 G/ P# R% l0 z2 M
make这一步报错' ]( X1 a& \1 I3 R7 t
1 U$ g% Y) h6 ^ M9 V* l
Error using mex (line 206) ?( d- }% e% o5 r
/ S+ n5 F$ x d; S9 E X1 WUnable to complete successfully.0 E' k/ J; m- L8 B5 r, Y" {; X9 V
5 u* L* a C' e) B5 IError in make (line 1)
4 E- E$ W% v* \1 F2 D x' Y3 U# d/ N M% @# W: M* K$ A1 t; O( _
% This make.m is for MATLAB and OCTAVE
+ C) e6 k8 f: t S s2 p) U
% @. r( u# K% ?8 iunder Windows, Mac, and Unix' s5 u$ z1 C- f8 t7 X
8 U) Z j3 S7 W! r* Y2 e% H: ~
在尝试了许多方法后,竟然是换了低版本的libsvm,搞定了~~~" o9 w$ A9 Q, u! T6 @( C
& y2 w- `9 _7 u' y$ b) u另:Libsvm各个版本http://www.csie.ntu.edu.tw/~cjlin/libsvm/matlab/oldfiles/
: U0 q: [6 C! T& S' W: @
" r9 w7 O) E" l: y v6 P q. W( N2 n, k! H2 S, n, ?. t$ V
2 @1 I( C |3 v% @, ^# c2 还有一个make这一步出现的错误6 F1 u7 j0 b: m, K
8 h- @( A. q! }2 a7 K
Undefined function or variable 'make'& P$ ]* |- s, m& @- y; z' K) c& R8 [
4 j3 D+ Y" f% ~* ~
解决方法为:
0 c P# i5 M/ m' X' }# X2 x& k7 u- ~0 u. b4 ]% T! J+ Q
设置matlab的path
. ?, u* X7 z" w" o; b
- z: K7 k/ C1 ~7 s$ x* } 方法file->set path->set sub path(为什么要sub path因为只有这样才能将你要加的文件目录的子文件都加进去,否则只是加了你所要加的那个目录。)
, I) b# c9 q0 f8 u5 F* z
+ X7 d2 _( p" B! ? C7 \* Z还要记得把current folder 设为matlab所在的路径
7 l3 ~8 V" L, D* X a$ X* c! b: d5 |( P$ E* ~- ^; g4 ~
3 输入load heart_scale.mat;报错
. G4 b5 E) c# _+ _$ X( D, g+ z9 i( q0 u4 _1 \
Error using load2 n/ M F+ q3 l. l
$ `- u! J# Y C7 MUnable to read file heart_scale.mat;: No4 W% f& R5 F+ J4 P$ p4 E
% j2 N: u+ B7 Q( x( h) U* bsuch file or directory.3 p+ A: o8 L. @5 S% V9 |3 Y
) z m& L" S; q: }这个问题是这样的,不应该有最后那个; 去掉分号就可以了。。。(粗心所致。。。不知道别人会不会像我这样。。。)# O/ E0 |' s! | R
) j- b* X/ g: b8 z) l9 Q9 ?
4
8 m! u6 l$ d' C" K- m+ q" D5 {+ k! B |0 i- j
load 这一步报错
l0 L/ s" Z4 w% U8 u6 G. `' T' m$ a2 f2 x' G! V
??? Error using ==> load
% K- I" E6 c/ d; `% v" k! i7 vNumber of columns on line 2 of ASCII file D:\Program0 f( X) _; m+ Y* F
Files\MATLAB2010\matlab\toolbox\libsvm-3.13\heart_scale! M1 ], M0 u/ _" e! m! {
must be the same as previous lines.- a' Z0 T3 F c& [' H0 d8 n
官方现在不给heart_scale.mat,给的都是VC++下的格式。一些旧版本的工具箱还可以找到mat文件,新版本都没有了。所以load会报错:heart_scalemust be same as previous lines)
' M' C" K' k. X- l F$ t$ k9 S一种解决方法是:使用给的一个函数,转化数据。此函数为libsvmread()
$ U2 u+ P" d9 s, X! ^- q使用如下: [label_vector, instance_matrix] =libsvmread('filename');0 y. Q' G5 w* P' r' \
此处为了跟官方统一名称可以[heart_scale_label,heart_scale_inst] =libsvmread('heart_scale');
8 F# m. o" F$ |& v5 y# i+ y$ A注意:由于heart_scale在libsvm-3.11目录下,不是在matlab下,所以直接用libsvmread命令会报错,要买改变当前路径,或者使用[heart_scale_label,heart_scale_inst] =libsvmread('../heart_scale');../代表返回上层路径。, u+ d* k! y3 c9 v2 R
但是最简单的方法是,找到旧版本工具箱的mat文件添加上即可!
) V! e+ S3 k( [6 r! j我把需要的mat文件分享在我的网盘中了
$ n1 o5 s1 Z8 j0 U( F0 a) N/ Uhttp://pan.baidu.com/share/link?shareid=127727&uk=2165237662
9 W: m5 U+ e, E. O2 K4 e3 u, S2 [% j8 M6 L# @% Z9 }
4 g' K! e/ N* u4 B4 q
; R8 t; p6 ~/ s' r! f, g4 Z
* e, B' l+ ]; j ?5 到svmtrain这一步报错4 j2 d# |1 M7 V1 t/ b; v
\8 M$ p/ W- v8 d+ G# z??? Errorusing ==> svmtrain at 172! N' |7 z; U4 m; g
2 e* T7 @- B l' {4 n
Group mustbe a vector.
: m1 `2 s! D: H7 X是因为在添加工具箱的时候没有添加完全,file-Set Path-Add with Subfold ...添加好路径就可以了" f9 _# C4 y5 I* j5 N3 p9 i9 K3 w- R
! l4 E" i0 Q3 u8 h S5 C% K9 j% b9 L0 N) Y9 w
+ L4 c6 s. O7 k, V4 O: t在使用过程中到目前只遇到这些错误~现在也只是会简单的用libsvm工具箱……
5 N4 y, v9 P6 s. s o8 ]# p8 u8 k3 M; \' d& }' p [/ C2 B0 ?
真是感觉不能偷懒啊!有时候偷懒一步,就要付出更多的代价去解决因此出现的问题^) t4 S t4 {, x0 K- `5 x D
& ?6 n- v2 m" z0 @8 S$ g
( ?* n( I* n& w, z4 w& @( {) Q
1 u1 U; C, [9 O# j* @) Z
) N% ?1 u/ I9 u; ^; b, Z9 I! y4 W) ~' X l& J
|
|