Vowpal Wabbit语境强盗数据格式

时间:2017-01-16 22:51:50

标签: vowpalwabbit

我有两个关于格式化数据的问题,用于上下文强盗模型训练。

如果我有以下数据......

1:1:0.2 | us female 12 

问题1)我从VW Wiki上读到,每个功能都可以选择后跟浮动。如果我将分类特征(例如我们,女性)作为值,那么重新格式化它们的最佳方法是什么?我想我不会用浮点数后缀它们让它们的默认值为1.我希望这会实现单热编码。

问题2)我错误地通过记录数据来训练模型,如下所示

private static int findString(String line, char ch, int start) {
    int idx = line.indexOf(ch, start);
    while (idx != -1 && ((idx > 0 && line.charAt(idx - 1) == ch) ||
                         (idx < line.length() - 1 && line.charAt(idx + 1) == ch)))
        idx = line.indexOf(ch, idx + 1);
    return idx;
}

我现在意识到“我们”,“女性”和“12”被视为默认值为1的功能。我是否正确?

1 个答案:

答案 0 :(得分:3)

是的,你是对的。

输入要素格式为:空格分隔,每个要素为<name>:<value>,其中:<value>(如果存在)必须为数字。

要表示分类值,您可以使用:以外的其他内容作为<name><value>之间的分隔符。在这种情况下,整个字符串将被视为功能名称。这通常被称为&#34; one-hot encoding&#34; (每个可能的特征+值组合被视为一个单独的特征)。

另请注意,功能名称12将由vw直接散列到哈希表中的第12个插槽(模2 ^位),假设这是用户想要的,因为数字功能是common(和libSVM约定)。可以通过命令行上的选项--hash all禁用此功能。默认值为--hash strings,意思是:(murmur3)哈希特征名称,看起来像一个字符串(不是整数),但不要单独使用(不要哈希)特征名称看起来像数字。

另请参阅:https://itunes.apple.com/us/podcast/1-single-straight-guy-focus/id775053292?i=1000375469754&mt=2,其中包含用于表示vw中输入要素的备忘单。