LibLinear(SVM包)使用说明之(二)MATLAB接口

zouxy09@qq.com

http://blog.csdn.net/zouxy09

一、介绍

LIBLINEAR是一个简单的求解大规模规则化线性分类和回归的软件包。本文介绍在Matlab中如何使用该软件包。(http://www.csie.ntu.edu.tw/~cjlin/liblinear)

二、安装

在Windows系统中,预编译好的可执行文件在..\windows目录下。但我们提供的是64bit的,如果你的电脑是32bit的,则需要按照下面的步骤重新编译:

我们建议使用make.m来编译。直接在MATLAB or Octave中运行make即可在当前目录生成四个文件:'libsvmread.mex', 'libsvmwrite.mex', 'train.mex', 和'predict.mex'。

On MATLAB or Octave:

>> make

如果在MATLAB中,make.m出错了,可以尝试运行'mex -setup'来给mex选择一个合适的编译器。需要先确定你的编译器是可用的。

在Unix系统,如果make.m和mex -setup都无效,请用Makefile。注意我们的MATLAB是安装在'/usr/local/matlab'中的。如果不是的话,需要在Makefile的MATLABDIR改为我们matlab的安装目录。

三、用法

1、训练

matlab> model = train(training_label_vector, training_instance_matrix [,'liblinear_options', 'col']);

参数如下:

-training_label_vector:

训练样本的标签,mx1向量。注意必须是double类型。

-training_instance_matrix:

训练样本,mxn矩阵。每个样本为n维。它必须是稀疏的,而且必须是double类型。

-liblinear_options:

字符串格式的训练选项,格式和LIBLINEAR 一样。

-col:

如果设置了'col',training_instance_matrix的每一列是一个样本。否则每个行是一个样本。

注意:这里好像只接受两个字符串的参数。所以传多个参数的时候,要按以下的方式来传,例如:(predict函数同样)

train(train_Y,  train_X, '-c 1 -v 5', ' col');        //正确

train(train_Y,  train_X, '-c 1’, ‘ -v 5', ' col');   //错误

train(train_Y,  train_X, ' col');                 //错误

train(train_Y,  train_X, ' ', ' col');            //正确

2、测试

matlab> [predicted_label, accuracy, decision_values/prob_estimates] = predict(testing_label_vector, testing_instance_matrix, model [, 'liblinear_options', 'col']);

参数如下:

-testing_label_vector:

测试样本的标签,mx1向量。如果未知,那么就简单使用随机值。注意必须是double类型。

-testing_instance_matrix:

训练样本,mxn矩阵。每个样本为n维。它必须是稀疏的,而且必须是double类型。

-model:

训练得到的模型。

-liblinear_options:

字符串格式的测试选项,格式和LIBLINEAR 一样。

-col:

如果设置了'col',training_instance_matrix的每一列是一个样本。否则每个行是一个样本。

四、返回的模型结构

train函数会返回一个模型,这样我们可以用以未来的预测。模型是以结构形式保存的,组织为[Parameters, nr_class, nr_feature, bias, Label, w]:

-Parameters: 参数

-nr_class:类的个数,如果是回归,那么这个数是2.

-nr_feature: 训练数据的样本维数(不包括bias项)。

-bias: 如果bias >= 0,我们会在每个样本的最后添加一个额外的特征。

-Label: 每个类的标签,对回归来说,为空。

-w: 一个 nr_w x n权值矩阵。n是nr_feature(特征维数)或者nr_feature+1(存在bias项时)。如果nr_class=2,并且-s不是4(不是Crammer and Singer的多类SVM),那么nr_w是1,对于其他情况,nr_w等于nr_class。

如果指定了-v,那么就是交叉校验模式,返回的模型就是一个标量,对于分类器来说就是交叉校验的准确率,对回归来说,是均方误差。

五、预测结果

函数predict有三个输出。第一个是预测的标签构成的向量predicted_label。第二个输出是准确率,是一个包含准确率(对分类来说),均方误差和平方相关系数(对回归来说)的向量。第三个是一个包含决策值或者概率值(如果指定了'-b 1')的矩阵。如果k是类的数目,k’是分类器的数目(如果 k=2那 k'=1,否则k'=k),那对决策值矩阵,每行包括k’个二分类器的结果。对概率值矩阵,每行包括k个值,分别表示测试样本为为各类的概率值。注意的是,类的序列在这里和模型结构中的'Label'的域是一样的。

六、其他工具

[label_vector, instance_matrix] = libsvmread('data.txt');

Libsvmread函数可以读LIBSVM格式的文件。两个输出分别是标签labels 和样本集 instances,它们可以作为svmtrain 或者 svmpredict的输入。

libsvmwrite('data.txt', label_vector, instance_matrix]

libsvmwrite可以将参数以LIBSVM的格式写到文件中。instance_matrix必须是个稀疏矩阵。类型必须是double型。对windows,`libsvmread.mexw64' 和 `libsvmwrite.mexw64' 经编译后已经躺在目录`..\windows'下了。

七、例子

我们提供了数据heart_scale供训练和测试。

matlab> [heart_scale_label, heart_scale_inst] = libsvmread('../heart_scale'); %读数据

matlab> model = train(heart_scale_label, heart_scale_inst, '-c 1'); %训练

matlab> [predict_label, accuracy, dec_values] = predict(heart_scale_label, heart_scale_inst, model);  %测试

对概率估计,需要在测试阶段加上选项'-b 1':

matlab> [predict_label, accuracy, prob_estimates] = predict(heart_scale_label, heart_scale_inst, model, '-b 1');

需要注意的是,上面的指令的运行需要我们确认我们所在的目录,和那些mex文件所在的目录。我们也可以在Matlab目录下新建一个test_heart_scale.m 文件:

clear; clc;

tic;

[heart_scale_label, heart_scale_inst] = libsvmread('../heart_scale'); %读数据

model = train(heart_scale_label, heart_scale_inst, '-c 1'); %训练

[predict_label, accuracy, dec_values] = predict(heart_scale_label, heart_scale_inst, model);  %测试

toc;

运行上述文件,输出:

.......*

optimization finished, #iter = 71

Objective value = -121.108744

nSV = 194

Accuracy = 84.0741% (227/270)

Elapsed time is 0.006373 seconds.

好快啊!!!

LibLinear(SVM包)使用说明之(二)MATLAB接口相关推荐

  1. liblinear java_LibLinear(SVM包)使用说明之(三)实践

    LibLinear(SVM包)使用说明之(三)实践 我们在 UFLDL 的教程中, Exercise: Convolution and Pooling 这一章节,已经得到了 cnnPooledFeat ...

  2. LibLinear(SVM包)使用说明之(一)README

    LibLinear(SVM包)使用说明之(一)README LibLinear(SVM包)使用说明之(一)README zouxy09@qq.com http://blog.csdn.net/zoux ...

  3. LibLinear(SVM包)使用说明之(三)实践

    LibLinear(SVM包)使用说明之(三)实践 zouxy09@qq.com http://blog.csdn.net/zouxy09 我们在UFLDL的教程中,Exercise: Convolu ...

  4. Java程序调用MATLAB接口

    Java程序调用MATLAB接口 文章目录 Java程序调用MATLAB接口 一.注意事项 二.环境安装 三.MATLAB如何生成JAR包 四.MATLAB生成的JAR包如何引入到Java程序中 五. ...

  5. 深度学习之Windows下安装caffe及配置Python和matlab接口

    去年下半年看了相关目标检测的论文,一些传统的算法,一些CVPR,TPAMI,ECCV,ICCV,,NIPS,比较前沿的进展,主要都是基于深度学习卷积神经网络方面的,包括RCNN,SPP-NET,Fas ...

  6. 【股价预测】基于matlab SVM股票价格预测【含Matlab源码 180期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[股价预测]基于matlab SVM股票价格预测[含Matlab源码 180期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...

  7. java—使用反射对类进行操作(Class对象获取类名,包名,父类,接口,构造方法,普通方法,属性)

    (一)Class对象获取类名,包名,父类,接口 前提条件: 有两个接口IMessage,SystemEdition 一个父类Father 一个子类Son继承父类,实现两个接口IMessage,Syst ...

  8. 抓包工具Charles(二)-移动端APP抓包(设置手机代理、安装证书)

    安装好Charles之后,还只能捕获电脑的接口请求 想要抓取移动设备的APP还需要设置代理.安装证书. 文章目录 一.抓包原理 二.手机设置网络代理 1. 查看电脑的IP地址(local IP add ...

  9. 集群管理——开机B7问题(内存条ERROR),caffe编译matlab接口错误解决方法

    开机B7问题 之前闲置了一台计算主机,今天开机发现一直卡在SYSTEM initializing 右下角自检显示卡在B7,开不了机进入BIOS都不行.期初以为是BIOS的问题,于是大费周章地拆开机箱, ...

最新文章

  1. ubuntu中常用指令
  2. 判断一个变量是不是数组
  3. centos6.4下安装jdk
  4. Blazor VS React / Angular / Vue.js
  5. 驻马店市机器人科技馆_科技创新体验馆,科技馆机器人
  6. 软件_搭建rtsp视频推送环境
  7. 机器学习的行业与场景总结
  8. oracle 删除用户和依赖,Oracle 12.2使用手动创建与注册依赖对象来执行联机重定义...
  9. mysql+alter+int_MySQL Alter命令
  10. 康华光《电子技术基础-模拟部分》第5版笔记和课后习题答案
  11. 内网渗透测试:隐藏通讯隧道技术
  12. H5传奇源码,附带微信支付,商城系统,新增了元宝交易商城系统源码
  13. Pixi官方文档译文(1)
  14. 【Linux修炼】开篇
  15. 乐乐课堂_leleketang.com
  16. 李成名:科学就是较真 数字城市/智慧城市就是跑马圈地
  17. 自媒体必看:这3个领域别做,起步慢、收益低
  18. 无线授时服务器接LED屏,实现ipad远程无线控制led大屏幕分以下几个步骤!
  19. 机器人简化图画手绘图_如何画机器人的简笔画 经验告诉你该这样
  20. Android自定义view之围棋动画

热门文章

  1. 小汤学编程之JavaEE学习day08——Maven
  2. python常用模块之requests
  3. Tomcat整体介绍
  4. Mac下使用tree命令
  5. C# 禁止修改已装箱了的值类型的字段值,但是可以通过接口的方式实现
  6. Android之自定义checkbox样式
  7. DOS 批处理 修改xml文件
  8. Flutter 一个电话样式小控件
  9. Linux 环境下 gzip 的加解密命令
  10. 如何让DIV模块随着页面固定和不固定