MATLAB libsvm 安装和使用

最近在学习SVM,在matlab上安装和使用Libsvm的过程中遇到了好多问题,在网上查看了许多资料,踩了许多坑。

整理一下供大家分享,希望能节省大家在安装过程中的时间。

一、安装

1.libsvm 下载

本人使用windows 10-64bits, Matlab 2016a,还下载了VS2017(这个稍后再说),下载最新版Libsvm 3.23,地址:https://www.csie.ntu.edu.tw/~cjlin/libsvm/。将zip文件解压到matlab/toolbox/(其他位置也可,但在使用时一定要将matlab路径调至该软件包处),如图。其中有java,matlab和python 三种版本,以及测试数据集heart_scale,和readme说明文件(内有Libsvm的参数说明,建议阅读,其中例子是在windows 命令行窗口运行的。)                                                    

2.设置路径

在matlab中设置路径

 

3.编译 

不要问我为啥要编译,我也是小白,在该步骤遇到了许多麻烦,给大家分享一下。

先来说一下编译步骤,在matlab命令行中输入mex -setup -v 查看一下电脑中有啥编译器

 

若是能找到c++编译器,可直接尝试在命令行窗口输入make,执行make.m程序进行编译,完成后出现4个后缀为.mexw64文件

若没能找到C++编译器,编译失败或者一系列不明error,请参考下方谦恭的博客,按其步骤进行

在最后终于找到了几个是,使用的是TDM-GCC-64编译器,这个是我额外下的。大家往上看Visual C++的编译的编译器只能找到2015,下了VS2017的我一脸懵逼。找了好多资料,说是matlab版本低了,行,大哥,被迫我又下了个matlab 2017b,嘿嘿,能出现C++2017的字了,但后面括号里还是否(一万只草泥马奔腾)。继续查资料,说是如果先装matlab,再装VS,可能是由于没配置环境的情况,会找不到编译器。想了想,我这不是后装了个新版本吗? 看见贴吧里有大佬说正版的Matlab没毛病(额,穷孩子也想学点习),破解版的需要做一系列操作(计算机小白表示看不懂)。

直到看见了谦恭的博客https://blog.csdn.net/github_35807147/article/details/80725642,改用TDM-GCC编译器,在此对其表示感谢,该文章介绍了编译过程,并附有编译器下载地址,本文将不再叙述编译过程,大家可以转去参考。

4. 测试

按照网上最常见的测试方法,来进行一下测试。

将Libsvm文件下的测试数据集heart_scale复制到Libsvm\matlab下,后续的操作将在该文件夹下进行,同时将MATLAB工作路径转至该文件下(在MATLAB中也可完成文件的复制粘贴工作)。

在命令行窗口输入

[heart_scale_label,heart_scale_inst]=libsvmread('heart_scale');

model = svmtrain(heart_scale_label,heart_scale_inst) ;

[predict_label,accuracy,dec_values] = svmpredict(heart_scale_label,heart_scale_inst,model);(该行代码也可以只有一个输出值predict_label,看到过一个测试教程里给了双输出值的模式,愣是跑不出来,最后在Libsvm\matlab\README中看见了格式,在此希望新手们仔细阅读Libsvm\README 和Libsvm\matlab\README,前者介绍svm的命令,后者介绍matlab下的语句规范)

至此,安装步骤结束,以下是使用介绍。

二、使用

以下是官方新手导论https://www.csie.ntu.edu.tw/~cjlin/papers/guide/guide.pdf里的一段话,我简单翻译一下,英文好的请直接看原文。

• Test We propose that beginners try the following procedure first:  (我们建议新手尝试如下步骤)

• Transform data to the format of an SVM package                           (转换数据至SVM格式)

• Conduct simple scaling on the data                                                   (执行数据归一化)

• Consider the RBF kernel K(x, y) = e −γkx−yk 2                                    (考虑径向基核函数)

• Use cross-validation to find the best parameter C and γ                          (使用交叉检验找到最优的参数C和γ)

• Use the best parameter C and γ to train the whole training set5                 (使用最优的参数进行整个数据集的训练)

• Test                                                                                                                (测试)

1. 标准格式转换

做为新手的我决定老实按照指导来,然后就发现了问题,转换格式是什么鬼?又找了一波资料,发现我们需要FormatDataLibsvm.xls 这么一个表格。在百度上搜了一下,好多博主上传的资料都要5个c币,做为无产阶级的我表示扛不住。

在此附上本人的资源地址https://download.csdn.net/download/qq_31781741/10660504,惊天跳楼价,只需一个币,感谢父老乡亲捧场!!!

要是真没币就算了,没有什么能阻挡你学习的脚步,在此感谢DADADA开飞机的DATA提供的百度网盘http://pan.baidu.com/s/1eSKebYU,附上其简书博客地址https://www.jianshu.com/p/8dcde06319b1(我就是从该博客里找到的)。

输入简单的数据,如图:

注意:使用该表格时需要运行(我也不知道是啥东西),输入数据时最后一列为标签,转换完成后,标签转至第一列。本人使用word office 2013 ,在WPS时出现了不可预知的错误,一脸懵逼,幸好我俩个都有,将表格另存为txt格式文本(excel另存为有俩种txt格式,建议使用文本文件(制表格分割))。

2. 数据归一化

可以看见在libsvm-3.23\windows文件夹有一个svm-scale.exe 的执行程序,经测试该exe文件双击无法使用。

该应用程序需要在windows cmd 里运行(按住windows+r,输入cmd即可)。

将转换好的txt文本复制到该目录,将cmd里路径调至该文件夹(可将文件夹直接拖入cmd,手动输太xxx的长了)。

 

以a.txt为例,运行完成后,会在该文件目录下生成归一化的a1.txt文件,默认归一化范围(-1,1),详情可参考README文档,以下是归一化完成的文本和初始文本对比。

3. 训练以及预测

下面以回归预测为例,介绍一下训练及预测过程。

将归一化好的a1.txt文件复制到libsvm-3.23\matlab 目录下(原谅我一次又一次的复制粘贴,一切为了稳,稳,稳)。

[lable,im]=libsvmread('a1.txt');                              %读取文件
model=svmtrain(lable(1:300),im(1:300,:),'-s 4 -t 2 -c 1 -g 0.125');          %训练
[prelabel,accuracy,decision_values]=svmpredict(lable(301:600),im(301:600,:),model);                 %预测


 

至此,所有的流程结束,剩下的就是参数寻优的过程。

 

最后:

以此文献给正在学习SVM的傻妞,希望你能一切顺利。

  • 213
    点赞
  • 666
    收藏
    觉得还不错? 一键收藏
  • 79
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 79
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值