记录在学习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集成该开源包的过程。html

  首先,我搜到了faruto大佬在matlabsky发的一个关于该问题的帖子,因而就按照该帖子的叙述进行相关的操做,不过踩到了好几个坑,由于这个帖子是很久以前的,版本比较靠前,因此会有些细节上的不一样,不过大体仍是能够参考的。并且也有视频的讲解能够参考。java

原贴地址:http://www.matlabsky.com/thread-11925-1-1.html
机器学习

优酷视频:http://v.youku.com/v_showMini/id_XMjc2NTY3MzYw_ft_131.html
ide

   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,能够!
spa

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

  紧随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进行环境测试,获得结果如图所示:

wKioL1me0jbhWM8kAACiicm2tXo090.jpg-wh_50

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

相关文章
相关标签/搜索