我有一个VW分类模型,想要检查它的特征数量和哈希冲突数量。我在不同的数据集上训练和测试了它。这些数据集包含超过40万个特征,因此在18位VW空间中,只能在不发生冲突的情况下保存26万个特征。
然后,为了检查它,我创建了两个可读模型:一个使用参数–readable_model来获取所有哈希的数量,另一个使用参数–invert_hash来获取所有特征的数量,包括那些发生哈希冲突的特征。结果显示有42.5万个特征和20.8万个哈希(不是26万,因为我使用了一些过滤参数–keep,而且据我了解,vw也会将忽略的命名空间保存到哈希表中)。然后我测量了模型的质量,使用了ROC_AUC、MCC和平均精度。结果分别是0.903、0.564和0.591。
如你所见,哈希冲突非常大,所以我决定通过-b参数将位空间增加到24位。然后我重新训练了模型。现在,有42.5万个特征和42.5万个哈希=没有冲突。然而,在相同的指标上,结果却更差了(0.902、0.554、0.587)。
到目前为止,一切看起来像是24位空间导致了严重的过拟合,而18位空间更好地防止了模型的过拟合——这是一个很好的解释,为什么在测试数据集上18位模型的结果更好。
但随后我决定在24位模型上使用L1正则化来减少特征数量。我尝试了一段时间,当我得到一个具有20.8万个哈希和20.8万个特征的模型时,我非常惊讶,它的结果仍然比具有相同哈希数量的18位模型差。结果是0.901、0.584和0.552。
这让我相信,即使是对于大量特征的随机哈希冲突,也比L1正则化更有效的正则化手段。这是怎么可能的?
回答:
这里到底发生了什么(结论)?
你所经历的是过拟合的强烈迹象。详细情况如下。
这怎么可能?
正则化和随机哈希冲突都是模型特征子集的折扣机制。它们选择一些特征,并使这些特征在模型中变得不那么重要(或完全被折扣)。
但它们的相似性到此为止。这两种折扣机制在以下方面非常不同:
- 它们折扣的特征子集(特定 vs 随机)
- 折扣方法(完全 vs 部分混合)
- 折扣的方向和幅度
特定 vs 随机折扣
L1正则化(--l1 ...
)选择非常特定的权重(那些最接近零的权重与范数相比),而随机哈希冲突“选择”随机权重,其中一些可能很大。
完全 vs 部分混合折扣
L1正则化完全修剪/移除它选择的权重,而随机哈希冲突则与其他特征创建混合。从某种意义上说(效果混合),混合类似于vw
的特征交叉功能,使用-q <XY>
实现,尽管不完全相同。
折扣的方向和幅度
与通过权重绝对值的特定选择不同,随机选择可以影响任何幅度的权重。
此外,一个特征单独考虑时可能是一个坏特征,但在与另一个特征结合考虑时实际上可能有贡献。一个例子是两个坏特征的混合,一个具有正权重,另一个具有负权重。通过部分抵消,它们可能会形成一个与目标标签有一定相关性的合理好特征。换句话说:特征混合有时可以将坏效果变成好效果。
折扣如何帮助(或损害)模型?
这在机器学习中非常常见,尤其是在大数据问题中。特征选择、修剪或混合是否提高准确性取决于数据。
如果它恰好折扣了一个“坏”特征(一个与训练数据一致但对泛化无帮助的特征),它会使模型变得更好。然而,如果我们折扣了一个好的、具有良好泛化能力的特征,它会在测试(样本外数据)中使模型看起来更差。
相关:随机折扣或丢弃特征的想法,即使是可能重要的特征,已被证明是深度神经网络(NN)中一种强大且有益的技术,称为dropout。dropout已成为避免深度学习中过拟合的标准方法。
结论
创建好的模型需要实践。当你有大量特征时,由于随机效应(无论是小还是大权重)可能发生过拟合。这种过拟合需要避免。
有许多方法可以避免过拟合。正则化只是减少过拟合的一种特定方法。有时,一种更显著的、影响所有特征的随机方法,而不仅仅是那些低权重的特征,整体上可能更有益。
当这种情况发生时,这是一个提示,特征数量可能过多,你可能在过拟合它们。
一般来说,我会怀疑任何模型,其中用于训练的示例数量(数据集行数)并不比特征数量(不同的数据集列数)大很多。如果你有数十万(10^6)个特征,你可能需要10^12(万亿)个示例来避免过拟合。
对于大量特征的另一个方法,我会随机打乱示例的顺序,并混合多个模型,以确保特定顺序不会导致过拟合。线上学习倾向于对早期示例的权重过高,因为学习率衰减的原因。