我有大众分类模型,我想检查功能的数量和哈希冲突的数量。我训练它并在不同的数据集上测试它。数据集包含超过400k的功能,因此对于18位VW空间,可以仅保存260k而不会发生冲突。
然后,为了检查它,我创建了两个可读模型:一个带有参数--readable_model,用于获取所有哈希的数量,第二个带有参数--invert_hash以获得所有要素的数量,甚至是那些在哈希冲突中的模型。有425k的功能和208k的哈希值(不是260k,因为我使用了--keep参数进行了一些过滤,据我所知,vw保存到哈希表也忽略了命名空间)。然后我用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)中一种强大且有益的技术,它被称为丢失。辍学已成为避免深度学习过度拟合的去除方法。
创造好的模型需要练习。当您具有非常多的特征时,由于随机效应(小的和/或大的重量)而过度拟合是可能的。这种过度拟合需要避免。
有许多方法可以避免过度拟合。正规化只是减少过度拟合的一种特定方式。有时,影响所有特征的更重要的随机方法,不仅仅是那些权重较低的特征,可能总体上是有益的。
当发生这种情况时,暗示特征的数量可能太大,并且您可能过度拟合它们。
一般来说,我怀疑任何用于训练的例子(数据集行)数量的模型都不比特征数量(不同的数据集列)大得多。如果你有数十万(10 ^ 6)个特征,你应该有10 ^ 12(万亿)个例子来避免过度拟合。
我将使用大量功能进行的另一件事是随机调整示例的顺序,并混合多个模型以确保特定顺序不会导致过度拟合。由于学习率下降,在线学习往往超过早期的例子而不是后期的例子。