LIBSVM使用说明(上):介绍和安装

LIBSVM使用指南

Posted by Xiaosheng on June 6, 2016

LIBSVM 主页为 http://www.csie.ntu.edu.tw/~cjlin/libsvm/index.html

1. LIBSVM 介绍

LIBSVM 是台湾大学林智仁(Lin Chih-Jen)教授等开发设计的一个操作简单、易于使用、快速有效的 SVM 软件包。可以解决分类问题(包括 C-SVC、n-SVC )、回归问题(包括 e-SVR、n-SVR )以及分布估计(one-class-SVM)等问题,提供了线性、多项式、径向基和 S 形函数四种常用的核函数供选择,可以有效地解决多类问题、交叉验证选择参数、对不平衡样本加权、多类问题的概率估计等。

Lin Chih-Jen

林智仁

LIBSVM 不但提供了编译好的 Windows 系统执行文件,还提供了源代码,方便改进、修改以及在其它操作系统上应用。LIBSVM 最大的特点就是对 SVM 所涉及的参数调节相对比较少,提供了很多的默认参数,因而使用起来非常方便。

SVM 用于模式识别或回归时, SVM 方法及其参数、核函数及其参数的选择,目前国际上还没有形成一个统一的模式, 也就是说最优 SVM 算法参数选择还只能是凭借经验、实验对比、大范围的搜寻或者利用软件包提供的交互检验功能进行寻优的功能。

LIBSVM 可以在 http://www.csie.ntu.edu.tw/~cjlin/libsvm/index.html#download 处免费获得。

2. LIBSVM 使用的一般步骤

  1. 按照 LIBSVM 软件包所要求的格式准备数据集
  2. 对数据进行简单的缩放操作
  3. 选择核函数
  4. 通过交叉验证选择最佳参数 C 和 g
  5. 采用最佳参数 C 与 g 对训练集进行训练获取支持向量机模型
  6. 利用获取的模型进行测试与预测

3. LIBSVM 的安装

解压 LIBSVM 的压缩包可以看到,主要包含 6 个文件夹和 LIBSVM 的 c 语言源文件:

  • java:给 java 使用的版本
  • matlab:给 matlab 使用的版本
  • python:给 python 使用的版本
  • svm-toy:可视化的工具,用来展示训练数据和分类界面。里面是源码,编译后的程序在 windows 文件夹下
  • tools:主要包含四个python文件,数据集抽样(subset)、参数优选(grid)、集成测试(easy)、数据检查(checkdata)
  • windows:提供了编译好的 Windows 系统执行文件

LIBSVM 本身是不需要安装的,只需在部分文件中配置好路径就可以(后面会说)。

3.1 安装 gnuplot

由于许多步骤需要调用 gnuplot 来绘制图形,所以首先需要安装 gnuplot。对于 Windows 系统来说,直接从 https://sourceforge.net/projects/gnuplot/files/gnuplot/ 下载安装程序 gpxxx-win32-mingw.exe(32位系统)或者 gpxxx-win64-mingw.exe(64位系统)安装即可,并且记下安装路径。对于 Linux 系统来说,可以直接使用例如 sudo apt-get install gnuplot 这样的命令从软件仓库安装(可能不是最新版),也可以参考 《Ubuntu下安装Gnuplot》 手动安装最新版。对于 Mac 系统来说,首先需要安装 Command Line Tools,可以通过在终端输入 xcode-select --install 来安装,然后安装 Macports,最后在终端输入 sudo port install gnuplot 安装 gnuplot。PS:对于 Linux/Mac 系统来说,gnuplot 程序的位置都可以通过 which gnuplot 获得。

3.2 Linux/Mac 下编译可执行文件

对于 Windows 系统,LIBSVM 在 windows 文件夹下提供了编译好的 32 位可执行文件(64位系统也可以使用),可以直接使用。对于 Linux/Mac 系统,则需要手动编译 svm-train 等可执行文件。因为 LIBSVM 提供了编写好的 Makefile 文件,所以可以使用 make 工具快速地完成所有的编译工作。

打开终端,首先切换到 libsvm-x.x 目录下,然后输入 make,make 工具会自动完成所有的编译工作。执行完成后,如果在 libsvm-x.x 目录下看到 svm-predict、svm-scale、svm-train 三个可执行文件,就代表编译工作顺利完成了。

3.3 在 grid.py 和 easy.py 中配置路径

tools 目录下的 grid.pyeasy.py 文件分别用来进行参数优选和集成测试,且在 easy.py 中调用了 grid.py 中的函数。完成了之前的步骤后,需要在这两个文件中配置 svm-train 和 gnuplot 的程序路径。

打开 grid.py,找到以下的代码段:

if sys.platform != 'win32':
	self.svmtrain_pathname = os.path.join(dirname, '../svm-train')
	self.gnuplot_pathname = '/usr/bin/gnuplot'
else:
	self.svmtrain_pathname = os.path.join(dirname, r'..\windows\svm-train.exe')
	self.gnuplot_pathname = r'c:\tmp\gnuplot\binary\pgnuplot.exe'

svmtrain_pathnamegnuplot_pathname 分别对应 svm-train 和 gnuplot 的程序路径,if 语句中的对应 Linux/Mac、else 语句中的对应 Windows。sum-train 的路径为相对路径,所以只要未移动过 sum-train 程序就不需要修改,gnuplot 则需要填写绝对路径(Linux/Mac 下可以通过命令 which gnuplot 查看 gnuplot 的绝对路径)。

打开 easy.py,找到以下的代码段:

if not is_win32:
	svmscale_exe = "../svm-scale"
	svmtrain_exe = "../svm-train"
	svmpredict_exe = "../svm-predict"
	grid_py = "./grid.py"
	gnuplot_exe = "/usr/bin/gnuplot"
else:
	svmscale_exe = r"..\windows\svm-scale.exe"
	svmtrain_exe = r"..\windows\svm-train.exe"
	svmpredict_exe = r"..\windows\svm-predict.exe"
	gnuplot_exe = r"c:\tmp\gnuplot\binary\pgnuplot.exe"
	grid_py = r".\grid.py"

svmscale_exesvmtrain_exesvmpredict_exe 分别对应 svm-scale、svm-train、svm-predict 的程序路径,grid_py 对应 grid.py 文件的路径,这些通常都不需要进行修改。gnuplot_exe 则对应 gnuplot 的程序路径,与 grid.py 相同,需要修改为 gnuplot 程序的绝对路径。

3.4 Linux/Mac 下编译 Python 接口的共享库文件

如果需要使用 python 来调用 LIBSVM,就需要 libsvm 共享库文件。对于 Windows 系统来说,已经在 windows 文件夹下以 libsvm.dll 的方式提供,而对于 Linux/Mac 系统来说,则需要手动编译 libsvm 共享库文件。好在 LIBSVM 提供了编写好的 Makefile 文件,所以可以使用 make 工具快速地完成编译。

打开终端,首先切换到 libsvm-x.x/python/ 目录下,然后输入 make,make 工具会自动完成共享库文件的编译工作。执行完成后,如果在 libsvm-x.x 目录下看到 libsvm.so.2 文件,就代表编译工作顺利完成。

4. gnuplot 参数微调

在后期的参数优选工作中,通常需要使用 gnuplot 来绘制图形,LIBSVM 设置的默认参数会导致部分字符重叠,需要在 grid.py 文件中进行修改(新版本的 LIBSVM 中可能已修复了这个问题)。

打开 tools 文件夹下的 grid.py 文件,找到 redraw 函数,在很多行的 gnuplot.write(xxx) 部分找到 gnuplot.write(b"set key at screen 0.9,0.9\n") 这一行。将 x 坐标(第一个 0.9)改为 1.0,也就是将该行修改为 gnuplot.write(b"set key at screen 1.0,0.9\n")

结语

关于 LIBSVM 的简介和安装就说到这里,更多 LIBSVM 的使用说明,请阅读《LIBSVM使用说明(中):函数和Python接口》