|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
9 i$ Z1 A8 e+ c3 O" s% W- v9 U
工作环境1 O0 E& c! q6 G0 ^( D9 o
- 软件环境:Windows 7 Ultimate sp1、MatlabR2012b 32bit
: ?- R, J3 ^# ?+ w) L* X9 E# Z $ E3 Q4 B7 z6 a+ V5 C0 z
今天在使用matlab实现svm算法的时候,发现使用svmtrain函数报错:
: w/ ]" K2 J) l0 KY must be a vector or a character array, i, q1 |2 s7 }+ P, |1 N2 K
立马help svmtrain看看是否少什么东西,命令执行结果如下:
" c C4 c: F6 u# G& Y0 A& Z" R) V$ Q% N( B1 D8 b3 ]+ k1 B
- help svmtrain
- svmtrain Train a support vector machine classifier
- SVMSTRUCT = svmtrain(TRAINING, Y) trains a support vector machine (SVM)
- classifier on data taken from two groups. TRAINING is a numeric matrix
- of predictor data. Rows of TRAINING correspond to observations; columns
- correspond to features. Y is a column vector that contains the known
- class labels for TRAINING. Y is a grouping variable, i.e., it can be a
- categorical, numeric, or logical vector; a cell vector of strings; or a
- character matrix with each row representing a class label (see help for
- groupingvariable). Each element of Y specifies the group the
- corresponding row of TRAINING belongs to. TRAINING and Y must have the
- same number of rows. SVMSTRUCT contains information about the trained
- classifier, including the support vectors, that is used by SVMCLASSIFY
- for classification. svmtrain treats NaNs, empty strings or 'undefined'
- values as missing values and ignores the corresponding rows in
- TRAINING and Y.
- ........8 d) Y# z/ w# T. I: v9 M! S
于是,网上找找资料,这一找不得了,发现大问题!按照参考文献的思路,应该是我的Matlab少了libsvm库,搞不好这个问题无解。幸好libsvm不是matlab自带的,而是需要下载编译的,需要的朋友可以从这https://www.csie.ntu.edu.tw/~cjlin/libsvm/下载。
4 U* K0 c: ~' Q1 h9 s# ^: }1 _! x5 h2 |8 ]5 A2 g4 w6 U& }
q, G" Q: {8 X, @1 E! U* F
- F5 N! }( G7 K, P6 k文件内容如下:' t: i" o' M" Z" p& A( i4 S
. V. Y! s/ r n% d4 c/ _ K2 Q( i' ?
/ n) E4 c! E# R/ ]1 V, h# H+ L& n) ?9 r1 ~
下载下来的是源代码,需要经过编译,查看README.md,可以发现:
8 R' _( b; Q0 q6 S+ r2 O- |- f2 U- E: H* a! D
- Example:
- matlab>> mex -setup
- (ps: MATLAB will show the following messages to setup default compiler.)
- Please choose your compiler for building external inteRFace (MEX) files:
- Would you like mex to locate installed compilers [y]/n? y
- Select a compiler:
- [1] Microsoft Visual C/C++ version 7.1 in C:\Program Files\Microsoft Visual Studio
- [0] None
- Compiler: 1
- Please verify your choices:
- Compiler: Microsoft Visual C/C++ 7.1
- Location: C:\Program Files\Microsoft Visual Studio
- Are these correct?([y]/n): y
- matlab>> make
- On Unix systems, if neither make.m nor 'mex -setup' works, please use
- Makefile and type 'make' in a command window. Note that we assume
- your MATLAB is installed in '/usr/local/matlab'. If not, please change
- MATLABDIR in Makefile.
6 O: F4 a) g* @) j5 m7 F
r$ G z; G7 J( y. T于是赶紧将libsvm压缩包扔到matlab/toolbox/下面,然后定位到libsvm3.23文件夹,输入mex -setup,: }2 F, P; I; N1 d
5 e R' x' [+ ?- Select a compiler:
- [1] Lcc-win32 C 2.4.1 in E:\1_PROG~1\MATLAB~1\sys\lcc
- [0] None
- Compiler: mex -setup
- Please select from 0-1
- Compiler:
- Please select from 0-1
- Compiler: 1
- Please verify your choices:
- Compiler: Lcc-win32 C 2.4.1
- Location: E:\1_PROG~1\MATLAB~1\sys\lcc
2 o. N b$ l1 T( Y$ \. J8 c
2 J( k. E1 g* c( {只有一个编译器!也就是matlab自带的编译器,于是只能选择该编译器,输入make,出来一堆错误:
$ M; z8 l; @$ F; P0 K4 q
. G/ Y+ U# |3 D1 |: A; U" R/ p, a- >> make
- Error ..\svm.cpp: 15 syntax error; found `<' expecting `;'
- Error ..\svm.cpp: 15 skipping `<'
- Error ..\svm.cpp: 15 syntax error; found `T' expecting `;'
- Error ..\svm.cpp: 15 syntax error; found `>' expecting `;'
- Error ..\svm.cpp: 15 skipping `>'
- Error ..\svm.cpp: 15 syntax error; found `T' expecting `;'
- Error ..\svm.cpp: 15 syntax error; found `min' expecting `;'
- Error ..\svm.cpp: 15 syntax error; found `x' expecting `)'
- Error ..\svm.cpp: 15 skipping `x' `,' `T' `y'
- Error ..\svm.cpp: 15 undeclared identifier `x'
- Error ..\svm.cpp: 15 undeclared identifier `y'
- Warning ..\svm.cpp: 15 possible usage of x before definition
- Warning ..\svm.cpp: 15 possible usage of y before definition
- Error ..\svm.cpp: 18 syntax error; found `<' expecting `;'
- Error ..\svm.cpp: 18 skipping `<'
- Error ..\svm.cpp: 18 syntax error; found `T' expecting `;'
- Error ..\svm.cpp: 18 syntax error; found `>' expecting `;'
- Error ..\svm.cpp: 18 skipping `>'
- Error ..\svm.cpp: 18 syntax error; found `T' expecting `;'
- Error ..\svm.cpp: 18 syntax error; found `max' expecting `;'
- Error ..\svm.cpp: 18 syntax error; found `x' expecting `)'
- Error ..\svm.cpp: 18 skipping `x' `,' `T' `y'
- Error ..\svm.cpp: 18 too many errors
- E:\1_PROG~1\MATLAB~1\BIN\MEX.PL: Error: Compile of '..\svm.cpp' failed.
- Error: E:\1_Program_File\MatlabR2012b\toolbox\matlab\general\mex.m failed (line 206)
- Unable to complete successfully.
- => Please check README for detailed instructions.
2 w, ]# S* o8 {% c! y) j7 F
4 A: M$ C- m h1 e$ G原因是lcc 编译器不支持c++,要使得matlab能够编译c++文件的话,只能安装第三方编译器比如微软的vsstudio或者vc++6.0以及mingw-w64,由于vs或者vc比较大我就没再折腾,倒是下载了mingw-w64的离线版,(在线安装版本下载不下来),但是离线版下载下来之后解压缩,死活都配置不好,matlab中就是不显示该编译器!我电脑中其实也有一个cl编译器也不了解如何去配置。最后无果,只能找一个编译好的libsvm32位版本,据说是在winxp下面编译的,通用性应该不错,试了试,可以成功运行!$ z- C/ c# I' h. y" R0 T
: i. R( r; w3 o' ^
@) I! n3 ?' C* g9 j
|
|