您的位置:首页 > 其它

安装libsvm遇到的问题

2015-04-08 18:06 281 查看
最近要做纹理方面的分类,打算学习svm,捣鼓了一下午,总算把libsvm安上,遇到一些问题也挺困扰的,想记录下来与网友分享一下。

我刚开始下载最新的libsvm3.20版本点击打开链接,但是按照网上安装教程到了第五步出现问题:一个是make运行出现错误;另一个是load heart_scale出现错误。

第一个问题出错的原因有以下几种:

1)是否选择current directory为libsvm下matlab文件夹,如果不是matlab在搜索路径的时候搜索不到svm.cpp

2)修改libsvm\matlab 文件夹内的 make.m文件:

faruto版本下此文件的源代码为

% This make.m is used under Windows

% add -largeArrayDims on 64-bit machines

mex -O -largeArrayDims -I..\ -c ..\svm.cpp

mex -O -largeArrayDims -I..\ -c svm_model_matlab.c

mex -O -largeArrayDims -I..\ svmtrain.c svm.obj svm_model_matlab.obj

mex -O -largeArrayDims -I..\ svmpredict.c svm.obj svm_model_matlab.obj

mex -O -largeArrayDims libsvmread.c

mex -O -largeArrayDims libsvmwrite.c

第一行说明64位机器才能使用参数 -largeArrayDims ,要是32位机,选择将此参数删除后,保存。所以一定要注意自己电脑是32位的还是64位的。

3)对于Matlab 7.1及以上版本,生成的对应文件为svmtrain.mexw32或者64,svmpredict.mexw32或者64和libsvnread.mexw32或64 libsvmwrite.mexw32或者64) %运行make之前,这些文件在安装包是没有的,运行之后不同位数的电脑会生成相应的的文件。

对于第二个问题嘛,首先要明确新旧版本的区别,旧版本有load heart_scale.mat,新版本load heart_scale,这也是matlab不识别新版本的原因,很明显.mat能够被matlab调用的,解决办法:将旧版本中的load heart_scale.mat代替新版本的load heart_scale,我用的是libsvm2.91,可以在这里下载点击打开链接。

下面是具体的操作步骤:

step1: 输入>>mex -setup %注意mex后要留个空格

step2: Please choose your compiler for building external interface (MEX) files:

Would you like mex to locate installed compilers [y]/n? 是否让matlab自动检测编译器 可以选n

step3: [Select a compiler:

[1] Intel C++ 11.1 (with Microsoft Visual C++ 2008 SP1 linker)

[2] Intel Visual Fortran 11.1 (with Microsoft Visual C++ 2008 SP1 linker)

[3] Intel Visual Fortran 11.1 (with Microsoft Visual C++ 2008 Shell linker)

[4] Intel Visual Fortran 10.1 (with Microsoft Visual C++ 2005 SP1 linker)

[5] Microsoft Visual C++ 2005 SP1

[6] Microsoft Visual C++ 2008 Express

[7] Microsoft Visual C++ 2008 SP1

[8] Microsoft Visual C++ 2010

[9] Microsoft Visual C++ 2010 Express

matlab 自带的不能用 其他的如果有的话 就相应的选择就行 ,我选择了 【8】

step4: Your machine has a Microsoft Visual C++ 2010 compiler located at

d:\Program Files. Do you want to use this compiler [y]/n? 选择y

Please verify your choices: Compiler: Microsoft Visual C++ 2010

Location: d:\Program Files

Are these correct [y]/n? y 路径是否正确 是的就选y

%如果没有自动检测出来依次的话step2就选【n】就可以,再顺着提示下来。

Step5: Make

我当时一回车就出现:C:\MATLAB\BIN\MEX.PL: Error: '..\svm.cpp' not found.

??? Error using ==> mex at 208 Unable to complete successfully.

Error in ==> make at 5 mex -O -I..\ -c ..\svm.cpp

当时虽将libsvm工具箱添加路径了,但没将选择libsvm下matlab文件夹为current directory,改过来运行就好了。make运行成功后,你会发现会生成对应文件为svmtrain.mexw32或者64,svmpredict.mexw32或者64和libsvnread.mexw32或64 libsvmwrite.mexw32或者64。

make运行成功后接下来就要验证是否安装正确了

load heart_scale.mat %此处无分号,注意新旧版本的区别,若安装的最新版本可以将旧版本的复制后来替换,就ok了。

train = heart_scale_inst;

train_label=heart_scale_label;

test=train;

test_label=train_label;

model=svmtrain(train_label,train,'-c 2 -g 0.01');

[predict_label,accuracy]=svmpredict(test_label,test,model);

一回车会出现结果说明就大功告成了,希望能对后来人有所帮助。

对于matlab2014a新版本,可以忽略前4步,可直接进行make即可,主要编辑成自己系统的版本,之后对于安装成功与否的验证:

[heart_scale_label, heart_scale_inst] = libsvmread('heart_scale');

model = svmtrain(heart_scale_label, heart_scale_inst, '-c 1 -g 0.07');

[predict_label, accuracy, dec_values] =svmpredict(heart_scale_label, heart_scale_inst, model);

直接运行出结果(必须在根目录下运行,因为heart_scale不在当前目录)

optimization finished, #iter = 199

nu = 0.391993

obj = -183.591153, rho = 0.454610

nSV = 123, nBSV = 93

Total nSV = 123

Accuracy = 87.4074% (236/270) (classification)

当然也可像前面说的那样验证

load heart_scale.mat

train = heart_scale_inst;

train_label=heart_scale_label;

test=train;

test_label=train_label;

model=svmtrain(train_label,train,'-c 2 -g 0.01');

[predict_label,accuracy]=svmpredict(test_label,test,model);

但最后一句需改为[predict_label, accuracy, dec_values] =svmpredict(heart_scale_label, heart_scale_inst, model);

要不然没有准确率结果,我想可能是MATLAB版本的问题吧

参考文献:【1】http://blog.csdn.net/kobesdu/article/details/8936499

【2】http://www.ilovematlab.cn/thread-200501-1-1.html

【3】http://tieba.baidu.com/p/2331027240

下载链接:【1】http://www.csie.ntu.edu.tw/~cjlin/libsvm/

【2】http://www.csie.ntu.edu.tw/~cjlin/libsvm/matlab/oldfiles/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: