逻辑经常指出,通过欠拟合模型,它的泛化能力就会增加。也就是说,无论数据的复杂性如何,很明显在某个时候模型欠拟合会导致模型变得更糟。
您如何知道您的模型何时达到了正确的平衡并且没有欠拟合它试图建模的数据?
注意:这是我的问题“为什么过度拟合不好? ”
逻辑经常指出,通过欠拟合模型,它的泛化能力就会增加。也就是说,无论数据的复杂性如何,很明显在某个时候模型欠拟合会导致模型变得更糟。
您如何知道您的模型何时达到了正确的平衡并且没有欠拟合它试图建模的数据?
注意:这是我的问题“为什么过度拟合不好? ”
当模型对于尝试建模的数据过于简单时,模型就会欠拟合。
检测这种情况的一种方法是使用偏差-方差方法,它可以表示如下:
当您有高偏差时,您的模型会欠拟合。
要知道您是否有过高的偏差或过高的方差,您可以从训练和测试错误的角度来看待这种现象:
高偏差:这条学习曲线在训练集和测试集上都显示出高误差,因此算法存在高偏差:
高方差:这条学习曲线显示训练集和测试集误差之间的差距很大,因此该算法存在高方差。
如果算法存在高方差:
如果算法存在高偏差:
我建议观看Coursera 的机器学习课程,“10:应用机器学习的建议”部分,我从中获取了上面的图表。
要回答您的问题,重要的是要了解您正在寻找的参考框架,如果您正在寻找您在模型拟合中试图实现的哲学目标,请查看鲁本斯的回答,他很好地解释了这种情况。
但是,在实践中,您的问题几乎完全由业务目标定义。
举一个具体的例子,假设你是一名信贷员,你发放了 3,000美元的贷款,当人们还给你时,你赚了 50美元。当然,你正在尝试建立一个模型来预测一个人是否会违约贷款。让我们保持简单,并说结果要么是全额付款,要么是违约。
从业务角度来看,您可以用应急矩阵总结模型性能:
当模型预测某人将违约时,是吗?为了确定过拟合和欠拟合的缺点,我发现将其视为一个优化问题很有帮助,因为在预测与实际模型性能的每个横截面中,都会产生成本或利润:
在此示例中,预测违约即违约意味着避免任何风险,并且预测未违约的非违约将使每笔贷款产生 50 美元。事情变得危险的地方是你错了,如果你在预测非违约时违约,你会失去全部贷款本金,如果你在客户实际上不会让你错过 50美元的机会时预测违约。这里的数字并不重要,重要的是方法。
有了这个框架,我们现在可以开始理解与过拟合和欠拟合相关的困难。
在这种情况下,过度拟合意味着您的模型在开发/测试数据上的效果要好于在生产中的效果。或者换一种说法,你在生产中的模型将远远低于你在开发中看到的模型,这种错误的信心可能会导致你承担比其他方式风险更高的贷款,并且让你很容易亏损。
另一方面,在这种情况下,欠拟合会给你留下一个在匹配现实方面做得很差的模型。虽然这种结果可能非常不可预测(您想描述您的预测模型的相反词),但通常会收紧标准以弥补这一点,从而导致整体客户减少导致失去好客户。
欠拟合会遇到一种与过拟合相反的困难,即欠拟合会降低您的信心。阴险地,缺乏可预测性仍然会导致你承担意想不到的风险,所有这些都是坏消息。
以我的经验,避免这两种情况的最佳方法是在完全超出训练数据范围的数据上验证模型,这样您就可以确信自己拥有“在野外将看到的具有代表性的样本” '。
此外,定期重新验证您的模型,以确定您的模型降级的速度以及它是否仍在实现您的目标始终是一个很好的做法。
就某些事情而言,当您的模型在预测开发和生产数据方面做得很差时,您的模型就会欠拟合。
模型只是现实生活中所见事物的抽象。它们的设计是为了在观察中抽象出真实系统的细节,同时保留足够的信息来支持所需的分析。
如果一个模型过拟合,它会考虑太多关于观察到的细节,而对此类对象的微小变化可能会导致模型失去精度。另一方面,如果模型欠拟合,它评估的属性太少,以至于对象上值得注意的变化可能会被忽略。
另请注意,根据数据集,欠拟合可能被视为过拟合。如果您的输入可以使用单个属性进行 99% 的正确分类,则您可以通过将抽象简化为单个特征来使模型过度拟合数据。而且,在这种情况下,您将过多的 1% 的基数泛化到 99% 的类中——或者也将模型指定得太多以至于它只能看到一个类。
一个合理的说法是模型既不过拟合也不欠拟合是通过执行交叉验证。您将数据集拆分为k个部分,然后选择其中一个来执行分析,同时使用其他k - 1 个部分来训练您的模型。考虑到输入本身没有偏差,您应该能够像在现实生活处理中使用模型时一样拥有尽可能多的数据差异来训练和评估。
简单地说,一种常见的方法是增加模型的复杂性,使其简单,一开始很可能欠拟合,然后增加模型的复杂性,直到使用重采样技术(如交叉验证、引导程序、等等。
您可以通过添加参数(人工神经网络的隐藏神经元数量、随机森林中的树数量)或放松模型中的正则化(通常称为 lambda,或用于支持向量机的 C)项来增加复杂性。