这两天在学习支持向量机的参数优化,在ilovematlab网站看到了《MATLAB神经网络30个案例分析》第13章,下载了作者Faruto的源程序(包括遗传算法、网格搜索、粒子群三种优化算法,和html格式的教程)。
但运行源程序时发现几个问题:
- 报错提示找不到rep函数和crtbp函数等;
- 程序中的训练数据集共有3个标签,而所用训练算法为svmtrain函数(官方文档说svmtrain仅允许2个标签),因此这里会报错。
后来仔细看《MATLAB神经网络30个案例分析》中的帖子,发现运行程序前需要安装libsvm-mat加强工具箱(我下载的版本是3.1)。
下载后,在子文件夹 "libsvm-3.1-[FarutoUltimate3.1Mcode]\matlab-implement[by faruto]\myprivate\gatbx[Sheffield]" 里可以看到所需的rep.m、crtbp.m等函数,所以要把该子文件夹路径添加到MATLAB预设路径中。第一个问题解决了。
在子文件夹 "libsvm-3.1-[FarutoUltimate3.1Mcode]\matlab" 中可以看到svmtrain.c文件,结合第二个问题可知,源程序中所用的svmtrain函数并非MATLAB自带函数,而是此文件夹中的C函数,而要调用这个svmtrain.c文件,则需要MATLAB和C混合编程。
为了实现混合编程,新手需要两个步骤:
- 在MATLAB命令行输入
一般会报错提示“未找到编译器”之类,并给出MATLAB编译器的官方网站,我按照网站说明根据我的MATLAB版本下载安装了相应SDK,但安装过程提示电脑没有NET.framework 4.0,最终安装结束后MATLAB仍然找不到编译器。反复折腾后,接受网友建议直接安装了Microsoft Visual Studio 2013(提前在百度查到MATLAB 2014a 和 VS 2013兼容)。然后在MATLAB中重新输入上述命令后显示编译成功,第一步搞定(白走了许多弯路);mex -setup
- 先将MATLAB当前目录换成svmtrain.c文件所在的路径,在这一路径中可以看到make.m文件,然后在命令行输入
make
如果成功,MATLAB会在该路径中生成svmtrain.mexw64文件,第二步搞定。
经过以上两个步骤,第二个问题也解决了。如果在这两步中有其它问题,可以参考https://www.ilovematlab.cn/forum.php?mod=viewthread&tid=217493&extra=page%3D1%26filter%3Dtypeid%26typeid%3D368
把svmtrain.c和svmtrain.mexw64文件所在的路径添加到MATLAB预设路径,现在可以顺利运行源程序了。