我有 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)中的一种强大且有益的技术,它被称为dropout 。 dropout 已成为深度学习中避免过度拟合的常用方法。
底线
创建好的模型需要练习。当您拥有大量特征时,可能会由于随机效应(小权重和/或大权重)而导致过度拟合。需要避免这种过度拟合。
有很多方法可以避免过度拟合。正则化只是减少过度拟合的一种具体方法。有时,更重要的随机方法会影响所有特征,而不仅仅是那些权重较低的特征,总体上可能是有益的。
发生这种情况时,暗示特征数量可能太大,并且您可能过度拟合它们。
一般来说,我会怀疑用于训练的示例数量(数据集行)不会比特征数量(不同数据集列)大很多的模型。如果您有数十万 (10^6) 个特征,那么您可能应该有 10^12 (万亿) 个示例以避免过度拟合。
我会对大量特征做的另一件事是随机打乱示例的顺序,并混合多个模型以确保特定顺序不会导致过度拟合。由于学习率衰减,在线学习往往会过度重视早期示例而不是后期示例。
关于machine-learning - 作为正则化,Vowpal Wabbit 哈希冲突比 L1 效果更好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54785133/