MATLAB安装libsvm工具箱的方法


支持向量机(support vector machine,SVM)是机器学习中一种流行的学习算法,在分类与回归分析中发挥着重要做用。基于SVM算法开发的工具箱有不少种,下面咱们要安装的是十分受欢迎的libsvm工具箱。html

libsvm简介

LIBSVM 是台湾大学林智仁(Lin Chih-Jen)副教授等开发设计的一个简单、易于使用和快速有效的 SVM 模式识别与回归的软件包,它不只提供了编译好的可在 Windows 系列系统的执行文件,还提供了源代码,方便改进、修改以及在其它操做系统上应用; 该软件还有一个特色,就是对 SVM 所涉及的参数调节相对比较少,提供了不少的默认参数,利用这些默认参数就能够解决不少问题;而且提供了交互检验(Cross-SVM回归等问题,包括基于一对一算法的多类模式识别问题。c++

libsvm与MATLAB自带的svm工具箱的区别

在MATLAB中,一样自带了一个svm工具箱,不过相比于libsvm,在功能性和易用性方面有一些差距。具体差异表如今:git

  • MATLAB自带的svm实现函数仅支持分类问题,不支持回归问题;而libsvm不只支持分类问题,亦支持回归问题
  • MATLAB自带的svm实现函数仅支持二分类问题,多分类问题需按照多分类的相应算法编程实现;而libsvm采用一对一方法支持多分类
  • MATLAB自带的svm工具箱没法改变高斯核函数中的参数,而libsvm能够
  • MATLAB自带的svm工具箱也有一些优势,好比在解决二次规划问题时,可选三种方法(经典二次方法;SMO;最小二乘),而libsvm只能是SMO。

常见的扩展为多分类的方法有:github

  • 一对一(one-versus-one)方法,训练时对于任意两类样本都会训练一个二分类器,最终获得k(k-1)/2个二分类器,共同组成k分类器。对未知样本分类时,使用全部的k(k-1)/2个分类器进行分类,将出现最多的那个类别做为该样本最终的分类结果。算法

  • 一对多(one-versus-rest)方法:训练时依次把k类样本中的某个类别归为一类,其它剩下的归为另外一类,使用二分类的SVM训练处一个二分类器,最后把获得的k个二分类器组成k分类器。对未知样本分类时,分别用这k个二分类器进行分类,将分类结果中出现最多的那个类别做为最终的分类结果。编程

libsvm的下载

在libsvm的官方主页上能够下载libsvm的扩展包,支持MATLAB、Java、Python等多种语言,这里咱们选择MATLAB版本,下载zip文件便可。windows

或者直接下载我分享的文件包,点击这里下载缓存

注意

若是是从官方主页上下载,须要再下载一个数据集[heart_scale.mat],方便以后的测试,点击这里下载机器学习

若是是下载我分享的文件包,里面已经包含了这个数据集.mat文件,就不须要再下载了。函数

libsvm的安装

\libsvm-3.23\matlab目录下,有一个README文件,详细说明了安装方法。

若是是windows 64位系统,预编译的二进制文件已经提供,在\libsvm-3.23\windows文件下,能够看到4个文件,分别是libsvmread.mexw6四、libsvmwrite.mexw6四、svmtrain.mexw6四、svmpredict.mexw64。

这样能够跳过下面第一步的编译步骤。

1.编译

若是是win32位系统,须要本身从新编译c文件,生成MATLAB可识别的mexw32文件。编译方法在上述的README文件也有说明。

将MATLAB的工做文件夹调整到\libsvm-3.23\matlab目录下,在MATLAB的命令行窗口输入>> mex -setup,而后选择编译器如VS2010,最后输入指令>>make。编译完成后,当前路径下会生成对应的mexw32(32位系统)mexw64(64位系统)文件。

过程以下:

matlab>> mex -setup

Would you like mex to locate installed compilers [y]/n? y
Select a compiler:
[1] Microsoft Visual C/C++ version 7.1 in C:\Program Files\Microsoft Visual Studio
[0] None

Compiler: 1
Please verify your choices:
Compiler: Microsoft Visual C/C++ 7.1
Location: C:\Program Files\Microsoft Visual Studio

Are these correct?([y]/n): y

matlab>> make

注意

个人操做系统是win7 64位,原先安装的是MATLAB2014a和VS2015,发现并不支持libsvm工具包中提供好的mexw64文件,缘由是MATLAB的版本太低。

随后我考虑从新编译生成适合本身版本的mexw64文件,结果发现MATLAB2014a不支持识别VS2015,最高支持到VS2013。

因此解决方法有两种,一种是给给VS降级,一种是给MATLAB升级。因为前者涉及不少.net和c++库文件,比较繁琐,因此最方便的作法是安装新版本的MATLAB,新老版本的MATLAB只要不安装在一个文件夹下,通常不会出现干扰状况。

安装MATLAB2016及以上版本就能够支持以上的mexw64文件,同时也能识别更新的c/c++编译器。

MATLAB 2016b的下载、安装、激活方法,能够参考这个连接

2.重命名函数

在获得libsvmread.mexw6四、libsvmwrite.mexw6四、svmtrain.mexw6四、svmpredict.mexw64这4个文件后,为了不和svm内置的函数冲突,最好将svmtrain.mexw6四、svmpredict.mexw64这两个文件重命名为libsvmtrain.mexw6四、libsvmpredict.mexw64。

3.添加到toolbox

将libsvm-3.23文件夹放置到\MATLAB R2016b\toolbox目录下;

主页> 设置路径> 添加文件夹> 选择libsvm-3.23文件夹;

添加并包含子文件夹> 选择libsvm-3.23文件夹;

主页> 预设> 常规> 更新工具箱缓存> 肯定

测试

在MATLAB命令行窗口输入一下指令:

load heart_scale
model = libsvmtrain(heart_scale_label, heart_scale_inst, '-c 1 -g     0.07');
[predict_label, accuracy, dec_values] = libsvmpredict(heart_scale_label, heart_scale_inst, model);

若出现如下结果,说明安装正确。

更详细的关于libsvm的使用方法能够参考libsvm文件夹下的README文件或者是官方主页的说明。


References

相关文章
相关标签/搜索