K-Fold 如何防止模型中的过度拟合
Posted
技术标签:
【中文标题】K-Fold 如何防止模型中的过度拟合【英文标题】:How K-Fold Prevents overfitting in a model 【发布时间】:2020-08-15 05:09:18 【问题描述】:我正在训练一个多层感知器。我有两个问题,第一个是 K 折叠如何防止过度拟合,因为 train-test-split 也做与训练部分和验证模型相同的事情,与 K 折叠一样,而不仅仅是有多个折叠。但是在 train_test_split 中存在过度拟合的可能性,那么 K 折叠如何防止它,因为在我的感知模型中也可能过度拟合到 K 折叠的训练部分中,你怎么看? 第二个问题是我从 K 折中获得了 95% 以上的准确率,先生告诉我,差异太大,这里怎么可能,因为 k 折解决了这种过度拟合?
【问题讨论】:
K-Fold 交叉验证不能防止过拟合 这意味着 95% 以上的准确率表明我处于过度拟合中,如果是,那么如何解决它? @Matias Valdenegro 你问的问题太宽泛了,没有人能告诉你“95%+”的准确率是不是过拟合,有缺失的信息。 简短回答:它没有(正如@MatiasValdenegro 已经指出的那样)。 【参考方案1】:K-Fold 交叉验证本身不会减少过拟合,但使用它通常可以让您更好地了解您的模型,最终可以帮助您避免或减少过拟合。
使用简单的训练/验证拆分,如果拆分方式不能指示真实的数据分布,模型可能会表现良好。 K-Fold 交叉验证将数据拆分为k
块并执行训练k
次,使用特定块作为验证集,其余块作为训练集。因此,该模型可能在某些训练折叠上表现得相当好,但在其他训练折叠上相对较差。这将使您更好地了解模型的实际性能。
如果获得了相对较高的训练准确度,但验证准确度显着降低,则表明过度拟合(高方差和低偏差)。目标是将方差和偏差保持在低水平,可能会以稍差的训练精度为代价,因为这表明学习模型已经很好地泛化到未见过的实例。您可以在bias vs variance tradeoff 上阅读更多内容。
如this answer 中所述,选择折叠数也可能在此洞察中发挥作用。根据数据的大小,与验证数据相比,使用的训练折叠可能太大。
【讨论】:
交叉验证 (CV) 本身既不能减少过度拟合,也不能优化任何东西。 “过度拟合”一词不会出现在您链接的线程中的任何地方(除了被严重低估的答案)。 “如果模型在特定训练折叠上过度拟合”,其他折叠不会抵消任何东西。您的第 3 段与 CV 无关,通常人们永远不会看到 training 准确性(只有验证折叠中的那些)。我建议您更多地关注这个主题,因为您听起来有些困惑。 @desertnaut 是的,你是对的,我的意思是它可以更好地指示过度拟合,我已经更新了我的答案以反映这一点。我已经提到了训练准确度,以解释即使获得了相对较高的性能,模型如何也可能具有“太大的方差”。 在编辑更多答案后撤回了反对票。请记住,如果我们不为他人清楚准确地揭露它,我们的意思就毫无意义;尝试找到使用过 CV 的 OP 的鞋子,因为每个人似乎都建议他们(神奇地?)减少过拟合,现在有理由感到困惑(“我已经应用了 CV,我怎么还能过拟合? i>")【参考方案2】:K fold 可以帮助解决过拟合问题,因为与只执行一次相比,您实际上将数据拆分为各种不同的训练测试拆分。通过在多个不同的集合上运行训练测试拆分,而不是只在一个集合上运行,您可以更好地了解您的模型在数据集和看不见的数据上的实际执行情况。它并不能完全阻止它,最终归结为你的数据(如果你训练、测试和验证的数据不能真正代表未来的点,你仍然可以得到一个过拟合模型)。
【讨论】:
以上是关于K-Fold 如何防止模型中的过度拟合的主要内容,如果未能解决你的问题,请参考以下文章