Liblinear使用

来源:互联网 发布:陈冠希道歉 知乎 编辑:程序博客网 时间:2024/06/11 03:37
本文翻译自:台湾林智仁教授《LIBLINEAR: A Library for Large Linear Classi\u000Ccation》。
详见:http://www.csie.ntu.edu.tw/~cjlin/

Liblinear—一个适用于大规模数据的线性分类库

摘要

Liblinear是一个用于大规模数据分类的开源库,支持逻辑回归和向量机。同时,liblinear还为开发者提供了好用的命令行和库接口。不管是开发者还是深层次的使用者,liblinear都有对应的文档供其查阅。实验证明,liblinear对于大规模数据分析十分有效。

关键词:大规模线性分类,逻辑回归,支持向量机SVM,开源,机器学习

 

1.       引言

对于文本分类等很多应用来说,大规模的数据分类是必须要解决的问题。拥有众多属性的海量数据的分析,线性分类是最好的技术。Liblinear正是因此而诞生。它支持L2常规逻辑回归,L2L1无损线性分类并支持向量机。同时,它继承了如今比较热门的LIBSVM的很多特性,入:简单可用,文档全,开源。Liblinear对于大规模数据的训练十分有效。举例来说,一次超出600,000条路透社语音实例的训练只需要几秒钟。而同样的训练,普通的SVM实现,比如说LIBSVM,需要几个小时。不仅如此,Liblinear甚至比国家最快的线性分类器(Pegasos)还要快。

本文章节安排如下。第二,三章介绍Liblinear的设计和实现。第四章进行性能上的比较。

 

2.       大型线性分类(可以试二元或者多级数据)

Liblinear支持两个热门的二元线性分类器:常规逻辑回归LR和线性SVM。给出一组实例标签(xi,yi,i=1,...l,xiRnyi{-1,1},这两个分类器使用了不同的损失算法解决下面的约束优化问题。其中,C是大于0的惩罚因子。对于SVM来说,有两个常用的损失算法max1-yiwTxi,0max1-yiwTxi,02,分别指的是L1-SVML2-SVM。对LR来说,损失算法是log1+e-yiwTxi,得自一个概率模型。在有些案例中,分类器的判别式还要包含一个偏差项bLiblinear通过对每个实例和纬度加强影响来实现偏差:wT<-[wT,b],XiT<-[XiT,B].其中B是用户指定的常量。与此不同,L1-SVML2-SVM的算法是坐标下降法。LiblinearL2-SVMLR都实现了信任区域的牛顿方法。在测试阶段,我们预测一个数据点上x>0,如果WTx>0.对于多元实例训练,我们为之提供了1Vrest的策略。

 

3.  软件包

Liblinear为数据训练提供库文件和命令行工具,它的设计很大程度受LibSVM的影响,有相似的API和使用方法。使用者可以比较容易地使用这两个库。不过,虽然API相似,LiblinearLIbSVM训练得到的模型却截然不同。简单来说,Liblinear的模型包含了w,而LibSVM没有。所以,不能混淆这两个包。在本章中着重介绍LIblinear的各个方面。

 

3.1 应用

我们使用的数据集是news20,有超过百万个feature。以news20为例来描述训练和测试过程。使用默认的分类器L2-SVM

$ train news20.binary.tr

[output skipped]

$ predict news20.binary.t news20.binary.tr.model prediction

Accuracy=96.575%(3863/4000)

整个过程(训练和测试)用了不到15秒。训练时间除掉硬盘I/O还不到1秒。除了前面这基本的调用,Liblinear还可以设置很多参数实现组咋的应用。举例来说,可以指定参数得到逻辑回归的概率输出。

 

3.2 文档

       Liblinear的包带着大量的文档,包括readme文件,描述了安装过程,命令行的使用和库函数调用。用户可以通过快速启动模块开始使用。对开发者来讲,要在代码中用到库调用,API的说明在库使用模块。所有的接口方法和数据结构都有介绍。Train.c,predict.c就是很好的实例。

 

3.3 设计

       主要的设计思路就是让整个Liblinear简单好用,源代码通俗易懂。库文件包括代码,预编译的二进制文件,文档说明和语言绑定。所有的源代码遵循C/C++标准,没有任何依赖的外部库。几乎在所有平台上都可以得到运行。

       Linear.cpp中是库函数的实现。Train()针对数据文件和预测函数得到一个分类器,并用此来预测实例。train()进行多个二元分类,实现1VR的策略,来解决多元问题,每一个二元分类都要调用trainone()trainone()接着调用用户选定的solver算法。

 

4.    性能比较

篇幅所限,细节不再赘述,都可参阅LIN. 仅说明这点:Liblinear精度之高,轻松成为

最佳结局方案。我们经过5倍的交叉验证分别为LRL1-SVML2-SVM求得C参数,接着来训练并预测。图1比较了LiblinearL1-SVM的两个求解状态,显而易见LIblinear卓有成效。这些代码都可以在网站上得到。

0 0
原创粉丝点击