matlab中加入libsvm,记录在学习ML过程中,在MATLAB中集成LibSVM时遇到的问题

前几天写了一下自己对SVM中关键的距离问题的理解,后面会继续记录自己对该模型其他问题的理解,今天想试试SVM在“西瓜书”那个“阿尔法3.0”数据集上的效果。于是查到了“湾湾”教授林智仁先生大牛等写的一个开源包LibSVM,并且该library可以与很多平台兼容,有很多语言版本,支持java 、C++、C 、MATLAB等,我们可以在林教授主页上下载。LibSVM地址:http://www.csie.ntu.edu.tw/~cjlin/libsvm/,Windows平台下载Zip压缩文件,Linux下则是tar.gz,新版的包为3.x。本人MATLAB开发平台的版本号为Windows下的R2016a,因此,记录R2016a集成该开源包的过程。

首先,我搜到了faruto大佬在matlabsky发的一个关于该问题的帖子,于是就按照该帖子的叙述进行相关的操作,不过踩到了好几个坑,因为这个帖子是好久之前的,版本比较靠前,所以会有些细节上的不同,不过大致还是可以参考的。而且也有视频的讲解可以参考。

Step1:添加LibSVM的搜索目录(路径)

点击主页选项卡下的“设置路径”按钮---->点击“添加并包含子文件夹”---->点击“libsvm-3.22”文件夹,选择所在的目录 ---->保存&关闭

Step2:安装C++编译器

帖子中先是运行mex -setup,按照提示进行选择,但是我在安装了VC6.0的前后,运行该命令都会报错:“未安装编译器或者SDK”,也就是安装了VC也找不到,我猜测可能是VC太旧。所以换了GCC,由于开发包是C++开发的,所以需要相关的编译器进行编译后,MATLAB才能够调用。由于新版本的MATLAB支持MinGW(GCC)编译器,而且相对比较小巧,故我选择了安装该编译器(也可以安装VS201X),安装路径最好是“X:\TDM-GCC-64”这种形式,“X”是盘符下载地址:http://tdm-gcc.tdragon.net/download,或者下载网盘数据,链接:http://pan.baidu.com/s/1cMwao2 密码:xh9u 。安装完成后再运行命令“mex -setup”,依然提示错误,该问题可能是GCC的path设置有问题,选择调用setenv('MW_MINGW64_LOC',folder)函数进行设置,其中folder为GCC的路径,例如:setenv('MW_MINGW64_LOC','D:\TDM-GCC-64') ;运行该命令后再mex -setup ,OK,可以!

Step3:make.m编译相关的C++文件(主要是train和predict源文件)

紧随Step2,选择当前目录为Libsvm,然后运行make脚本(当前目录设置为Libsvm是防止MATLAB中有与make同名的脚本),本以为已经成功集成,谁料依然出错“No such file or directory......”,实在是有一种fuck dog的感觉,继续填坑,查阅其他博客,幸好有人遇到过同样的问题,make脚本文件中将配置MATLAB对应的代码行进行修改,具体将“CFLAGS”修改为“COMPFLAGS”可以用ctr+F然后点击全部替换可以更快。完成以上操作之后,再运行make脚本函数,成功运行,在当前文件夹(../Libsvm/matlab)中,会发现多了两个train和predict的.obj文件这是编译之后的结果,表示成功。

Step4:测试libsvm环境

在libsvm2.x中,是有heart_scale.mat数据文件但是最新的libsvm3.x只有heart_scale纯文本文件,这是C++数据数据文件的格式,如果按照faruto视频中的操作,键入“load heart_scale”命令,会发现,结果出错,这是由于缺少对应的MATLAB的数据格式的文件,因此需要用libsvmread命令进行读入,该命令其实是运行一个lib中的libsvmread.c的C文件,用于对数据的转换,其调用格式为libsvmread(‘filename’) ;例如[label_vector, instance_matrix] = libsvmread('heart_scale');此处用的当前路径,不知道可不可以用绝对路径,可以试试,应该是可以的。数据经过转换后,可以发现,多了两个数据,label_vector和instance,分别是样本标签和属性,有了数据,下面就对环境进行正式测试。调用model = svmtrain(label_vector, instance_matrix) ;生成训练模型后在调用svmpredict(label_vector, instance_matrix, model, 'q'),得到结果。我用周教授《机器学习》上的西瓜数据集α3.0进行环境测试,得到结果如图所示:

43b75a1f95cf23b1ef1f20230a0b12bf.png

虽然结果很差,但是环境是搭建好了的,测试成功,因为我并没有分训练集和测试集,而且数据只有18条左右,所以这结果没啥意义,我就只是单纯测试环境是否搭建好,仅此而已。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值