我有一个大型数据集,正在尝试为其构建一个DAgger分类器。正如你所知,在训练期间,我需要在训练实例上运行初始学习的分类器(对它们进行预测),每次处理一个实例。
即使是初始学习,Libsvm也太慢了。
我正在使用OLL,但这需要将每个实例写入文件,然后在其上运行测试代码并获取预测,这涉及到许多磁盘I/O操作。
我考虑过使用vowpal_wabbit(但我不确定它是否能帮助减少磁盘I/O),但我没有权限在工作的集群上安装它。
Liblinear也太慢了,而且我认为它也需要磁盘I/O。还有其他可用的替代方案吗?
回答:
我建议尝试使用Vowpal Wabbit (VW)。如果集群上安装了Boost(以及gcc或clang),你可以自己编译VW(参见教程)。如果没有安装Boost,你也可以自己编译它。
VW包含比OLL更现代的算法。此外,它还包含几种结构化预测算法(SEARN, DAgger)以及C++和Python接口。请参见iPython笔记本教程。
关于磁盘I/O:对于一次通过学习,你可以将输入数据直接管道到vw(cat data | vw
)或运行vw --daemon
。对于多次通过学习,你必须使用缓存文件(以二进制快速加载格式存储的输入数据),创建缓存文件需要一些时间(在第一次通过时,除非它已经存在),但由于二进制格式,后续的通过会快得多。