LibSVM简介及其在Win下Matlab中的安装使用详见:SVM学习笔记(1):Win下LibSVM在Matlab中的安装及使用
本文环境:Ubuntu18.04 + Anaconda3 + Matlab R2018a
官网: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.
# 在libsvm-3.23所在目录 /usr/local 打开终端:
sudo chmod 777 libsvm-3.23
cd libsvm-3.23
make
不出意外的话会编译成功(该目录下多出4个文件):
可以使用./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的编译安装完成。
进入/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.py
和grid.py
进行测试。
参考:ubuntu 下 python 导入 LibSVM包
Ubuntu + Python下libsvm使用小结
注:非必须,使用easy.py
和grid.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安装
easy.py
和grid.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
再次解压缩libsvm-3.23.tar.gz
文件并移动到Matlab的安装路径...\MATLAB\R2018a\toolbox
下。
修改libsvm-3.22文件夹下的matlab文件夹的权限(不修改的话会在后面的matlab接口编译的过程中出错),方式如下:
# 在目录 /home/famir/appfiles/MATLAB/R2018a/toolbox/libsvm-3.23 中打开终端:
sudo chmod 777 matlab # 貌似本来就是777的权限
打开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 已成功完成
注:如果make失败,尝试使用’mex -setup’,按照提示选择一个编译器。
把/home/famir/appfiles/MATLAB/R2018a/toolbox/libsvm-3.23
文件夹路径添加到Matlab的搜索路径(添加并包含子文件夹)
注:刚安装的MATLAB,需更改路径配置文件pathdef.m的权限,才能设置路径,详见 https://blog.csdn.net/famirtse/article/details/83790170#t19
把当前目录设置为/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安装