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

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

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.mmex -setup都无效,请用Makefile。注意我们的MATLAB是安装在'/usr/local/matlab'中的。如果不是的话,需要在MakefileMATLABDIR改为我们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权值矩阵。nnr_feature(特征维数)或者nr_feature+1(存在bias项时)。如果nr_class=2,并且-s不是4(不是Crammer and Singer的多类SVM),那么nr_w1,对于其他情况,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.

         好快啊!!!

 

LibsvmLiblinear使用经验谈 LibsvmLiblinear都是国立台湾大学的Chih-Jen Lin博士开发的,Libsvm主要是用来进行非线性svm 分类器的生成,提出有一段时间了,而Liblinear则是去年才创建的,主要是应对large-scale的data classification,因为linear分类器的训练比非线性分类器的训练计算复杂度要低很多,时间也少很多,而且在large scale data上的性 阅读详情

相关推荐

一些支持向量机(SVM)的开源代码库的链接及其简介

(1)LIBSVM:     http://www.csie.ntu.edu.tw/~cjlin/libsvm/ LIBSVM is an integrated software for support vector classification, (C-SVC, nu-SVC), regression (epsilon-SVR, nu-SVR) and distribution est

计算机视觉小菜鸟的专栏 1万+

liblinear使用说明

Liblinear是一个简单的解决大规模线性化分类和回归问题的软件。它目前支持: -L2正则化逻辑回归/L2损失支持向量分类/L1损失支持向量分类法 -L1正则化L2损失支持向量分类/L1正则化逻辑回归 -L2正则化L2损失支持向量回归/L1损失支持向量回归。 这篇文献介绍了Liblinear的用法。 首先,请先阅读“快速入门”部分。 对于开发人员,请检查“库的使用”部分学习如何在你的软件中...

mj412828668的博客 1万+

【机器学习】liblinear使用说明(翻译)

LIBLINEAR是一个简单的软件,用于解决大规模正则化线性分类、回归和异常检测问题。它目前支持以下方法:L2-正则化逻辑回归/L2-损失支持向量分类/L1-损失支持向量分类L1-正则化L2-损失支持向量分类/L1-正则化逻辑回归L2-正则化L2-损失支持向量回归/L1-损失支持向量回归单类支持向量机。本文档介绍了LIBLINEAR使用方法。要开始使用,请先阅读快速入门''部分。对于开发者,请...

cxyhjl的博客 1957

LibLinearSVM使用说明之(一)README

LibLinearSVM使用说明之(一)READMEzouxy09@qq.comhttp://blog.csdn.net/zouxy09  本文主要是翻译liblinear-1.93版本的README文件。里面介绍了liblinear的详细使用方法。更多信息请参考:http://www.csie.ntu.edu.tw/~cjlin/liblinear/ 在这里我用到的是LibLinear的M

zouxy09的专栏 7万+

MATLAB上安装LIBLINEAR的详细步骤

最近在学习论文:A New Approach to Cross-Modal Multimedia Retrieval运行demo_sm的时候一直提示train有问题,后来知道源代码是基于linux下的matlab编译的,用到liblinear中的train和predict函数,需要在windows下进行编译,这个问题纠结了好几天,后来放弃了,昨天晚上重新查找问题,看readme文件,才知道要安装l...

初学者的博客 3442

LibLinearSVM)的MATLAB安装

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

weixin_34259232的博客 249

matlabmatlab安装liblinear

需要用到LIBLINEAR,但是在安装的过程中遇到了一些问题,在这里总结如下,希望对大家有用。 也希望和大家在这里一起交流,一起学习,一起进步。 安装环境: 系统:Win7(64位) MATLAB版本:MATLAB R2017a LIBLINEAR版本:liblinear-2.11 具体安装步骤如下: 1. 下载liblinear-2.11安装。 下载地址:http:...

zkq_1986的博客 1071

【人工智能】liblinear的帮助文档翻译

Python(http://www.python.org/)是一种适合快速编程的编程语言发展。该工具为LIBLINEAR(一个库)提供了一个简单的Python接口用于支持向量机(http://www.csie.ntu.edu.tw/~cjlin/liblinear)。该界面非常易于使用,因为其用法与LIBLINEAR的用法相同。该界面是使用内置的Python库“ctypes”开发的。

沙师弟专栏 1万+

LibLinearSVM使用说明

LibLinearSVM使用说明之(一)README zouxy09@qq.com http://blog.csdn.net/zouxy09         本文主要是翻译liblinear-1.93版本的README文件。里面介绍了liblinear的详细使用方法。更多信息请参考:        http://www.csie.ntu.edu.tw/~cjli

CSLDBLYDX的专栏 705
上一篇: LibLinear(SVM包)使用说明之(一)README
下一篇: LibLinear(SVM包)使用说明之(三)实践
zouxy09
博客等级 码龄15年 3万+粉丝 115原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值