首先告诉大家MATLAB现在可以实现多类分类的问题!但是需要借助工具箱!
下面介绍的是*林智仁教授的libsvm工具箱在MATLAB中的安装和使用:
安装环境:Win7、Microsoft Visual Studio 2010
MATLAB版本:R2010b
libsvm版本:libsvm-3.17.zip 下载地址:http://www.csie.ntu.edu.tw/~cjlin/libsvm/
编译器版本:Microsoft Visual C++ 2010
安装过程:
1、可以去http://www.csie.ntu.edu.tw/~cjlin/libsvm/这个网站去下载最新的SVM软件,找到Download LIBSVM,点击zip file下载,这里有我们常用的matlab语言平台。解压缩打开其中的matlab文件夹下的README文件,可以看到在matlab下该怎么编译它。解压后可以放在任意目录下,但是最好放在MATLAB工具箱中,比如 C:\Program Files\MATLAB\R2011b\toolbox\libsvm-3.17。其中C:\Program Files\MATLAB\R2011b\要替换成你的MATLAB安装的位置目录,toolbox文件夹中存放的就是各种工具箱!题外话~
2、打开 matlab,找到Current Folder,点击旁边的...弹出对话框,切换进入到C:\Program Files\MATLAB\R2011a\toolbox\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
%编译器默认路径,确认正确输入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 . . .
%编译器配置完成
3、对C++文件进行编译
%输入命令
>> make %可能不成功,通常是路径问题,不成功的话参考这个链接:http://www.ilovematlab.cn/forum.php?ext=CB&mod=viewthread&pre_pos=7&pre_thread_id=170608&reltid=233513&tid=217493
>>
%编译完成
%如果make命令成功执行,那么你已经成功安装上libsvm了!
系统就会生成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\R2011a\toolbox\libsvm-3.17\matlab目录添加进去,这样以后在任何目录下都可以调用 libsvm的函数了。
4、运行一下(应该会报错,请看注意那里)
为了检验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之间的接口已经完全配置成功。
注意:坑爹啊!
如果你的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'); %../代表返回上层路径。
libsvm的使用方法:很简单就用下面的两条语句!
>> 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);
其中:
svmtrain()函数用来训练svm分类器,svmpredict()函数用来预测分类结果。
model用来保存分类器的信息!
svmtrain()函数的第一个参数是训练样本的类别矩阵(分类结果),第二个参数是训练样本的特征矩阵(属性),第三个参数是可选的,它有很多个参数,各有各的用途,具体可参考下面的链接。
svmpredict()函数的第一个参数是测试样本的类别矩阵(真实结果,也可以自己先随便假设一个结果,没关系的),第二个参数是测试样本的特征矩阵(属性),第三个参数是分类器的模型,即model。
预测结果保存在predict_label中!分类正确率保存在accuracy中!精度信息保存在dec_values中!
请注意:heart_scale_label矩阵的维数和heart_scale_inst矩阵的维数必须一样,否则可能会报错。
如果你安装和使用过程中还有问题,请参考下面的链接,相信能找到你需要的东西!
http://zhan.renren.com/nvzuiqiang?gid=3602888498034633874&checked=true
http://blog.sina.com.cn/s/blog_4cf8aad30100nr2k.html
http://www.ilovematlab.cn/forum.php?mod=viewthread&tid=61234
http://blog.sina.com.cn/s/blog_4fe347e60101h5uz.html