SVM学习笔记(2):Ubuntu下LibSVM的安装及与Python和Matlab接口的实现

LibSVM简介及其在Win下Matlab中的安装使用详见:SVM学习笔记(1):Win下LibSVM在Matlab中的安装及使用
本文环境:Ubuntu18.04 + Anaconda3 + Matlab R2018a

1. 下载LibSVM

官网:https://www.csie.ntu.edu.tw/~cjlin/libsvm/ ,下载libsvm-3.23.tar.gz文件,解压缩并移动到/usr/local/libsvm-3.23(你想安装到的目录)
背景知识:
1、gunplot:画图工具,python下使用libsvm必须是用的吧,matlab下面可能不需要安装
2、 mex文件:MEX从字面上是MATLAB和Executable 两个单词的缩写,是一种可在matlab环境中调用的C(或fortran)语言衍生程序,MEX文件的后缀名按32位/64位分别为 .mexw32/.mexw64。mex的编译结果实际上就是一个带输出函数mexFunction 的dll文件。
3、If you are new to SVM and if the data is not large, please go to `tools’ directory and use easy.py after installation. It does everything automatic – from data scaling to parameter selection.

2. 编译安装

# 在libsvm-3.23所在目录 /usr/local 打开终端:
sudo chmod 777 libsvm-3.23
cd libsvm-3.23
make

不出意外的话会编译成功(该目录下多出4个文件):
SVM学习笔记(2):Ubuntu下LibSVM的安装及与Python和Matlab接口的实现_第1张图片
可以使用./svm-train heart_scale来训练进行检验,会输出如下,并生成heart_scale.model文件:

*
optimization finished, #iter = 162
nu = 0.431029
obj = -100.877288, rho = 0.424462
nSV = 132, nBSV = 107
Total nSV = 132

接着进行预测:./svm-predict heart_scale heart_scale.model heart_scale.out(其中heart_scale为test file, heart_scale.model是由svm-train训练出来对模型文件,heart_scale.out为预测输出文件),会输出如下,并生成heart_scale.out文件:

Accuracy = 86.6667% (234/270) (classification)

至此Ubuntu下LibSVM的编译安装完成。

3. 与Python接口的实现

3.1 Python接口

进入/usr/local/libsvm-3.23/python目录,输入make
测试:启动Pythonpython,输入import svm,不出错说明成功。
为了在Pycharm中使用,需要按如下把一些文件添加到解释器路径的相关文件夹中:

cp /usr/local/libsvm-3.23/python/*.py /usr/local/anaconda3/lib/python3.7/site-packages  #包括commonutil.py,svm.py,svmutil.py(包含svm_train()和svm_predict()函数)
cp /usr/local/libsvm-3.23/tools/grid.py /usr/local/anaconda3/lib/python3.7/site-packages  #包括网格搜索函数find_parameters()
cp /usr/local/libsvm-3.23/libsvm.so.2 /usr/local/anaconda3/lib/python3.7

到这里LibSVM的Python接口已经可以使用了,后续步骤只是为了使用easy.pygrid.py进行测试。
参考:ubuntu 下 python 导入 LibSVM包
Ubuntu + Python下libsvm使用小结

3.2 安装交互式绘图工具gnuplot

注:非必须,使用easy.pygrid.py需要这个工具。另:网上复制来拷贝去都是用源码安装的,想想1986年就发布的工具怎么可能没有收录到Ubuntu的官方库?为什么要走弯路用源码安装呢?还不便于升级管理。按以下步骤安装,非常简单:

#终端下输入gnuplot,显示:
Command 'gnuplot' not found, but can be installed with:

sudo apt install gnuplot-nox
sudo apt install gnuplot-qt 
sudo apt install gnuplot-x11

#说明gnuplot已经集成在这三个工具里面,这里安装第三个:
sudo apt install gnuplot-x11
#另终端提示:建议安装:  gnuplot-doc,一并安装:
sudo apt install gnuplot-doc

终端输入gnuplot进入画图,输入plot sin(x)测试,弹出正弦图像窗口即成功,输入exit退出画图。

注:plot sin(x)时又出现提示Gtk-Message: 02:42:08.643: Failed to load module “canberra-gtk-module”,不知何故,待解决,暂不影响使用。

另附上源码安装参考链接:ubuntu GNUPLOT安装

3.3 测试easy.pygrid.py

grid.py参数寻优测试: 进入libsvm子目录tools中,使用命令python grid.py ../heart_scale,会进入c,g参数寻优,看输出2048.0 0.0001220703125 84.4444,或者在tools目录下打开heart_scale.png,可以看到最佳c和g的值。
LibSVM相关函数说明可以查看libsvm主目录和python目录下的README文件,官方版使用说明,很全面。
参考:LIBSVM学习(二)在linux环境下安装LIBSVM

4. 与Matlab接口的实现

再次解压缩libsvm-3.23.tar.gz文件并移动到Matlab的安装路径...\MATLAB\R2018a\toolbox下。

4.1 修改权限

修改libsvm-3.22文件夹下的matlab文件夹的权限(不修改的话会在后面的matlab接口编译的过程中出错),方式如下:

# 在目录 /home/famir/appfiles/MATLAB/R2018a/toolbox/libsvm-3.23 中打开终端:
sudo chmod 777 matlab      # 貌似本来就是777的权限

4.2 在Maltab中编译

打开Matlab,在matlab命令行下使用命令make进行编译,不出意外会MEX 已成功完成,如下:

cd /home/famir/appfiles/MATLAB/R2018a/toolbox/libsvm-3.23/matlab
make

返回如下:

使用 'gcc' 编译。
警告: 您使用的 gcc 版本为 '7.3.0'。不支持该版本的 gcc。MEX 当前支持的版本为 '6.3.x'。有关当前支持的编译器列表,请参阅:
https://www.mathworks.com/support/compilers/current_release。 
> In make (line 13) 
MEX 已成功完成。
使用 'gcc' 编译。
警告: 您使用的 gcc 版本为 '7.3.0'。不支持该版本的 gcc。MEX 当前支持的版本为 '6.3.x'。有关当前支持的编译器列表,请参阅:
https://www.mathworks.com/support/compilers/current_release。 
> In make (line 14) 
MEX 已成功完成。
使用 'g++' 编译。
警告: 您使用的 gcc 版本为 '7.3.0'。不支持该版本的 gcc。MEX 当前支持的版本为 '6.3.x'。有关当前支持的编译器列表,请参阅:
https://www.mathworks.com/support/compilers/current_release。 
> In make (line 15) 
cc1plus: warning: command line option ‘-std=c99’ is valid for C/ObjC but not for C++

cc1plus: warning: command line option ‘-std=c99’ is valid for C/ObjC but not for C++

cc1plus: warning: command line option ‘-std=c99’ is valid for C/ObjC but not for C++

cc1plus: warning: command line option ‘-std=c99’ is valid for C/ObjC but not for C++

MEX 已成功完成。
使用 'g++' 编译。
警告: 您使用的 gcc 版本为 '7.3.0'。不支持该版本的 gcc。MEX 当前支持的版本为 '6.3.x'。有关当前支持的编译器列表,请参阅:
https://www.mathworks.com/support/compilers/current_release。 
> In make (line 16) 
cc1plus: warning: command line option ‘-std=c99’ is valid for C/ObjC but not for C++

cc1plus: warning: command line option ‘-std=c99’ is valid for C/ObjC but not for C++

cc1plus: warning: command line option ‘-std=c99’ is valid for C/ObjC but not for C++

cc1plus: warning: command line option ‘-std=c99’ is valid for C/ObjC but not for C++

MEX 已成功完成。

注:此处出现警告信息:
警告: 您使用的 gcc 版本为 ‘7.3.0’。不支持该版本的 gcc。MEX 当前支持的版本为 ‘6.3.x’。有关当前支持的编译器列表,请参阅:
https://www.mathworks.com/support/compilers/current_release。
但仍然显示MEX 已成功完成

编译完该目录下多出4个文件:
SVM学习笔记(2):Ubuntu下LibSVM的安装及与Python和Matlab接口的实现_第2张图片

注:如果make失败,尝试使用’mex -setup’,按照提示选择一个编译器。

4.3 添加路径

/home/famir/appfiles/MATLAB/R2018a/toolbox/libsvm-3.23文件夹路径添加到Matlab的搜索路径(添加并包含子文件夹)

注:刚安装的MATLAB,需更改路径配置文件pathdef.m的权限,才能设置路径,详见 https://blog.csdn.net/famirtse/article/details/83790170#t19

4.4 检验安装

把当前目录设置为/home/famir/appfiles/MATLAB/R2018a/toolbox/libsvm-3.23,输入如下测试代码:

[heart_scale_label,heart_scale_inst]=libsvmread('heart_scale');
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); % test the traindata

得到如下结果,说明安装成功:

*
optimization finished, #iter = 134
nu = 0.433785
obj = -101.855060, rho = 0.426412
nSV = 130, nBSV = 107
Total nSV = 130
Accuracy = 86.6667% (234/270) (classification)

参考:Linux下libsvm的安装以及与Matlab的对接
Linux下matlab的libsvm安装

你可能感兴趣的:(ML,Linux)