我正在尝试将 Vowpal Wabbit 用于具有 154 个不同类别标签的多类别分类任务,如下所示:
- 经过大量数据训练的 VW 模型。
- 使用一个专用测试集测试模型。
在这种情况下,我能够达到 >80% 的结果,这很好。但目前我正在处理的问题是:
我必须复制实时预测场景。在这种情况下,我必须一次传递一个数据点(即文本行),以便模型可以预测值和输出。
我已经尝试了所有我知道但失败的选项。你们中的任何人都可以让我知道如何通过将一个数据点与大众命令一起传递而不是作为文件传递来创建实时场景。
我正在尝试将 Vowpal Wabbit 用于具有 154 个不同类别标签的多类别分类任务,如下所示:
在这种情况下,我能够达到 >80% 的结果,这很好。但目前我正在处理的问题是:
我必须复制实时预测场景。在这种情况下,我必须一次传递一个数据点(即文本行),以便模型可以预测值和输出。
我已经尝试了所有我知道但失败的选项。你们中的任何人都可以让我知道如何通过将一个数据点与大众命令一起传递而不是作为文件传递来创建实时场景。
您可以vw
用作守护进程:
vw --daemon --port 54321 --quiet -i model_file -t --num_children 1
现在vw
加载模型并监听端口 54321(在 localhost 上)。每次您发送一行(以换行符结尾,ASCII 10)给localhost:54321
您时,都会在同一个套接字上得到一个预测,例如:
echo " | your features here..." | netcat localhost 54321
这只是一个示例,通常您会编写一个程序,该程序将在循环中写入然后从套接字读取,而不是调用netcat
.
您还可以调用vw
常规输入/输出和预测模式:
vw --quiet -i model_file -t -p /dev/stdout
并写入(通过stdin
)并从中读取(通过stdout
)。关键是您将以相同的顺序为您发送的每一行输入获得一行输出。您也可以N
一次发送行,然后读回N
响应。保证保留请求与响应的相对顺序。