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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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