LibLinear(SVM包)使用说明之(二)MATLAB接口
LibLinear(SVM包)使用说明之(二)MATLAB接口
LibLinear(SVM包)使用说明之(二)MATLAB接口
一、介绍
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接口的更多相关文章
- caffe 在window下编译(windows7, cuda8.0,matlab接口编译)
1. 环境:Windows7,Cuda8.0,显卡GTX1080,Matlab2016a,VS2013 (ps:老板说服务器要装windows系统,没办法,又要折腾一番,在VS下编译好像在cuda8. ...
- LibLinear(SVM包)使用说明之(一)README
转自:http://blog.csdn.net/zouxy09/article/details/10947323/ LibLinear(SVM包)使用说明之(一)README zouxy09@qq.c ...
- LibLinear(SVM包)使用说明之(三)实践
LibLinear(SVM包)使用说明之(三)实践 LibLinear(SVM包)使用说明之(三)实践 zouxy09@qq.com http://blog.csdn.net/zouxy09 我们在U ...
- LibLinear(SVM包)的MATLAB安装
LibLinear(SVM包)的MATLAB安装 1 LIBSVM介绍 LIBSVM是众所周知的支持向量机分类工具包(一些支持向量机(SVM)的开源代码库的链接及其简介),运用方便简单,其中的核函数( ...
- win7下编译Microsoft版的caffe包的MATLAB接口(CPU模式)
本博客是基于http://www.cnblogs.com/njust-ycc/p/5776286.html这篇博客修改的,做出了更正与补充. 本人机器的环境:Win7+MATLAB2014b+VS20 ...
- windows下caffe安装配置、matlab接口
一.CommonSettings.props caffe下载后解压.源代码文件夹caffe-master,到该文件夹下的windows文件夹下,将CommonSettings.props.exampl ...
- caffe在windows 下的配置及matlab接口编译(无GPU)
本人机子windows 10,matlab2015a,vs2013(官网使用的是vs2013) 1.首先去github上下载caffe的windows包,地址:https://github.com/B ...
- sparklyr包--实现R与Spark接口
1.sparklyr包简介 Rstudio公司发布的sparklyr包具有以下几个功能: 实现R与Spark的连接: sparklyr包提供了一个完整的dplyr后端,可筛选并聚合Spark数据集,接 ...
- C语言与MATLAB接口 编程与实例 李传军编着
罗列一下以前自己学习C语言与MATLAB混编的笔记,顺便复习一遍. <C语言与MATLAB接口 编程与实例 李传军编着>(未看完,目前看到P106) 目录P4-8 ************ ...
随机推荐
- plot函数功能总结
基本形式 >> y=[1 2 3 4 5 6]; >> plot(y) 生成的图形是以序号为横坐标.数组y的数值为纵坐标画出的折线. >> x=linspace(0 ...
- mysql查找重复
중복된 것 모두 찾기 SELECT 필드명, count(*) FROM 테이블명 GROUP BY 필드명 mysql> SELECT t1, count(*) FROM tes ...
- http请求之referer头与防盗链
在网页中的占用大流量的信息可以写成这个信息在网络上的url位置,这样就会减少本网站的流量,但是其他网站也 不会随意让你使用人家的资源,因为这样的情对人家的网站没有好处,会增加人家网站的流量,所以要防止 ...
- system.badimageformatexception 未能加载文件或程序集
今天在调用dll文件的时候发现这样一个错误. system.badimageformatexception 未能加载文件或程序集. 发现项目CPU默认Any CPU,我的系统是X64,将 ...
- 20160526-20160531mybatis入门进阶
mybatis第二天 高级映射 查询缓存 和spring整合 课程复习: mybatis是什么? mybatis是一人持久层框架,mybatis是一个不完全的ORM框架.sql语句需要程序员自己去编 ...
- CPrintDialog
CPrintDialog 封装windows为打印提供服务的通用窗体. BOOL GetDefaults(); //获取默认设备,不显示对话框 // Helpers for parsing infor ...
- XML文件的解析方式
XML文件4种解析方式分别是:DOM解析,SAX解析,JDOM解析,DOM4J解析.1.基础方法:DOM:与平台无关的官方的解析方式.SAX:Java平台提供的基于事件驱动的解析方式.2.扩展方法(在 ...
- iOS 隔离导航控制器
题外话:最近这两个月一直很闲,项目上基本没有啥大的需求.对于程序员来说,如果没有需求其实是一件很难受的事情,之前好多次在项目中没事找事,该优化的优化,该整理的整理.可能好多程序员都遇到过与我类似的情况 ...
- Codevs 1069 关押罪犯 2010年NOIP全国联赛提高组
1069 关押罪犯 2010年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description S 城现有两座监狱,一共 ...
- windows10和ubuntu16.04双系统下时间不对的问题
最近装了windows10和ubuntu16.04双系统,仍然出现了喜闻乐见的老问题,装完后,在windows下时区不对,之前的老办法是: sudo gedit /etc/default/rcS ut ...