功能位如何在vowpal wabbit中工作

时间:2015-09-09 01:15:37

标签: hash parameters vowpalwabbit bit-depth

我对vowpal wabbit相对较新,想了解-b参数(功能表中的功能位)。

我的训练数据是这样的。总共有大约100万字。

1 | a = "word" b ="word131232" c="word1233" d = "word123124" e = "word23145"

但是,每行只有5个功能。我应该使用多少位?我试图运行它,似乎越来越多的例子,功能集的数量似乎增加。我似乎不明白为什么会这样。

1 个答案:

答案 0 :(得分:4)

如果您使用-b 18(这是默认设置),则会将功能散列到包含2 ^ 18项的表中,因此,如果数据集中的唯一要素数接近2 ^ 18(或甚至更高),你应该增加参数-b,所以没有太多的哈希冲突。没有 easy 方式来检测碰撞的数量,但通常的做法是调整参数-b以获得最佳的渐进式验证损失(如果使用更多的传递,则保持丢失) 。当然,它还取决于您机器上的可用内存。

  

1 | a = "word" b ="word131232" c="word1233" d = "word123124" e = "word23145"

请注意,由于=周围的空格,此示例错误(不是您的意图)。等号没有特殊含义(与用于分隔特征值的冒号不同)。功能名称中不能包含空格。无需在引号中包含要素名称。所以示例应该看起来像

1 | word word131232 word1233 word123124 word23145

如果前缀a,b,c,d,e具有某些特殊含义(即a=word42应该是与b=word42不同的特征),则可以使用:

1 | a=word b=word131232 c=word1233 d=word123124 e=word23145

如果所有单词都已映射到整数(在0-2 ^ b范围内),则可以直接将它们用作要素名称,不会进行散列(除非指定--hash=all):

1 | 0 131232 1233 123124 23145

请参阅wiki page about input format

  

设置的功能数量似乎增加

在进度报告中(默认情况下每个第二个示例),在最后一列中,您可以看到current features,这是当前示例的要素数(包括常量要素和二次/立方) / ...如果你使用它们的功能)并且它不应该增加(除非你有这样奇怪的数据)。

在最终报告中,vw打印total feature number,这是每个示例的平均功能数乘以示例时间数的通过次数(因此它数据集中唯一功能的数量。)