机器学习 – 一次预测一个实例 – 大量实例 – 尽量避免使用I/O

我有一个大型数据集,正在尝试为其构建一个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。对于多次通过学习,你必须使用缓存文件(以二进制快速加载格式存储的输入数据),创建缓存文件需要一些时间(在第一次通过时,除非它已经存在),但由于二进制格式,后续的通过会快得多。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注