我在VW生成的模型,我也产生相同的上数据的两个可读模型(首先用“--readable_model” Arg和第二个与“--invert_hash”)。当我在我的测试数据集运行我的模型,并用--audit选项,报道了一些功能权重与在上述可读模式报告的权重比较略有不同。例如,下面是培训了train.data可读模型的一部分:
213006:-0.19007
213008:-0.692261
213009:-0.203193
正如你可以看到,随着指数213008特征具有重量-0.692261但是,当我在test.data与--audit选项运行我的-t选项模型,然后一些权重是在审计输出不同:
-3.962444 q^featureXY:213008:1:-0.756017
这是什么原因?我有超过300K的特点,是有可能,这是由一些杂凑冲撞引起的?但是,如果有散列冲突不应该Vowpal Wabbit报告呢?正如你所看到的,选项-t使用测试时,所以模式应该是“稳定”。
vw
allows hash collisions (on purpose)这在文献中被称为“散列特技”。
它不被认为是从大量的学习功能时,有特点的哈希冲突的错误,因为碰撞的少数很少有对学习产生不利影响。在许多情况下,小的碰撞率甚至可以通过降低泛化误差帮助。
由于没有必要治疗以特殊的方式碰撞,哈希帽子戏法的一个明显好处是更快的学习。
哈希碰撞简单地创建碰撞功能子集(随机)的混合物。只要碰撞子是全功能集的一小部分(如可以在哈希空间是足够大,可以预期),这些碰撞作为正规化和经常的随机形式(但并不总是)有助于避免过度-配件。
如果你有超过30万层的功能,这确实是一个极端的例子。 300K是比默认的哈希空间的大小(2^18 = 262144)
更大,从而碰撞部分不再小。在这种情况下,你应该增加,通过增加-b <bits>
其中<bits>
比默认18
更高的哈希空间。
渐进验证错误,这是由vw
印刷,因为它得知,应该给你的最佳-b
值是什么为您的数据集一个很好的提示。
你也可以尝试寻找一个最佳值,使用vw-hypersearch
是这样的:
# find the best average loss when using between 19 and 26 bits hash-space
vw-hypersearch 19 26 vw -b % [other-vw-options...] -d data-set