MATLAB安装libsvm常见问题

今天在跑一篇论文的图像处理程序时,需要加载这样一个函数:

model = svmtrain(train_labels, train_data,options);

这是一个利用SVM分类器进行分类的一个函数。


这个函数很烦,因为它不仅仅出现在MATLAB自带的工具库中(右键svmtrain可以定位到该函数),还出现在libsvm中编译出来的svmtrain.mexw64中(之后讲它是怎么出现的),尽管它们传入参数的顺序不同。


所以这个时候就会出现一个问题:当我调用这个函数时,是调用的MATLAB自带的工具库中的函数呢?还是调用的是libsvm中的这个函数呢?


既然你需要用到libsvm库,很明显你更希望使用libsvm库中自带的svmtrain函数。


但是,因为这个时候我们并没有生成svmtrain.mexw64这样一个文件,所以MATLAB在它的工具箱中去找svmtrain函数,此时会报错。因为尽管两个函数同名,但它们在参数传递上以及实现的功能上均有差别。


因此,我们可以这样做:


在网上可以下载到libsvm库,解压后把它放到你的MATLAB工程中。记得,这个时候需要把libsvm添加到MATLAB工程的路径当中(主页->设置路径->添加并包含子文件夹->libsvm)


好了,现在我们需要编译libsvm,为了得到vmtrain.mexw64文件(其实,还可以得到其他三个文件svmpredict.mexw64等),去查看libsvm下的 README,我们一般需要用到两个指令 make 和 mex -setup 


前者能够生成我们想要的四个文件,如果能够使用最好,如果在MATLAB命令窗口输入 make 指令报错,那么就输入mex -setup 指令


mex -setup 指令可能会提示你的电脑没有安装 mingw-w64 编译器,所以你需要先下载一个 MinGW64(TDM-GCC)来mex,参考CSDN博客 

http://blog.csdn.net/catherine627/article/details/70472848


这个时候,再次编译mex -setup的时候,就连接好了。(警告可以忽略)



接下来,使用make指令。


make指令如果再报错的话,我们找到libsvm中matlab对应的 make.m文件,把其中的所有CFLAGS变量改成COMPFLAGS,然后再检查make.m中所有.c文件的路径是否正确,如果不正确,修改.c文件的路径。


再次make,应该就不会有问题了。


此时会生成我们想要的四个文件。再次执行,MATLAB就能够找到libsvm中的svmtrain函数了。