千家信息网

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

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,前几天写了一下自己对SVM中关键的距离问题的理解,后面会继续记录自己对该模型其他问题的理解,今天想试试SVM在"西瓜书"那个"阿尔法3.0"数据集上的效果。于是查到了"湾湾"教授林智仁先生大牛等写的一
千家信息网最后更新 2026年11月02日记录在学习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条左右,所以这结果没啥意义,我就只是单纯测试环境是否搭建好,仅此而已。

数据 文件 编译 运行 问题 命令 结果 路径 测试 环境 编译器 C++ 选择 成功 帖子 目录 脚本 地址 平台 教授 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技公司简介 山东特亿宝互联网科技有限公司 中国互联网科技工作委员会毛军 智能科技公司是互联网公司吗 深圳科技互联网 善班互联网科技 华中科技大学互联网 电子科技大学互联网 哈尔滨新华互联网科技 深圳国际航运科技和互联网 恒银科技与互联网金融 注册互联网科技公司经营范围大全 坤平互联网科技 互联网科技和法律行业 互联网科技大赛获奖感言 互联网数据科技专业 锡山区互联网智能科技产品供应 每天都有哪些好的互联网科技 上海乐五互联网科技有限公司 互联网科技和医药行业 互联网科技媒体 长亮科技互联网金融 佰商互联网科技有限公司 科技大学互联网专业好不好 银川新华互联网科技学校地址 半导体是互联网高科技吗 互联网与数字科技关系 云鲸互联网络科技有限公司 云南互联网科技学费 兰石爱特工业互联网科技分公司
0