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

相关文章

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

Python中help()和dir()函数的使用

《Python中help()和dir()函数的使用》我们经常需要查看某个对象(如模块、类、函数等)的属性和方法,Python提供了两个内置函数help()和dir(),它们可以帮助我们快速了解代... 目录1. 引言2. help() 函数2.1 作用2.2 使用方法2.3 示例(1) 查看内置函数的帮助(

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

LiteFlow轻量级工作流引擎使用示例详解

《LiteFlow轻量级工作流引擎使用示例详解》:本文主要介绍LiteFlow是一个灵活、简洁且轻量的工作流引擎,适合用于中小型项目和微服务架构中的流程编排,本文给大家介绍LiteFlow轻量级工... 目录1. LiteFlow 主要特点2. 工作流定义方式3. LiteFlow 流程示例4. LiteF

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

Maven 配置中的 <mirror>绕过 HTTP 阻断机制的方法

《Maven配置中的<mirror>绕过HTTP阻断机制的方法》:本文主要介绍Maven配置中的<mirror>绕过HTTP阻断机制的方法,本文给大家分享问题原因及解决方案,感兴趣的朋友一... 目录一、问题场景:升级 Maven 后构建失败二、解决方案:通过 <mirror> 配置覆盖默认行为1. 配置示

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔