有没有办法发送数据来训练Vowpal Wabbit中的模型而无需将其写入磁盘?
这就是我想要做的.我在csv中有一个相对较大的数据集(大约2gb),它在内存中没有问题.我将它加载到R中的数据框中,我有一个函数将该数据帧中的数据转换为VW格式.
现在,为了训练模型,我必须首先将转换后的数据写入文件,然后将该文件提供给VW.写入磁盘部分的时间太长,特别是因为我想尝试使用不同功能转换的不同各种模型,因此我必须多次将数据写入磁盘.
因此,假设我能够在R中创建一个字符向量,其中每个元素都是VW格式的一行数据,如何在不将其写入磁盘的情况下将其提供给大众?
我考虑使用守护进程模式并将字符向量写入localhost连接,但我无法让VW以守护进程模式进行训练 - 我不确定这是否可行.
如果有必要,我愿意使用c ++(通过Rcpp包)来完成这项工作.
非常感谢你提前.
更新:
感谢大家的帮助.如果有人感兴趣,我只是按照答案中的建议将输出传输到大众,如下所示:
# Two sample rows of data datarows <- c("1 |name 1:1 2:4 4:1", "-1 |name 1:1 4:1") # Open connection to VW con <- pipe("vw -f my_model.vw") # Write to connection and close writeLines(datarows, con) close(con)
arielf.. 5
您可能正在寻找的是以vw
守护进程模式运行.
执行此操作的标准方法是vw
作为守护程序运行:
vw -i some.model --daemon --quiet --port 26542 -p /dev/stdout
您可以使用26542
您选择的端口进行替换.
现在,您可以通过TCP连接到服务器(可以localhost
在端口上26542
),并且您写入TCP套接字的每个请求都将在同一个套接字上响应.
您既可以学习(发送带标签的示例,也可以实时更改模型),也可以编写查询并回读回复.
您可以一次执行一个查询+预测,也可以一次执行多个查询.您只需要在每个查询结束时使用换行符,就像从文件中测试一样.保证订单得以保留.
您还可以混合请求以学习仅用于预测的请求,并且不应更新内存模型.实现这一目标的诀窍是使用零重量作为您不想学习的示例.
此示例将更新模型,因为它的权重为1:
label 1 'tag1| input_features...
并且这个不会更新模型,因为它的权重为0:
label 0 'tag2| input_features...
官方参考中的更多内容是在vowpal wabbit wiki中: 如何将vowpal wabbit作为守护进程运行, 但请注意,在该主要示例中,模型已预先学习并加载到内存中.