libsvm在matlab中的使用方法

2024-09-08 12:08
文章标签 matlab 使用 方法 libsvm

本文主要是介绍libsvm在matlab中的使用方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文地址:libsvm在matlab中的使用方法 作者: lwenqu_8lbsk
前段时间,gyp326曾在论坛里问libsvm如何在matlab中使用,我还奇怪,认为libsvm是C的程序,应该不能。没想到今天又有人问道,难道matlab真的能运行libsvm。我到官方网站看了下,原来,真的提供了matlab的使用接口。

接口下载在: http://www.csie.ntu.edu.tw/~cjlin/libsvm/index.html#matlab

具体使用方法zip文件里有readme说明,我也按照说明尝试的试用了一下,方法介绍如下。

使用的接口版本:
MATLABA simple MATLAB interfaceLIBSVM authors at National Taiwan University.2.89http://www.csie.ntu.edu.tw/~cjlin/libsvm/matlab/libsvm-mat-2.89-3.zip

使用的运行环境为:
matlab 7.0, VC++ 6.0, XP系统。

按照说明使用方法如下:

1. 下载下来的借口包里有svm的一些源文件,没有可执行的exe文件,所以,必须先将svmtrain等源文件编译为matlab可以使用的dll等文件。于是先选择编译器,如下:

>> mex -setup
Please choose your compiler for building external interface (MEX) files:

Would you like mex to locate installed compilers [y]/n? y

Select a compiler:
[1] Digital Visual Fortran version 6.0 in C:Program FilesMicrosoft Visual Studio
[2] Lcc C version 2.4 in D:MATLAB7syslcc
[3] Microsoft Visual C/C++ version 6.0 in D:Program FilesMicrosoft Visual Studio

[0] None

Compiler: 3

Please verify your choices:

Compiler: Microsoft Visual C/C++ 6.0
Location: D:Program FilesMicrosoft Visual Studio

Are these correct?([y]/n): y

Try to update options file: C:Documents and Settingsjink2005.AISEMINA-D6623EApplication DataMathWorksMATLABR14me xopts.bat
From template:                    D:MATLAB7BINWIN32mexoptsms vc60opts.bat

Done . . .

我选择使用VC 6.0,其他可能不行。编译器选择好后,使用make.m进行编译。

make.m的代码如下:

CODE:

% This make.m is used under Windows
mex -O -c svm.cpp
mex -O -c svm_model_matlab.c
mex -O svmtrain.c svm.obj svm_model_matlab.obj
mex -O svmpredict.c svm.obj svm_model_matlab.obj
mex -O libsvmread.c
mex -O libsvmwrite.c
可见,就是用来编译几个源文件为可使用的目标文件。调用如下:

>> make

结束后,当前目录中多了如下文件

[转载]libsvm在matlab中的使用方法
make-libsvm1.JPG



2. 接下来就可以按照用例使用matlab版的libsvm了,使用过程如下:

>> load heart_scale.mat
>> model = svmtrain(heart_scale_label, heart_scale_inst, '-c 1 -g 0.07');

产生的model结构如下:

[转载]libsvm在matlab中的使用方法
make-libsvm2.JPG



>> [predict_label, accuracy, dec_values] = svmpredict(heart_scale_label, heart_scale_inst, model);
Accuracy = 86.6667% (234/270) (classification)
>>

结束后,workspace中的内容如下:

[转载]libsvm在matlab中的使用方法
make-libsvm3.JPG



我的运行完全没有问题,如果你的有问题,请多多交流。注意下你是用的编译器,和matlab版本。
jink2005 (2009-8-17 14:56:15)
在matlab的libsvm使用的数据格式如下:
>> load heart_scale.mat
将训练数据载到到workspace中,其中,数据如下:

[转载]libsvm在matlab中的使用方法
libsvm_mat1.JPG


这里有两个数组:一个是n * 13维的数组,是训练数据的特征数据;另一个是n * 1维的列向量,对应前一数组,是特征对应的分类号。

其实,大家组织数据时,只要把特征向量,和类标志读到matlab的workspace中,就行了,就是普通的数组。

特征数据组织成这样:

[转载]libsvm在matlab中的使用方法
libsvm_mat2.JPG



对应的类别单独放在另一个变量:

[转载]libsvm在matlab中的使用方法
libsvm_mat3.JPG



这种格式的数据整理很简单,如在文本文件txt中,你就可以直接放一个和上图结构类似的数据,如下,然后用textread或dlmread读入workspace就行了。

iris_inst.txt
5.1 3.5 1.4 0.2
4.9 3.0 1.4 0.2
4.7 3.2 1.3 0.2
4.6 3.1 1.5 0.2
5.0 3.6 1.4 0.2
5.4 3.9 1.7 0.4
4.6 3.4 1.4 0.3
5.0 3.4 1.5 0.2
……

iris_label.txt
1
1
1
1
1
1
1
1
……

也可以整理到excel表格中,直接用xlsread读入。更简单的是在workspace标签旁的current file中直接双击这样的数据文件就导入到workspace中了。

使用时,根据你自己的训练样本的特征数组、类别数组,对例子中的参数做对应替换就行了。
>> model = svmtrain(heart_scale_label, heart_scale_inst, '-c 1 -g 0.07');
自己使用时,heart_scale_label换成你自己的类别,heart_scale_inst换成自己的特征属性矩阵。

这个运行后就得到了训练后的model模型。

下面就要使用model进行预测了:
>> [predict_label, accuracy, dec_values] = svmpredict(heart_scale_label, heart_scale_inst, model);

预测使用的数据格式和训练样本的相同,heart_scale_label换为你测试样本的类别列向量,heart_scale_inst换成你测试样本的特征属性矩阵。运行结果,就在predict_label, accuracy, dec_values三个变量中。

我的理解是,类别预测时,预测的类别放在predict_label中;回归预测时,结果放在dec_values中。这是我的大致猜测,readme里肯定有说明。大家自己看看吧。
小小刘 (2009-8-17 15:33:45)
[i=s] 本帖最后由 小小刘 于 2009-8-17 16:06 编辑

这篇关于libsvm在matlab中的使用方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1148066

相关文章

C#使用yield关键字实现提升迭代性能与效率

《C#使用yield关键字实现提升迭代性能与效率》yield关键字在C#中简化了数据迭代的方式,实现了按需生成数据,自动维护迭代状态,本文主要来聊聊如何使用yield关键字实现提升迭代性能与效率,感兴... 目录前言传统迭代和yield迭代方式对比yield延迟加载按需获取数据yield break显式示迭

使用SQL语言查询多个Excel表格的操作方法

《使用SQL语言查询多个Excel表格的操作方法》本文介绍了如何使用SQL语言查询多个Excel表格,通过将所有Excel表格放入一个.xlsx文件中,并使用pandas和pandasql库进行读取和... 目录如何用SQL语言查询多个Excel表格如何使用sql查询excel内容1. 简介2. 实现思路3

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

c# checked和unchecked关键字的使用

《c#checked和unchecked关键字的使用》C#中的checked关键字用于启用整数运算的溢出检查,可以捕获并抛出System.OverflowException异常,而unchecked... 目录在 C# 中,checked 关键字用于启用整数运算的溢出检查。默认情况下,C# 的整数运算不会自

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

Mybatis官方生成器的使用方式

《Mybatis官方生成器的使用方式》本文详细介绍了MyBatisGenerator(MBG)的使用方法,通过实际代码示例展示了如何配置Maven插件来自动化生成MyBatis项目所需的实体类、Map... 目录1. MyBATis Generator 简介2. MyBatis Generator 的功能3

Python中使用defaultdict和Counter的方法

《Python中使用defaultdict和Counter的方法》本文深入探讨了Python中的两个强大工具——defaultdict和Counter,并详细介绍了它们的工作原理、应用场景以及在实际编... 目录引言defaultdict的深入应用什么是defaultdictdefaultdict的工作原理

使用Python进行文件读写操作的基本方法

《使用Python进行文件读写操作的基本方法》今天的内容来介绍Python中进行文件读写操作的方法,这在学习Python时是必不可少的技术点,希望可以帮助到正在学习python的小伙伴,以下是Pyth... 目录一、文件读取:二、文件写入:三、文件追加:四、文件读写的二进制模式:五、使用 json 模块读写

Python使用qrcode库实现生成二维码的操作指南

《Python使用qrcode库实现生成二维码的操作指南》二维码是一种广泛使用的二维条码,因其高效的数据存储能力和易于扫描的特点,广泛应用于支付、身份验证、营销推广等领域,Pythonqrcode库是... 目录一、安装 python qrcode 库二、基本使用方法1. 生成简单二维码2. 生成带 Log

Python如何使用seleniumwire接管Chrome查看控制台中参数

《Python如何使用seleniumwire接管Chrome查看控制台中参数》文章介绍了如何使用Python的seleniumwire库来接管Chrome浏览器,并通过控制台查看接口参数,本文给大家... 1、cmd打开控制台,启动谷歌并制定端口号,找不到文件的加环境变量chrome.exe --rem