Matlab 2020b 中安装与使用libsvm

2024-06-04 9354阅读

一、下载与安装libsvm

1.下载libsvm

  • 下载地址:https://www.csie.ntu.edu.tw/~cjlin/libsvm/
  • 下载后的结果:Matlab 2020b 中安装与使用libsvm 第1张
  • 对该压缩包进行解压,最好解压到matlab安装路径中的toolbox文件夹下,如下图所示:Matlab 2020b 中安装与使用libsvm 第2张

           注意:这里是 matlab 2020b 和 libsvm 3.32 (请注意版本的差异问题,版本的不一致或许可能         会造成安装出现问题)

    2.设置路径

    在 matlab 2020b 中设置 libsvm 3.32 所在的路径,如图所示

    1. 打开MATLAB R2020b软件,然后找到 设置路径 选项

    Matlab 2020b 中安装与使用libsvm 第3张

    Matlab 2020b 中安装与使用libsvm 第4张

    找到libsvm路径选中后,点击保存,然后点击关闭

    3.编译libsvm 3.32

    将libsvm的路径添加到matlab中,需要对libsvm中的文件进行编译,因为libsvm的开源代码不是matlab,是C语言、C++写的,所以需要对其进行编译,才能在matlab中对libsvm中的文件进行调用。

    1.进入libsvm 3.32中malab文件夹所在的路径下(否则会编译不成功),在命令行窗口输入命令 mex -setup,按下 Enter键 运行会得到如图所示的结果(前提是已经安装了编译器,我是之前就已经安装过MingGW64 编译器了,如果运行该指令后报错,请看关于 编译失败可能的原因 中的解决办法)

    补充:mex 是一个用于编译MEX文件的MATLAB命令,将源代码编译为MEX文件,以便在MATLAB中使用。MEX文件是一种可以在MATLAB中调用的二进制可执行文件,它可以使用C、C++、Fortan等语言编写,并与MATLAB的数据和函数进行交互。

    Matlab 2020b 中安装与使用libsvm 第5张

    2.如果第一步顺利的话,就在命令行窗口输入 make ,然后运行。得到如下图所示的结果就是编译成功了!

    Matlab 2020b 中安装与使用libsvm 第6张

    3.查看matlab左侧得到目录栏是否有 后缀为.mexw64 的文件(因为我的系统是Windows  64位的,在不同的系统编译完成后出现的文件后缀名结果不同,比如:Linux 64位系统上是.mexa64)出现,如果存在,那么就完成了libsvm的编译工作。

    Matlab 2020b 中安装与使用libsvm 第7张

    编译失败的可能原因:

    1.最常见的一点就是没有安装编译器(注意:不同系统需要安装的编译器不一样哦,这里以介绍在Windows 系统下进行编译的编译器安装)

    解决办法:请参考这位博主的博客 ,博客链接:https://blog.csdn.net/github_35807147/article/details/80725642Matlab 2020b 中安装与使用libsvm 第8张https://blog.csdn.net/github_35807147/article/details/80725642

    应该可以解决问题。

    2.这是我自己遇到的错误,很低级的一个错误,没有进入到matlab文件夹所在的路径下运行命令,导致出现如下的错误:

    Matlab 2020b 中安装与使用libsvm 第9张

    Matlab 2020b 中安装与使用libsvm 第10张

    4.测试例子

    进行完成第三步后,下面来测试一下是否能正常使用libsvm进行预测。

    1.将libsvm 3.32文件下的测试数据集heart_scale复制粘贴到libsvm中matlab所在的文件夹下,如图所示:

    Matlab 2020b 中安装与使用libsvm 第11张

    2.依然是要进入到matlab路径下,此时在命令行窗口依次输入命令:

    % 读取测试数据集heart_scale

    [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);

    运行结果如图所示:

    Matlab 2020b 中安装与使用libsvm 第12张

    好了,以上就完成了下载与安装 libsvm 3.32的所有步骤了!

    二、使用libsvm 3.32

    1.标准格式的转换

    转换标准格式需要表格FormatDataLibsvm.xls(十分感谢博主 qq:843375677 博文中的链接:https://download.csdn.net/download/qq_31781741/10660504,以及这位善良好心的博主:https://www.jianshu.com/p/8dcde06319b1)

    下载这个表格后最好用 Excel 打开(这里我使用的是Excel 2016),打开后是一张空表格(如果上方提示禁用宏,记得要启用宏),随便输入一些数据(第二列是标签),并找到 宏 如图所示:

    Matlab 2020b 中安装与使用libsvm 第13张

    选择下拉框中的 查看宏,弹出关于宏的界面,这里选择 FormatDataToLibsvm,点击执行即可

    Matlab 2020b 中安装与使用libsvm 第14张

    执行后的结果如下图所示:

    Matlab 2020b 中安装与使用libsvm 第15张

    此时在图中第一列是标签

    最后将表格另存为txt格式的文本文件,文件名称随意,选择保存的类型为: 文本文件(指标符分隔),进行保存即可。如图所示,可以得到一个文件类型为txt的demo_data的文本文件:

    Matlab 2020b 中安装与使用libsvm 第16张Matlab 2020b 中安装与使用libsvm 第17张

    通过上述的运行可以看到, 使用该表格时需要运行(通常在编译阶段之前就被执行),输入数据时最后一列为标签,转换完成后,标签转至第一列。

    2.数据归一化

    1.将刚才保存的demo_data文本文件复制粘贴到libsvm-3.32下的windows文件夹中(如果一开始就保存到这个路径下就不需要执行这一步操作

    Matlab 2020b 中安装与使用libsvm 第18张

    2.你可以看到在windows文件夹中有后缀为.exe的可执行文件,但是双击后都是闪退的,无法直接双击运行,需要在 Windows 操作系统中的命令行解释器,也称为命令提示符cmd中进行执行。首先按下 win+R ,再输入cmd,点击确定,如图所示:

    Matlab 2020b 中安装与使用libsvm 第19张

    如下图所示,需要将保存的demo_data中的数据进行归一化处理,总共有4小步:

    (注意:实际情况根据自己的文件路径进行操作,下面演示的是我的情况)

    1.切换到E盘,按enter键

    2.需要将路径切换到libsvm-3.32中的windows文件夹所在的路径(除了手动输入,可以如图所示操作,找到要切换文件的路径,将文件拖拽到cmd命令行解释器中,就可以自动获取到要切换到的路径),按enter键

    Matlab 2020b 中安装与使用libsvm 第20张

    3.输入命令,对demo_data进行数据归一化处理,按enter键

    注意:其中第三句命令中的  “>”  这是重定向操作符,将命令的输出重定向到指定的文件

    4.这是第三步按下enter键后返回的最终结果

    Matlab 2020b 中安装与使用libsvm 第21张

    最终,如果对demo_data文本文件归一化处理成功后会在windows文件夹中找到demo_data_1文件,默认归一化范围 [0,1] 或 [-1,1]

    如图所示:

    Matlab 2020b 中安装与使用libsvm 第22张

    可以打开这两个文件,对比一下内容:

    Matlab 2020b 中安装与使用libsvm 第23张Matlab 2020b 中安装与使用libsvm 第24张

    3.训练以及预测

    libsvm主要用于做分类、回归任务,下面以回归任务为主介绍一下训练以及预测的过程

    首先将归一化得到的 demo_data_1.txt 文件复制粘贴到 ibsvm-3.32\matlab 目录下,如图所示:

    Matlab 2020b 中安装与使用libsvm 第25张

    在matlab所在的路径下,在命令行窗口中输入以下命令:

    % 读取文件demo_data_1.txt

    [ lable,im ] = libsvmread ( 'demo_data_1.txt' ) ;       

    %训练模型                                 

    model = svmtrain ( lable(1:5),im(1:5,:),'-s 4 -t 2 -c 1 -g 0.125' ) ;     

    %预测        

    [ prelabel,accuracy,decision_values ] = svmpredict (lable(6:10),im(6:10,:),model) ;             

    运行后的结果如下图所示:

    Matlab 2020b 中安装与使用libsvm 第26张

    还可以单独将返回的是三个值 prelabel , accuracy, decision_values 进行打印输出:

    Matlab 2020b 中安装与使用libsvm 第27张

    我还想对刚才的三句代码进行分析:

    1.读取文件

    [ lable,im ] = libsvmread ( 'demo_data_1.txt' ) ;   

    libsvmread函数用于从文件demo_data_1.txt中读取数据,这个文件中包含了支持向量机训练和测试所需的数据,读取后,标签lable和输入矩阵im将被赋值给相应的变量。

    2.训练模型

    model = svmtrain ( lable(1:5),im(1:5,:),'-s 4 -t 2 -c 1 -g 0.125' ) ; 

    svmtrain 函数用于训练支持向量机模型

    label(1:5)是前五个样本的标签

    im(1:5,:)是前五个样本的输入矩阵

    参数-s 4 表示使用epsilon-SVR模型,-t 2 表示使用径向基核函数(RBF kernel),-c 1 表示惩罚参数C的值为1,-g 0.125表示径向基核函数的gamma参数为0.125。

    3.预测

    [ prelabel,accuracy,decision_values ] = svmpredict (lable(6:10),im(6:10,:),model) ; 

    svmpredict 函数用于对新数据进行预测

    label (6:10) 是测试集中的标签

    im (6:10,:) 是测试集中的输入矩阵

    model 是之前训练好的支持向量机模型

    预测结果将会保存在 prelabel 变量中,预测的准确度保存在 accuracy 变量中,而决策值(decision values)则保存在 decision_values 变量中

    注意:这里的 label(1:5) 和 im(1:5,:) 以及 label (6:10) 和 im (6:10,:) ,是根据demo_data_1.txt文件中的数据内容来写的,不是随意写的。

    以上就是libsvm做回归任务的进行训练及预测的一个简单示例,剩下的就是参数寻优的过程了。

    in the end,再次感谢以上在文中提到的博主!如果对你有用,麻烦关注一下我,给个赞吧,谢谢!


    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]