我真的很想知道在Vowpal Wabbit中使用哪个哈希函数进行特征哈希。
我知道基础算法是 Murmurhash 3 ,但我无法通过查看github上的大众代码来了解详细信息。
是否有人知道大众使用的确切哈希函数?
答案 0 :(得分:4)
核心哈希函数是Austin Appleby的32位Murmur Hash v 3.0。
但是,它与原始uniform_hash
稍有不同的API更改,以使其适应vw
中不同的使用方案。
您可以在以下位置查看来源:
hashstrings
和hashall
个功能)正如您所看到的,当您深入细节时,事情并非如此简单。原因并不简单,在某些地方,当特征和名称空间在交互和一些约简算法中组合时,会进一步努力改善分散。
这是一个(可能不是100%完整的)详细信息列表:
-b bits
,默认为18)的模运算,以便适合权重向量,因此从散列中获得的值可以小于直/天真的哈希。--hash strings
),以数字开头的要素名称最初按原样使用(无哈希),但如果它们继续使用某些非数字,则到目前为止计算的当前值将用作种子,并且其余的名字是murmur-32-hashed --redefine
,-q
,--cubic
等)时,两个哈希结果将与不同的简单哈希相结合。--search
,在使用杂音哈希(参见:vowpalwabbit/search.cc
)时会使用特定的(非零)种子,因此您可能会获得与预期不同的哈希值。 如有疑问,您可以使用--audit
选项,vw
将输出每个示例中每个要素的确切哈希值。格式是(示例):
#
# UserJack1^mean_karma:3864409:0.12345:0.919323[@3.8964]
# ^^^^+^^^^ ^^^^^+^^^^ ^^^+^^^ ^^^+^^^ ^^^^+^^^ ^^^+^^^
# | | | | | |
# namespace featurename hashval value weight Sum(gradients)
#