记录在学习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发的一个关于该问题的帖子,于是就按照该帖子的叙述进行相关的操作,不过踩到了好几个坑,因为这个帖子是好久之前的,版本比较靠前,所以会有些细节上的不同,不过大致还是可以参考的。而且也有视频的讲解可以参考。

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

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

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

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

时间: 2024-10-05 02:01:28

记录在学习ML过程中,在MATLAB中集成LibSVM时遇到的问题的相关文章

VC++中调用MATLAB中的数据

网上的帖子都是如何将VC++数据添加进入MATLAB中,而VC++调用MATLAB中的数据几乎没有,再次记录一点东西吧 配置好编程环境,本文环境为:VS2012+MATLAB2012b. 首先要了解的是Matlab Engine API函数 接下来贴代码和效果: void test2() { Engine *ep; if (!(ep = engOpen(NULL))) { cout<<"Can't start MATLAB engine"<<endl; //Me

matlab中怎样计算某元素是否在某个集合中??

Python中可以使用in来判断某元素是否在集合中,而matlab中使用ismember(a,A)函数,判断元素a是否在集合A中 1 >> a=[1,2,3]; 2 >> ismember(1,a) 3 4 ans = 5 6 1 7 8 >> ismember(5,a) 9 10 ans = 11 12 0 集合可以为向量,也可以为一个矩阵,上面例子集合为一个向量,下面例子集合为一个矩阵 1 >> b=[1,2,3;4,5,3;7,8,7]; 2 >

利用JQ实现的,高仿 彩虹岛官网导航栏(学习HTML过程中的小记录)

利用JQ实现的,高仿 彩虹岛官网导航栏(学习HTML过程中的小记录)   作者:王可利(Star·星星) 总结: 今天学习的jQ类库的使用,代码重复的比较多需要完善.严格区分大小写,在 $("").css()   这里css是小写的,用 HBuilder 编写补全是大写的..这里要注意 主要使用的方法:jQuery 隐藏 / 显示    jQuery 淡出淡入 需要注意的知识点: 效果的样式: 代码如下:(亲们 自己展开拉~) 1 <!DOCTYPE html> 2 <

关于HTML中,绝对定位,相对定位的理解...(学习HTML过程中的小记录)

关于HTML中,绝对定位,相对定位的理解...(学习HTML过程中的小记录)   作者:王可利(Star·星星) HTML中 相对定位:position:relative; 绝对定位:position:absolut; 1.相对定位(div与div之间的关系)        body 标签其实就是一个大的盒子,在body里面设置 两个盒子div1 和 div2 ,而且两个盒子都给了它一个相对定位:position:relative;,那么div2 就会相对于 div1 排版,排在div1的下面,

Matlab中常见的神经网络训练函数和学习函数

一.训练函数 1.traingd Name:Gradient descent backpropagation (梯度下降反向传播算法 ) Description:triangd is a network training function that updates weight and bias values  according to gradient descent. 2.traingda Name:Gradient descent  with adaptive learning rate

sqlite学习笔记11:C语言中使用sqlite之删除记录

最后一节,这里记录下如何删除数据. 前面所有的代码都继承在这里了,在Ubuntu14.04和Mac10.9上亲测通过. #include <stdio.h> #include <stdlib.h> #include "sqlite/sqlite3.h" #define DB_NANE "sqlite/test.db" sqlite3 *db = NULL; char* sql = NULL; char *zErrMsg = NULL; con

【matlab】:matlab中不断的出现计算过程怎么办

这个问题是会常常性出的.就是matlab中不断的出现计算. 关于这个问题,我们须要考虑的是自己是不是写错了,通常会出现以下两种可能的错误 1,关于计算的函数没有写分号 :这样的是致命问题,假设函数不写分号,肯定是会出现错误的 2,关于赋值的函数错误 比方说我的一行赋值语句例如以下: I((plot_x(i)-20):(plot_x(i)+20),(plot_y(i)-20):(plot_y(i)+20)) = 37,38,24; 直接对图像进行赋值 可是这样的并不能行.由于给三维数组赋值压根就不

记录一次bug解决过程:velocity中获取url中的参数

一.总结 在Webx的Velocity中获取url中参数:$rundata.getRequest().getParameter('userId') 在Webx项目中,防止CSRF攻击(Cross-site request forgery,跨站请求伪造),在form表单提交中要加入$!csrfToken.ajaxUniqueToken 二.Bug描述:Velocity从URL中获取parameter参数 在项目IDCM中,使用webx容器进行项目的开发.前端的模板引擎采用了velocity,在项目

【Android实战】记录自学自定义GifView过程,能同时支持gif和其他图片!【实用篇】

之前写了一篇博客,<[Android实战]记录自学自定义GifView过程,详解属性那些事![学习篇]> 关于自定义GifView的,详细讲解了学习过程及遇到的一些类的解释,然后完成了一个项目,能通过在xml加入自定义 view (MyGifView)中加入自定义属性(my:gif_src = "@drawable/coffee"),达到播放gif图片的效果. 但是,有几个问题 1.gif_src 属性只支持 gif 图,并不支持其他类型的图片 2.只支持默认的引用图片,不