Vowpal Wabbit 可能的哈希冲突

我在VW中生成了一个模型,并且在相同的数据上生成了两个可读模型(第一个使用’–readable_model’参数,第二个使用’–invert_hash’)。当我在测试数据集上运行我的模型并使用–audit选项时,一些特征的报告权重与上述提到的可读模型中的权重略有不同。例如,这是基于train.data训练的可读模型的一部分:

213006:-0.19007213008:-0.692261213009:-0.203193

如您所见,索引为213008的特征的权重为-0.692261。但是,当我在test.data上使用-t选项并带有–audit选项运行我的模型时,一些权重在审计输出中有所不同:

-3.962444   q^featureXY:213008:1:-0.756017

这是什么原因引起的?我有超过30万个特征,这是否可能由某种哈希冲突引起?但如果存在哈希冲突,Vowpal Wabbit不应该报告这一点吗?如您所见,测试时使用了-t选项,因此模型应该是“稳定”的。


回答:

vw 允许哈希冲突(有意为之)

这在文献中被称为“哈希技巧”

在从大量特征中学习时,特征哈希冲突不被视为错误,因为少量冲突很少对学习产生不利影响。在许多情况下,少量的冲突率甚至可能通过降低泛化误差来帮助学习。

忽略冲突有什么优势?

由于不需要特别处理冲突,哈希技巧的一个明显优势是学习速度更快。

冲突不会使学习变得更差吗?

哈希冲突只是创建了(随机)冲突特征子集的混合。只要冲突的子集在整个特征集中占比很小(当哈希空间足够大时可以预期),这些冲突作为一种随机的正则化形式,通常(尽管并非总是)有助于避免过度拟合。

如果我的哈希空间太小(冲突太多)怎么办?

如果您有超过30万个特征,这确实是一个极端情况。30万大于默认的哈希空间大小(2^18 = 262144),因此冲突的部分不再是小的。在这种情况下,您应该通过增加-b <bits>来增加哈希空间,其中<bits>应高于默认值18

我如何知道我的冲突是否太多?

vw在学习过程中打印的渐进验证误差应该能为您提供一个关于数据集最佳-b值的好提示。

您也可以尝试使用vw-hypersearch来搜索最佳值,像这样:

    # 在19到26位的哈希空间之间找到最佳平均损失
    vw-hypersearch 19 26 vw -b % [other-vw-options...] -d data-set

Related Posts

如何使用Google Protobuf解析、编辑和生成object_detection/pipeline.config文件

我在一个常见的集成学习范式中训练多个模型,目前我在处理…

我的GridSearchCV不起作用,我不知道为什么

大家好,我在使用GridSearchCV时遇到了问题,…

Keras: 两个同时进行的层,其中一个对前一层的输出进行卷积

我想实现这样的模型连接: 输入图像1 -> 卷积层1 …

如何将行数据转换为列数据而不使用独热编码

我有一个如下所示的数据集。 MonthDate Day…

使用 ML Kit 与 NNAPI

我正在尝试在运行 Android 9 的设备上使用新的…

XGBoost算法,关于evaluate_model函数的问题

这个evaluate_model函数经常被使用,我在I…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注