【发布时间】:2015-11-14 04:25:53
【问题描述】:
我真的很想知道在 Vowpal Wabbit 中使用哪个哈希函数进行特征哈希。
我知道底层算法是Murmurhash 3,但是看github上的VW代码我没弄明白。
有谁知道大众汽车到底使用了哪种哈希函数?
【问题讨论】:
-
为大量编辑道歉
标签: hash vowpalwabbit
我真的很想知道在 Vowpal Wabbit 中使用哪个哈希函数进行特征哈希。
我知道底层算法是Murmurhash 3,但是看github上的VW代码我没弄明白。
有谁知道大众汽车到底使用了哪种哈希函数?
【问题讨论】:
标签: hash vowpalwabbit
核心哈希函数是 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,在提供 murmur-hash 时使用特定(非零)种子(请参阅:vowpalwabbit/search.cc),因此您可能会得到与预期不同的哈希值。如有疑问,您可以使用--audit 选项,vw 将输出每个示例中每个特征的准确哈希值。格式为(示例):
#
# UserJack1^mean_karma:3864409:0.12345:0.919323[@3.8964]
# ^^^^+^^^^ ^^^^^+^^^^ ^^^+^^^ ^^^+^^^ ^^^^+^^^ ^^^+^^^
# | | | | | |
# namespace featurename hashval value weight Sum(gradients)
#
【讨论】: