移动学习网 导航

matlab 2010b 添加怎么安装libsvm 如何在matlab里安装libsvm包

2024-05-23m.verywind.com
怎么确定matlab中安装了libsvm~

一.下载libsvm
http://www.csie.ntu.edu.tw/~cjlin/libsvm/
在libsvm的网站上下载 libsvm-3.12.zip文件,解压后放在任意目录下,最好放在MATLAB工具箱中,比如 C:\Program Files\MATLAB\R2011aoolbox\libsvm-3.12下。
二.配置编译器
打开 matlab,切换到C:\Program Files\MATLAB\R2011aoolbox\libsvm-3.12\matlab目录下,键入以下命令:
mex –setup
出现提示语句
Please choose your compiler for building MEX-files:
Would you like mex to locate installed compilers [y]/n?n %这次是选择编译器,输入n,选择自定义的编译器
出现以下选项(因电脑而异)
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] Lcc-win32 C 2.4.1
[5] Microsoft Visual C++ 6.0
[6] Microsoft Visual C++ 2005 SP1
[7] Microsoft Visual C++ 2008 SP1
[8] Microsoft Visual C++ 2010
[9] Microsoft Visual C++ 2010 Express
[10] Open WATCOM C++
[0] None
Compiler: 8%可以用其他的,出现以下提示语句
Your machine has a Microsoft Visual C++ 2010 compiler located at
C:\Program Files\Microsoft Visual Studio 10.0. Do you want to use this compiler [y]/n?
编译器默认路径,确认正确输入y,更改路径,输入n
输入y出现再次确认
Please verify your choices:
Compiler: Microsoft Visual C++ 2010
Location: C:\Program Files\Microsoft Visual Studio 10.0
Are these correct [y]/n? y
编译器配置完成
Trying to update options file: C:\Documents and Settings\zhangduokun\Application Data\MathWorks\MATLAB\R2011a\mexopts.bat
From template: C:\PROGRA~1\MATLAB\R2011a\bin\win32\mexopts\msvc100opts.bat
Done . . .
三.编译
输入命令
>> make
>>
%编译完成
系统就会生成svmtrain.mexw32,svmpredict.mexw32,libsvmread.mexw32和libsvmwrite.mexw32等文件(对于 Matlab 7.1以下上版本,生成的对应文件为svmtrain.dll,svmpredict.dll和read_sparse.dll,没做测试),然后可以在matlab的菜单 File->Set Path->add with subfolders(可直接用Add Folder)里,把 C:\Program Files\MATLAB\R2011aoolbox\libsvm-3.12\matlab目录添加进去,这样以后在任何目录下都可以调用 libsvm的函数了。
四.测试
为了检验 libsvm和 matlab之间的接口是否已经配置完成,可以在 matlab下执行以下命令:
>>load heart_scale
完成该步骤后发现Workspace中出现了heart_scale_inst和 heart_scale_label,说明正确
>>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); %
Accuracy = 86.6667% (234/270) (classification)% done
如果运行正常并生成了model这个结构体(其中保存了所有的支持向量及其系数),那么说明libsvm和matlab 之间的接口已经完全配置成功。
附:
如果你没有 heart_scale.mat(官方现在都不给了,给的都是VC++下的格式 所以load 会报错:heart_scale must be same as previous lines)
所以必须使用给的一个函数,转化数据此函数为libsvmread()
使用如下: [label_vector, instance_matrix] = libsvmread('filename');
此处为了跟官方统一名称可以[heart_scale_label,heart_scale_inst] = libsvmread('heart_scale');
由于heart_scale在libsvm-3.11目录下,不是在matlab下,所以直接用libsvmread命令会报错,要买改变当前路径,或者使用[heart_scale_label,heart_scale_inst] = libsvmread('../heart_scale');../代表返回上层路径。

注意:
1. matlab自带了C编译器Lcc-win32C,但是libsvm原始版本是C++实现的,因此需要C++的编译器来编译,这就是不适用matlab默认编译器而选择其他C++编译器的原因。
matlab支持的编译器也是有限的,可以查看不同版本matlab支持的编译器列表
2. 如果matlab版本太低,如matlab 7.0是不能用VS作为编译器的,只能用VC++ 6.0
3. .mexw32 文件是经过加密的,打开是乱码,函数本身没有帮助。
例如输入 help svmpredict会出现报错: svmpredict not found
工具箱libsvm-3.12\matlab中README文件才是帮助文件。
但是输入help svmtrain会出现帮助信息,其实出现的是系统自带的svmtrain函数,没有libsvm工具箱中的好用。
4.在新版本libsvm3.12中,文件夹libsvm-3.12\windows中已经有编译好的程序,可以直接使用,只需要把libsvm-3.12\windows添加到matlab路径中即可,不需要编译的过程。当然最好还是自己编译一遍,因为编译环境不同会导致一些不可预估的小问题,自己编译的过程是可控的。
5. 测试用数据集,libsvm官网上提供了很多数据集
测试使用的heart_scale数据集是C++版本的(类标签 1:第一个属性 2:第二个属性…),可以用libsvmread来转换为matlab版本的(它们的区别在类标签)。
[label_vector, instance_matrix] = libsvmread(‘C++版本数据集’); %得到类标签和属性矩阵,然后可以使用它们训练了model = svmtrain(label_vector, instance_matrix);
>> load heart_scale
>> model = svmtrain(heart_scale_label,heart_scale_inst);
*
optimization finished, #iter = 162
nu = 0.431029
obj = -100.877288, rho = 0.424462
nSV = 132, nBSV = 107
Total nSV = 132
>> [predict_label,accuracy] = svmpredict(heart_scale_label,heart_scale_inst,model);
Accuracy = 86.6667% (234/270) (classification)
6.参考资料
libsvm库下载:http://www.csie.ntu.edu.tw/~cjlin/libsvm/
视频:http://v.youku.com/v_showMini/id_XMjc2NTY3MzYw_ft_131.html(有小问题,等下会提到)

1.下载好libsvm包
下载libsvm-3.21到随意一个地方,比如到matlab安装路径下的 toolbox下——D:\MATLAB\R2014Aoolbox\下,并解压。
打开matlab,将libsvm-3.21\matlab 添加到路径,比如将:\MATLAB\R2014Aoolbox\libsvm-3.21\matlab 添加到路径。
2.setup 第一次尝试
若提示没有C++编译器,则根据提示的网址去下载 winsdk_web.exe,然后 双击运行winsdk_web.exe,安装到最后若提示失败,则去卸载自带的visual studio 和 .netframework 4,然后再运行 winsdk_web.exe,提示缺少 .netframework 4,则自行下载安装,反复运行 winsdk_web.exe。
直到运行 winsdk_web.exe 时出现如下图所示情况,说明距成功更近一步了,

选择 Change,下一步,

勾选上 visual C++ compilers 和 microsoft visual C++ 2010,下一步,

最后提示成功安装。
2. setup
打开Matlab中,进入LIBSVM根目录下的matlab目录(如D:\MATLAB\R2014Aoolbox\libsvm-3.21),在命令窗口的输入mex -setup 输出为:
>>mex –setup

MEX 配置为使用 'Microsoft Windows SDK 7.1 (C)' 以进行 C 语言编译。
Warning: The MATLAB C and Fortran API has changed to support MATLAB
variables with more than 2^32-1 elements. In the near future
you will be required to update your code to utilize the
new API. You can find more information about this at:

http://www.mathworks.com/help/matlab/matlab_external/upgrading-mex-files-to-use-64-bit-api.html.
要选择不同的语言,请从以下选项中选择一种命令:
mex -setup C++
mex -setup FORTRAN

继续:
>> mex -setup C++
MEX 配置为使用 'Microsoft Windows SDK 7.1 (C++)' 以进行 C++ 语言编译。
Warning: The MATLAB C and Fortran API has changed to support MATLAB
variables with more than 2^32-1 elements. In the near future
you will be required to update your code to utilize the
new API. You can find more information about this at:
http://www.mathworks.com/help/matlab/matlab_external/upgrading-mex-files-to-use-64-bit-api.html.

3.编译
执行 make,输出如下:
>> make
使用 'Microsoft Windows SDK 7.1 (C)' 编译。
MEX 已成功完成。
使用 'Microsoft Windows SDK 7.1 (C)' 编译。
MEX 已成功完成。
使用 'Microsoft Windows SDK 7.1 (C++)' 编译。
找不到 D:\MATLAB\R2014Aoolbox\libsvm-3.21\matlab\svmtrain.exp

找不到 D:\MATLAB\R2014Aoolbox\libsvm-3.21\matlab\svmtrain.exp

MEX 已成功完成。
使用 'Microsoft Windows SDK 7.1 (C++)' 编译。
找不到 D:\MATLAB\R2014Aoolbox\libsvm-3.21\matlab\svmpredict.exp

找不到 D:\MATLAB\R2014Aoolbox\libsvm-3.21\matlab\svmpredict.exp

MEX 已成功完成。
>>

4.重命名
忽略错误(找不到……),继续,编译完成后,在当前目录下(libsvm-3.21/matlab下)会出现svmtrain.mexw64、svmpredict.mexw64 或者svmtrain.mexw32、svmpredict.mexw32 ,把文件名svmtrain和svmpredict 相应改成 libsvmtrain 和 libsvmpredict。
这是因为Matlab中自带有SVM的工具箱,其函数名字就是svmtrain和svmpredict,和 libsvm 默认的名字一样.
5.测试是否安装成功libsvm
libsvm 软件包中自带有测试数据,即软件包根目录下的 heart_scale 文件。
在matlab运行代码,输出如下:
>> [heart_scale_label, heart_scale_inst] = libsvmread('heart_scale');
>> model = libsvmtrain(heart_scale_label, heart_scale_inst, '-c 1 -g 0.07');
*
optimization finished, #iter = 134
nu = 0.433785
obj = -101.855060, rho = 0.426412
nSV = 130, nBSV = 107
Total nSV = 130
>> [predict_label, accuracy, dec_values] = libsvmpredict(heart_scale_label, heart_scale_inst, model);
Accuracy = 86.6667% (234/270) (classification)
>>

OK ,perfect ! Congratulations to you!
如果遇到:
>> [heart_scale_label, heart_scale_inst] = libsvmread('heart_scale');
Invalid MEX-file 'C:\Users\jiao\Documents\MATLAB\libsvm-3.20\matlab\libsvmread.mexw64': 找不到指定的模块。

则把 D:\MATLAB\R2014Aoolbox\libsvm-3.21\matlab 文件夹添加到路径就可以了。

当前目录在libsvm下,那么就会调用libsvm的svmtrain,而自带的svmtrain的调用格式和libsvm的svmtrain的格式是不一样的,自带的格式是SVMStruct = svmtrain(‘训练矩阵’,‘训练标签’ 'Showplot',ShowplotValue, ...),而libsvm的格式需要把标

户户网菜鸟学习
联系邮箱
返回顶部
移动学习网