特征位如何在 vowpal wabbit 中工作

How does feature bits work in vowpal wabbit

我对 vowpal wabbit 比较陌生,想了解 -b 参数(功能 table 中的功能位)。

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

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

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

如果您使用 -b 18(这是默认设置),这些特征将散列为具有 2^18 个项目的 table,因此如果您的数据集中唯一特征的数量接近到 2^18(甚至更高),你应该增加参数 -b,所以不会有那么多哈希冲突。没有 easy 如何检测碰撞次数的方法,但通常的做法是调整参数 -b 以获得最佳的渐进式验证损失(或保持损失,如果你使用更多传球)。当然也要看你机器的可用内存。

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

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

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

the number of features set seem to increase

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

在最终报告中,vw 打印出 total feature number,这是每个示例的平均特征数乘以示例数乘以通过次数(因此是 不是数据集中独特特征的数量。