machine-learning - 作为正则化,Vowpal Wabbit 哈希冲突比 L1 效果更好

标签 machine-learning hash vowpalwabbit hash-collision regularized

我有 VW 分类模型,我想检查它的特征数量和哈希冲突数量。我对其进行了训练并在不同的数据集上进行了测试。数据集包含超过 400k 个特征,因此使用 18 位 VW 空间,可以在不发生冲突的情况下仅节省 260k。

然后,为了检查它,我创建了两个可读模型:第一个带有参数 --read_model,用于获取所有哈希的数量,第二个带有参数 --invert_hash 来获取所有特征的数量,甚至是那些处于哈希冲突的特征。有 425k 个功能和 208k 散列(不是 260k,因为我使用了 --keep 参数进行了一些过滤,据我了解,vw 保存到散列表也忽略了 namespace )。然后我使用 ROC_AUC、MCC 和平均精度测量模型的质量。结果分别为 0.903、0.564、0.591。

正如你所看到的,哈希冲突是巨大的,所以我决定增加位空间,并将 -b 参数值设置为 24。然后我再次训练模型。现在,有 425k 个特征,425k 个哈希 = 没有冲突。然而,相同指标的结果更差(0.902,0554,0.587)。

目前看来,24 位空间存在很大的过度拟合,而 18 位空间可以更好地防止模型过度拟合 - 这将很好地解释为什么使用 18 位模型的测试数据集结果更好。

但后来我决定通过 L1 正则化减少 24 位模型上的特征数量。我玩了一段时间,当我得到具有 208k 哈希值和 208k 特征的模型时,我非常惊讶,它的结果仍然比具有相同哈希值的 18 位模型的结果更糟糕。分别是 0.901、0.584、0.552。

这让我相信,随机哈希冲突,即使对于大部分功能来说,也比 L1 正则化更好的正则化。这怎么可能?

最佳答案

这里发生了什么(底线)?

您所经历的情况是过度拟合的强烈迹象。详细信息如下。

这怎么可能?

正则化和随机哈希碰撞都是模型特征子集的折扣机制。他们选择一些特征,并降低它们在模型中的重要性(或完全忽略)。

但这就是相似之处的结束。这两种折扣机制有很大不同:

  • 他们折扣的功能子集(特定与随机)
  • 折扣方法(完全混合与部分混合)
  • 折扣方向和幅度

特定折扣与随机折扣

L1 正则化 ( --l1 ... ) 选择非常具体的权重(最接近零的权重与范数),而随机哈希冲突“选择”随机权重,其中一些可能很大。

完全折扣与部分混合折扣

L1 正则化完全修剪/删除它选择的权重,而随机哈希冲突则创建与其他特征的混合。从某种意义上说(效果混合)混合与 vw 相似,但不完全相同。与 -q <XY> 进行特征交叉确实如此。

折扣的方向和幅度

与按权重绝对值进行特定选择不同,随机选择可以影响任何大小的权重。

此外,一个功能在单独考虑时可能是一个不好的功能,但在与另一个功能结合考虑时实际上有所贡献。一个例子是两种不良特征的混合,一种具有正权重,另一种具有负权重。通过部分相互抵消,它们可能会产生与目标标签有些相关的看似良好的特征。 IOW:特征混合有时可以将不好的效果变成好的效果。

折扣如何帮助(或伤害)模特?

这在机器学习中非常常见,尤其是在大数据问题中。特征选择、修剪或混合是否提高准确性取决于数据。

如果它碰巧忽略了“坏”特征(与训练数据一致,但对泛化没有帮助的特征),它会使模型变得更好。然而,如果我们忽视一个好的、通用性好的特征,它会让模型在测试中显得更糟糕(样本数据之外)。

相关:随机折扣或丢弃特征(甚至可能是重要的特征)的想法已被证明是深度神经网络(NN)中的一种强大且有益的技术,它被称为dropoutdropout 已成为深度学习中避免过度拟合的常用方法。

底线

创建好的模型需要练习。当您拥有大量特征时,可能会由于随机效应(小权重和/或大权重)而导致过度拟合。需要避免这种过度拟合。

有很多方法可以避免过度拟合。正则化只是减少过度拟合的一种具体方法。有时,更重要的随机方法会影响所有特征,而不仅仅是那些权重较低的特征,总体上可能是有益的。

发生这种情况时,暗示特征数量可能太大,并且您可能过度拟合它们。

一般来说,我会怀疑用于训练的示例数量(数据集行)不会比特征数量(不同数据集列)大很多的模型。如果您有数十万 (10^6) 个特征,那么您可能应该有 10^12 (万亿) 个示例以避免过度拟合。

我会对大量特征做的另一件事是随机打乱示例的顺序,并混合多个模型以确保特定顺序不会导致过度拟合。由于学习率衰减,在线学习往往会过度重视早期示例而不是后期示例。

关于machine-learning - 作为正则化,Vowpal Wabbit 哈希冲突比 L1 效果更好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54785133/

相关文章:

machine-learning - 为什么在目标检测中使用带有卷积神经网络的滑动窗口?

machine-learning - 如何在输入空间和高维稀疏约束空间之间创建双向映射?

c++ - 如何在Qt中实现HMAC-SHA1算法

javascript - CryptoJS MD5 不转换字数组,SHA256 工作正常

ruby-on-rails - 如何在 Rails 中使用带有嵌套数组的 PostgreSQL hstore?

hash - Vowpal Wabbit : What hash function is used exactly?

python - Keras 卷积层维数不匹配

machine-learning - 为什么在 mnist fasion keras 代码中,softmax 工作正常,但 sigmoid 工作不正常?

vowpalwabbit - Vowpal Wabbit 可读模型权重解释