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

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

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

[email protected]

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.

好快啊!!!

时间: 2024-10-15 09:03:26

LibLinear(SVM包)使用说明之(二)MATLAB接口的相关文章

caffe 在window下编译(windows7, cuda8.0,matlab接口编译)

1. 环境:Windows7,Cuda8.0,显卡GTX1080,Matlab2016a,VS2013   (ps:老板说服务器要装windows系统,没办法,又要折腾一番) 2.下载caffe 包:https://github.com/BVLC/caffe/tree/windows 按照Github上的命令行就行: 这里的Projects是自己在本地新建的文件夹,随便放在哪里,如果git没有安装的话,先安装git,百度git即可. 执行前3个命令之后,就把caffe包下载下来了. 在运行bui

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

LibLinear(SVM包)使用说明之(一)README LibLinear(SVM包)使用说明之(一)README [email protected] http://blog.csdn.net/zouxy09 本文主要是翻译liblinear-1.93版本的README文件.里面介绍了liblinear的详细使用方法.更多信息请参考: http://www.csie.ntu.edu.tw/~cjlin/liblinear/ 在这里我用到的是LibLinear的Matlab接口,这个在下一博文

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

LibLinear(SVM包)使用说明之(三)实践 LibLinear(SVM包)使用说明之(三)实践 [email protected] http://blog.csdn.net/zouxy09 我们在UFLDL的教程中,Exercise: Convolution and Pooling这一章节,已经得到了cnnPooledFeatures.mat特征.在该练习中,我们使用的是softmax分类器来分类的.在这里我们修改为用SVM来替代softmax分类器.SVM由Liblinear软件包来提

LibLinear(SVM包)的MATLAB安装

LibLinear(SVM包)的MATLAB安装 1 LIBSVM介绍 LIBSVM是众所周知的支持向量机分类工具包(一些支持向量机(SVM)的开源代码库的链接及其简介),运用方便简单,其中的核函数(常用核函数-Kernel Function)可以自己定义也可以默认.但是对一些大数据来说,有没有非线性映射,他们的性能差不多.如果不使用核,我们可以用线性分类或者回归来训练一个更大的数据集.这些数据往往具有非常高维的特征,例如文本分类Document classification.所以LIBSVM就

win7下编译Microsoft版的caffe包的MATLAB接口(CPU模式)

本博客是基于http://www.cnblogs.com/njust-ycc/p/5776286.html这篇博客修改的,做出了更正与补充. 本人机器的环境:Win7+MATLAB2014b+VS2013 1.首先去github上下载Microsoft的caffe包,地址:https://github.com/microsoft/caffe 下载完后,解压得到: 把   caffe-master\windows   路径下的 CommonSettings.props.example 复制一份,并

sparklyr包--实现R与Spark接口

1.sparklyr包简介 Rstudio公司发布的sparklyr包具有以下几个功能: 实现R与Spark的连接: sparklyr包提供了一个完整的dplyr后端,可筛选并聚合Spark数据集,接着在R中实现分析与可视化: 利用Spark的MLlib机器学习库在R中实现分布式机器学习算法: 可以创建一个扩展,用于调用Spark API,并为Spark的所有包集提供了一个接口. 2.RStudio Server安装sparklyr包 Linux版本:Ubuntu 16.04 LTS 64bit

C语言与MATLAB接口 编程与实例 李传军编着

罗列一下以前自己学习C语言与MATLAB混编的笔记,顺便复习一遍. <C语言与MATLAB接口 编程与实例 李传军编着>(未看完,目前看到P106) 目录P4-8 ****************************************************** C-MEX函数:从MATLAB调用C语言或Fortran语言编写的函数. MEX文件:是一种按一定格式,使用C语言或者FORTRAN语言编写的,由MATLAB解释器自动调用并执行的动态链接函数.在Windows系统中,MEX

window10系统下caffe的安装及配置matlab接口(显卡为1080)

caffe一般是在linux系统下安装,网上关于windows下安装教程教程,且每个教程都不是很全,我在这边总结一下流程及所有bug 的解决办法. 我是在win10+GTX1080+VS2013,matlab接口我是matlab2016a. 1.先安装visual studio 2013.这个没什么太大的难度,到网上下载安装就行 2.下载caffe.https://github.com/Microsoft/caffe,点击 Clone or download-> Download ZI 解压缩,

ubuntu下 编译Caffe的Matlab接口

一般情况下不愿意使用Caffe的Matlab接口,总觉得Linux版的Matlab很难配置,但是现在搞目标检测,得到的源码是使用的Caffe的Matlab接口,只能硬着头皮上了. (1)修改caffe-master/Makefile.config 这一步主要是在Caffe的编译配置文件Makefile.config中加入Matlab的路径.注意路径文件夹是要包含Matlab安装目录的“bin”文件夹的. (2)编译接口.这里默认已经编译好了Caffe源码主体部分.所以直接编译接口.在caffe-