Liblinear使用
来源:互联网 发布:陈冠希道歉 知乎 编辑:程序博客网 时间:2024/06/11 03:37
Liblinear—一个适用于大规模数据的线性分类库
摘要
Liblinear是一个用于大规模数据分类的开源库,支持逻辑回归和向量机。同时,liblinear还为开发者提供了好用的命令行和库接口。不管是开发者还是深层次的使用者,liblinear都有对应的文档供其查阅。实验证明,liblinear对于大规模数据分析十分有效。
关键词:大规模线性分类,逻辑回归,支持向量机SVM,开源,机器学习
1. 引言
对于文本分类等很多应用来说,大规模的数据分类是必须要解决的问题。拥有众多属性的海量数据的分析,线性分类是最好的技术。Liblinear正是因此而诞生。它支持L2常规逻辑回归,L2和L1无损线性分类并支持向量机。同时,它继承了如今比较热门的LIBSVM的很多特性,入:简单可用,文档全,开源。Liblinear对于大规模数据的训练十分有效。举例来说,一次超出600,000条路透社语音实例的训练只需要几秒钟。而同样的训练,普通的SVM实现,比如说LIBSVM,需要几个小时。不仅如此,Liblinear甚至比国家最快的线性分类器(Pegasos)还要快。
本文章节安排如下。第二,三章介绍Liblinear的设计和实现。第四章进行性能上的比较。
2. 大型线性分类(可以试二元或者多级数据)
Liblinear支持两个热门的二元线性分类器:常规逻辑回归LR和线性SVM。给出一组实例标签(xi,yi),i=1,...l,xi∈Rn,yi∈{-1,1},这两个分类器使用了不同的损失算法解决下面的约束优化问题。其中,C是大于0的惩罚因子。对于SVM来说,有两个常用的损失算法max(1-yiwTxi,0)和max(1-yiwTxi,0)2,分别指的是L1-SVM和L2-SVM。对LR来说,损失算法是log(1+e-yiwTxi),得自一个概率模型。在有些案例中,分类器的判别式还要包含一个偏差项b。Liblinear通过对每个实例和纬度加强影响来实现偏差:wT<-[wT,b],XiT<-[XiT,B].其中B是用户指定的常量。与此不同,L1-SVM和L2-SVM的算法是坐标下降法。Liblinear为L2-SVM和LR都实现了信任区域的牛顿方法。在测试阶段,我们预测一个数据点上x>0,如果WTx>0.对于多元实例训练,我们为之提供了1Vrest的策略。
3. 软件包
Liblinear为数据训练提供库文件和命令行工具,它的设计很大程度受LibSVM的影响,有相似的API和使用方法。使用者可以比较容易地使用这两个库。不过,虽然API相似,Liblinear和LIbSVM训练得到的模型却截然不同。简单来说,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倍的交叉验证分别为LR,L1-SVM和L2-SVM求得C参数,接着来训练并预测。图1比较了Liblinear和L1-SVM的两个求解状态,显而易见LIblinear卓有成效。这些代码都可以在网站上得到。
- Liblinear使用
- libsvm liblinear 使用心得
- Liblinear的使用
- weka中使用Liblinear
- LibLinear
- liblinear
- libsvm和liblinear的使用
- 在python中使用liblinear
- weka 3.7 中使用LIBSVM和liblinear
- Libsvm和Liblinear的使用经验谈
- Libsvm和Liblinear的使用经验谈
- Libsvm和Liblinear的使用经验谈
- Libsvm和Liblinear的使用经验谈
- Libsvm和Liblinear的使用经验谈
- Libsvm和Liblinear的使用经验谈<转>
- Liblinear的安装使用的问题
- libsvm和liblinear的使用总结
- liblinear怎么使用grid.py搜索
- iOS开发中一些高效常用的宏
- C#:总结记录2014-11
- 水电费的所发生的
- 的风格的风格
- js html双向绑定Demo
- Liblinear使用
- Android 未接来电及未读短彩信的监听实现
- 实现c++类的多重继承
- QSettings读写注册表和ini文件
- 下拉菜单隐藏箭头
- Symmetric Tree-LeetCode
- 密码框提示文字
- C++默认参数
- oracle表空间查询维护命令大全之三(临时表空间)史上最全