| 
 | 
	
    
 
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册  
 
x
 
 
8 l. Y* q# w& r" z6 b8 E工作环境  C. j4 _! D8 x3 g 
- 软件环境:Windows 7 Ultimate sp1、MatlabR2012b 32bit
 
7 [; _" h9 [9 q2 d( _$ i  7 b* V7 c9 _8 |; h. P/ ~ 
今天在使用matlab实现svm算法的时候,发现使用svmtrain函数报错:" q6 o# j' z7 W! ~ 
Y must be a vector or a character array5 n$ L! q" Z6 z* L7 L 
立马help svmtrain看看是否少什么东西,命令执行结果如下:4 b: A7 h6 Q& O 
8 g$ A+ k/ r) {9 Y; ^ 
- 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.
 -     ........' e: p7 S  N% ~3 r7 z* M
 
   于是,网上找找资料,这一找不得了,发现大问题!按照参考文献的思路,应该是我的Matlab少了libsvm库,搞不好这个问题无解。幸好libsvm不是matlab自带的,而是需要下载编译的,需要的朋友可以从这https://www.csie.ntu.edu.tw/~cjlin/libsvm/下载。 
, c. V. k$ C' m  v 
& m( b* [7 r. x8 ]5 s9 D  B
 
 
( [* i4 W+ L2 F$ i* O  h1 Z6 i) h( k( d* {+ s7 k+ T+ b, x( S 
文件内容如下: 
; Q! B7 X5 F  u& F/ m) B8 m8 [( w* t; @  S$ S5 ^ 
 
 
7 K3 Z1 I0 E0 s# ?4 e 
  d1 _; J9 L# e! Z下载下来的是源代码,需要经过编译,查看README.md,可以发现:7 b5 }4 ]* P- [! z" F7 D 
 
' I+ P( r' |0 J' b, \- I- 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.
 
" D$ W: [* z5 ?$ n      1 ?7 ?( e" S. l) d7 w1 O5 B' L& t 
于是赶紧将libsvm压缩包扔到matlab/toolbox/下面,然后定位到libsvm3.23文件夹,输入mex -setup,. r$ n6 S+ W5 A% z; } 
 
" R% Y. s& m% ~! o- 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
 
8 [" A- O) }8 s: y       
  J& B/ W- y  ~+ `8 F只有一个编译器!也就是matlab自带的编译器,于是只能选择该编译器,输入make,出来一堆错误:+ H3 @7 k) ~) T+ r0 l' L 
 
9 P2 w( M2 R* t" x- a5 q; H- >> 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.
 
; d) |7 R/ x2 V     
( \. Q& u" f* q0 ^1 o原因是lcc 编译器不支持c++,要使得matlab能够编译c++文件的话,只能安装第三方编译器比如微软的vsstudio或者vc++6.0以及mingw-w64,由于vs或者vc比较大我就没再折腾,倒是下载了mingw-w64的离线版,(在线安装版本下载不下来),但是离线版下载下来之后解压缩,死活都配置不好,matlab中就是不显示该编译器!我电脑中其实也有一个cl编译器也不了解如何去配置。最后无果,只能找一个编译好的libsvm32位版本,据说是在winxp下面编译的,通用性应该不错,试了试,可以成功运行!& S- v: S+ E5 Y3 b 
- T( L* J& `2 E* w. n  R 
% C* W+ W7 H) D# z" o( j 
 |   
 
 
 
 |