【发布时间】:2023-03-06 10:31:02
【问题描述】:
我有 VW 分类模型,我想检查它的特征数量和哈希冲突的数量。我对其进行了训练并在不同的数据集上对其进行了测试。数据集包含超过 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 正则化更有效。这怎么可能?
【问题讨论】:
标签: machine-learning hash vowpalwabbit hash-collision regularized