|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
经过几天的学习,终于可以正常的用libsvm工具箱咯……工具箱很强大但是刚开始总是错误百出啊!在遇到问题时google了一下在网上总能找到很多解决方法。。。我总结的是能解决我当时的问题的那些~
: M; I) e3 E( L' B' D7 C" l) g; W" y; e+ Y
首先附上使用过程6 H0 Y; v5 F6 y) X) P
( g5 s% Q) x# [2 m5 A+ W$ s step1: 输入>>mex -setup
, h. b2 B) Z: [3 O: ^ step2:
7 Y, [2 Q* l2 f8 N8 y3 _ Please choose your compiler for building external inteRFace (MEX) files: " U2 W M% F Y9 E6 x, ]$ v' _6 G+ k
Would you like mex to locate installed compilers [y]/n? 是否让matlab自动检测编译器 可以选y4 B9 \( r+ N- y+ g: t( S& c" y
step3:
0 K2 v3 x& ^7 \ Select a compiler: 2 J% R8 e& B- S/ A* u
[1] Lcc-win32 C 2.4.1 in E:\PROGRA~1\MATLAB\R2010a\sys\lcc : X6 |. U/ }: d! i0 Q
[2] Microsoft Visual C++ 2008 SP1 in e:\Program Files\Microsoft Visual Studio 9.0
1 Y" N4 c$ C2 s- A: t$ T, S" X [3] Microsoft Visual C++ 6.0 in E:\Program Files\Microsoft Visual Studio
6 b: ~ p" [$ O6 ^' k$ A5 H" M [0] None
! ?. F; m6 s3 [- H+ ^ [1]matlab 自带的不能用 其他的如果有的话 就相应的选择就行
1 q* v: t- ]3 h6 I- A; R* \ 我选择了 【2】
3 n+ G& ?, d' A/ [! u step4:5 v; C2 Z# M2 i2 U+ w; |$ `- L: s
Compiler: Microsoft Visual C++ 2008 SP1 , j! b5 d' @, T' j( ?
Location: e:\Program Files\Microsoft Visual Studio 9.0 3 x! F8 S5 F/ y* D
Are these correct [y]/n? 路径是否正确 是的就选y
# f. {1 G! R- |$ }3 { 如果没有自动检测出来依次的话step2就选【n】就可以,再顺着提示下来。) w" k# ^2 e+ q( Q% ?* w, K
4 n5 r' W1 [- ?7 Y! _0 e; h# C& r
Step 5
6 ]( e2 i- x6 i2 G% D5 \+ s+ h- ^+ k9 m; Z3 g; F
Make
# U; ~5 _, Q2 V4 A) ], v; }) e% d4 x2 `3 [, w: ^+ Y
后面就是:
5 @* z, ?4 U5 f0 ?7 \
4 c$ @8 u* x& {" _3 n Gload heart_scale.mat(此处无分号)
$ Q! C, t! o$ n& ?" j s
' W$ l/ A/ Y1 s; c. Z+ S0 rtrain = heart_scale_inst;! J8 `: f1 f$ y5 x2 B
9 H, k. E: f# q& T+ c# Y. Vtrain_label=heart_scale_label;: e3 p! U, U# a/ i! T
* n$ A6 z3 a5 O, D; ~& m$ B
test=train;8 t" D0 u" [2 c! w% I* j
' y+ f% C( j' U8 \. @2 C" Ktest_label=train_label;* y n5 r0 H4 f! C3 R- k5 L
; P6 k9 ~9 s, ?+ c8 [2 Gmodel=svmtrain(train_label,train,'-c 2 -g 0.01');1 g( Y1 v) ?, s* c9 l7 Y/ V
4 \/ W @0 t5 O( p[predict_label,accuracy]=svmpredict(test_label,test,model);! b z# N* ]& O& }9 l
! ]! X# |% ]/ K2 ~; H' @. P
3 K3 o7 o5 C* G B" _: `' N* G# D7 q/ N& O3 D3 w4 M) n( V' i
1* b& Q s' @" h \4 i
~# z* ?0 d/ Y( Z* X
make这一步报错% j# b+ G* e% y }5 A+ Q
. Y! g2 B2 ^0 |6 b5 z
Error using mex (line 206)3 |5 L- N- U$ `; r" ?% T9 }
* R0 Q# ]/ K0 z2 D& G X
Unable to complete successfully.! L) B j E8 J9 s# a" c) A
# l' i: Y- j; l4 J9 ^- j7 kError in make (line 1)) {8 P6 j" T" E( \3 w1 V( u4 r
1 v$ X% w6 @6 E5 o0 ?" K: e% This make.m is for MATLAB and OCTAVE l8 _& k0 m( e0 {6 F+ L4 @
" q! ]6 v- q+ Q0 ]under Windows, Mac, and Unix, S& E }$ ^* z/ k8 R M1 C6 \$ I
8 F2 h3 a4 Y0 u1 l9 d, F7 Z* p在尝试了许多方法后,竟然是换了低版本的libsvm,搞定了~~~$ b5 n, n' F! Y9 V+ p
* N C1 ~1 L6 f+ m/ e另:Libsvm各个版本http://www.csie.ntu.edu.tw/~cjlin/libsvm/matlab/oldfiles/
0 A( g/ v4 U4 B( D; n" X
* w& x7 W. x6 i5 \9 B, u$ E! {$ N9 S5 }6 w2 W6 d f7 W. j
+ ^" j8 A) F/ ~
2 还有一个make这一步出现的错误 J: H+ I% O% G/ K% c
* W" K* M0 c. u9 V- i" p; g
Undefined function or variable 'make'
7 N @+ v R* e+ u$ O$ y# n- A; \' I9 v! ~+ n
解决方法为:
) Q( s# N, v5 `. j! N, o, V( b$ @/ X. Z
设置matlab的path t& F( D" D; @( B8 p& q0 w
D: G) c4 j0 i 方法file->set path->set sub path(为什么要sub path因为只有这样才能将你要加的文件目录的子文件都加进去,否则只是加了你所要加的那个目录。)$ D: N# v0 E/ I# }6 ~
2 ` l3 r" v3 O1 ]
还要记得把current folder 设为matlab所在的路径% V" \8 u. R- ]' n @
; O; e' N$ ]! ~, l+ [$ X% M" e3 输入load heart_scale.mat;报错
$ q0 [, A% c6 q9 s( N- b; W* [; T. d1 M6 Z+ X0 `
Error using load
, y+ Z. e$ X9 G3 }
6 R9 W# D l& oUnable to read file heart_scale.mat;: No' a& u; [4 p5 `; |" i' I1 V( @4 u
1 \8 [& x5 o3 A: V @3 u& _' f
such file or directory.
: K/ K8 B4 D) L: v$ o. R) j: e' U" [7 i: J# p# |. S4 U# \# Y
这个问题是这样的,不应该有最后那个; 去掉分号就可以了。。。(粗心所致。。。不知道别人会不会像我这样。。。)
* a, J4 K5 p D( k2 E& e2 C" U0 `! E5 t5 [# r9 [ T _
4
9 d U& s7 Z" f7 l3 d, l3 i
/ A$ v$ ?/ w/ t' I7 C% [load 这一步报错
7 v- X0 X( `$ k [- }1 ~
$ B% i9 S @6 P, |??? Error using ==> load ~$ \6 x: _7 J5 P9 v' J
Number of columns on line 2 of ASCII file D:\Program3 r/ b9 Z, D: i# ]2 o
Files\MATLAB2010\matlab\toolbox\libsvm-3.13\heart_scale
6 d# ] r8 i7 I% s% A1 lmust be the same as previous lines.( ~, i, {1 N, a X4 E5 j; K
官方现在不给heart_scale.mat,给的都是VC++下的格式。一些旧版本的工具箱还可以找到mat文件,新版本都没有了。所以load会报错:heart_scalemust be same as previous lines)
& [1 {6 t# Q* V+ t一种解决方法是:使用给的一个函数,转化数据。此函数为libsvmread()
: p& K+ c* z9 }1 }" p8 c7 A4 b使用如下: [label_vector, instance_matrix] =libsvmread('filename');
+ @% b# ?0 g% G4 Q5 @! Z! z3 w3 d' M此处为了跟官方统一名称可以[heart_scale_label,heart_scale_inst] =libsvmread('heart_scale');
, |* |. I* V9 `& A注意:由于heart_scale在libsvm-3.11目录下,不是在matlab下,所以直接用libsvmread命令会报错,要买改变当前路径,或者使用[heart_scale_label,heart_scale_inst] =libsvmread('../heart_scale');../代表返回上层路径。( ~. @( ^4 Q+ j1 o& r" R3 b
但是最简单的方法是,找到旧版本工具箱的mat文件添加上即可!
5 b3 u2 G$ y( B8 J1 A. T; o我把需要的mat文件分享在我的网盘中了$ m9 j3 \: ~% ?8 W/ \- M
http://pan.baidu.com/share/link?shareid=127727&uk=2165237662; l$ z1 m0 p# D& Y: V
! A& ]$ ?" W1 y$ \7 b/ C
" N; w- j# z% I& e, D; h& k8 K* B5 B: G- k% Q6 T% E9 ^& A
}" C& v5 Z, C/ L4 a5 到svmtrain这一步报错* ]' R* W1 V- x7 u0 t
! D. S7 ^& }& A6 s5 x??? Errorusing ==> svmtrain at 172
7 `# P% q8 ], b W2 B) D1 b5 o5 O7 D, s- ]
Group mustbe a vector.
, x2 b+ ~1 v' C- {% i' o是因为在添加工具箱的时候没有添加完全,file-Set Path-Add with Subfold ...添加好路径就可以了, V f; a& j7 n. f$ u
. O8 C* l( e9 u/ P" p, H
, A- j: p7 F( ~! t
[; V' ^% T+ c" G5 n, ?在使用过程中到目前只遇到这些错误~现在也只是会简单的用libsvm工具箱……5 f1 a) j: y, R& s. a V
8 ^1 |4 a2 t y5 f+ N
真是感觉不能偷懒啊!有时候偷懒一步,就要付出更多的代价去解决因此出现的问题^' N" }* d U, B3 R0 T! q
8 V, f0 g1 G q6 t! q9 n0 q1 p. \
( D3 M; h7 m- B, [
$ Q. _8 [! e8 W* z
3 s( `0 s; c9 N |
|