特征位如何在 vawpal wabbit 中工作

ace*_*ner 2 parameters hash bit-depth vowpalwabbit

我对 vavepal wabbit 比较陌生,想了解 -b 参数(特征表中的特征位)。

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

1 | a = "word" b ="word131232" c="word1233" d = "word123124" e = "word23145"
Run Code Online (Sandbox Code Playgroud)

但是,每行只有 5 个特征。我应该使用多少位?我尝试运行它,似乎随着示例数量的增加,功能集的数量似乎也在增加。我似乎不明白为什么会这样。

Mar*_*pel 5

如果您使用-b 18(这是默认设置),这些特征将被散列到一个包含 2^18 个项目的表中,因此如果您数据集中的唯一特征数量接近 2^18(甚至更多),您应该增加parameter -b,所以没有那么多哈希冲突。没有简单的方法来检测冲突的数量,但通常的做法是调整参数-b以获得最佳渐进式验证损失(如果使用更多遍,则为保持损失)。当然,这也取决于您机器上的可用内存。

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

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

1 | word word131232 word1233 word123124 word23145
Run Code Online (Sandbox Code Playgroud)

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

1 | a=word b=word131232 c=word1233 d=word123124 e=word23145
Run Code Online (Sandbox Code Playgroud)

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

1 | 0 131232 1233 123124 23145
Run Code Online (Sandbox Code Playgroud)

请参阅有关输入格式wiki 页面

特征集的数量似乎增加了

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

在最终报告中,vwprintstotal feature number是每个示例的平均特征数乘以示例数乘以通过次数(因此它不是数据集中唯一特征的数量)。