如何解决机器学习中出现的模型成绩不匹配问题
2018年04月19日 由 浅浅 发表
221387
0
如果机器学习中模型测试结果比训练结果更差时该怎么做。
评估机器学习模型的程序是,首先基于机器学习训练数据对其进行调试和评估,然后在测试数据库中验证模型是否具有良好的技能。通常,在使用训练数据集评估模型后,你会对得到的成绩非常满意,但用测试数据集评估模型时成绩不佳。在这篇文章中,你会了解到当这个常见问题出现时,你需要考虑的技术和问题。
读完文章你将了解这些:
- 在评估机器学习算法时,可能出现的模型成绩不匹配的问题;
- 导致过度拟合、代表性差的数据样本和随机算法的原因;
- 在一开始就强化你的测试工具以避免发生问题的方法。
让我们开始吧。
概要
这篇文章分为4部分,分别是:
- 模型评估
- 模型成绩不匹配
- 可能的原因和补救措施
- 更稳健的测试工具
模型评估
当为预测建模问题开发模型时,你需要一个测试工具。测试工具定义了如何使用来自定义域的数据样本,以评估和比较预测建模问题的候选模型。有很多方法可以搭建测试工具,但并没有适用于所有项目的最佳方法。一种比较流行的方法是使用一部分数据来对模型进行调试,另一部分用来客观评估用样本外数据调试过的模型的技能。
这样,数据样本就被分为训练数据集和测试数据集。机器学习模型基于训练数据集进行评估,并用重新采样的方法,如k折叠交叉验证(k-fold cross-validation)。并且数据集本身可能被进一步划分为用于调试模型的超参数的验证性数据集。测试数据集被保留下来,用于评估和比较调试过的模型。
模型成绩不匹配
重新采样方法将通过使用训练数据集,在不可见的数据上为你的模型技能进行评估。而测试数据集提供了第二个数据点,以及预估模型的表现会有多好的客观理念,并证实了预估的模型技能。
如果用机器学习训练数据集预估的模型技能与机器学习测试数据集上的模型技能不匹配怎么办?其实分数一般不会匹配。我们确实预料到会有一些差异,因为在超参数调试情况下,训练数据集的一些轻微过拟合是不可避免的,这使得训练分数更可信。
- 但如果差别大得令人担忧呢?
- 你该相信哪一个分数?
- 还可以使用测试数据集来比较模型吗?
- 是不是模型调试无效?
在应用机器学习中,这是具有挑战性且非常普遍的情况。我们可以把这个问题称为模型成绩不匹配问题。注意:模型成绩存在巨大差异的想法与你所选择的成绩测量方法、数据集和模型有关。一般我们不能客观谈论所有差异,你必须自己解释相对差异。
可能的原因和补救方法
有许多可能的原因导致机器学习模型成绩不匹配问题。你最终的目标是要拥有一个测试工具,可以帮你做出正确的选择,决定将哪种模型和模型配置用作最终模型。在本节中,我们将讨论一些可能的原因和诊断方法,以及你可以用来研究这个问题的技术。
让我们来看看三个主要领域:模型过拟合,数据样本的质量,以及学习算法的随机性。
模型过拟合
最常见的原因是你过拟合了机器学习训练数据。你已经发现了一个模型、一组模型超参数、数据视图,或者这些元素的组合,而所有这些恰巧基于训练数据集给出了乐观的技能估计。某种程度上,无论是使用k-fold交叉验证,还是使用单独的数据集的调试模型都会有所帮助。尽管如此,仍有可能继续施压导致训练数据集过拟合。如果是这种情况,测试技能可能会更好地代表所选模型和配置的真正技能。
一种简明(但不简单)的方法可以诊断出训练数据集是否过拟合,那就是获得机器学习模型技能的另一个数据点,并在另一组数据上评估所选模型。例如下列一些尝试:
- 在测试数据集上尝试对模型评估进行k折叠交叉验证。
- 在训练数据集上尝试拟合模型,并基于测试数据和新的数据样本进行评估。
如果你发现过拟合了:
- 也许你可以直接废弃你目前的训练数据库,重建新训练数据库。
- 或者你可以采取温和的手段,再次将你的样本分成训练或测试数据,以得到新的训练数据库。
我的想法是如果你对目前得到的结果存疑,就应该重新考虑。尤其是那些你可能花了很久调试的地方。过拟合可能是造成模型分数矛盾的最终原因,尽管它可能不是最先出现问题的地方。
不具代表性的数据样本
你的机器学习训练或测试数据库很可能有来自定义域的不具代表性的样本,这意味着样本容量太小,或者样本中的示例无法涵盖在范围更广的定义域中观察到的情况。如果你看到了噪声模型的成绩结果,那么这一点是显而易见的。例如:
- 交叉验证分数差异大。
- 基于测试数据集的相似模型类型差异大。
另外,你会发现机器学习训练和测试成绩之间的差异。另一个方法是检验训练和测试数据集中的每个变量的概括统计量,最好在交叉验证折叠中检测。你要找出样本平均数和标准差的巨大差异。
补救措施通常是获得来自定义域更大、更有代表性的数据样本。另外,在准备和分割数据样本时使用更有区别性的方法。可以考虑分层的k折叠交叉验证,但应用于输入变量时应尽量保持实值变量的平均数和标准差,并控制分类变量的分布。
当我看到项目中出现了过拟合,一般是因为测试工具没有发挥它本该有的稳健性,而不是因为用了爬山法处理测试数据导致的。
随机算法
由于算法的随机性,你可能会发现机器学习模型分数之间存在差异。很多机器学习算法都涉及到一个随机成分。例如,神经网络中随机的初始权值,数据改组,随机梯度下降中的梯度轮流更新。这意味着,每当同样的算法在相同的数据上运行时,就会使用不同的随机数序列,反过来说,不同的技能就会产生不同的模型。
在交叉验证的模型技能得分的差异中能发现这个问题,看起来像是不具代表性的数据样本导致的。这里的不同点在于,通过重复模型评估过程(例如交叉验证),可以区分开这种差异,从而控制训练模型中存在的随机性。这通常被称为多次重复k-折叠交叉验证,当资源允许时,可被用于神经网络和随机优化算法。
更稳健的测试工具
可以通过设计稳健的机器学习测试工具来解决这些问题,然后收集证据证明你的测试工具是稳健的。这可能需要在真正开始评估模型之前进行一些测试,比如:
- 对训练或测试分组数据的敏感性分析
- 对交叉验证的k值的敏感性分析
- 对给定模型表现的敏感性分析
- 对重复次数的敏感性分析
你要找到:
- 经过交叉验证测试,评估分数之间差异小且平均数一致。
- 通过训练和测试数据集分别得到模型得分,其总体平均数相关。
如有需要,可使用标准误和显著性检验之类的统计工具。一般在这样的测试中,用新式、未调谐的模型表现较佳,比如随机森林法(random forest)。
- 如果你在机器学习训练和测试集的技能得分之间发现了差异,而且这种差异具有一致性,那就没有问题。你知道接下来会发生什么。
- 如果你在一个给定的测试中测量平均技能得分的差异,你就可以用误差条来解释结果。
我想说的重点是,如果没有稳健的测试工具,得到的结果将是一团糟。你无法有效解释结果。提交用不稳定的测试工具得出的结果,将会有很大风险(如果你是学者,那么将会成为学术造假)。在应用机器学习数值领域中,具有复现性和稳健性是相当重要的。最后要提醒的是,避免过度使用测试数据集,一旦你有了强有力的证据表明你的测试工具是稳健的,直到最后的模型选择结束前,都不要再修改测试数据集。
总结
在这篇文章中,你了解了机器学习模型成绩不匹配问题,即训练和测试数据集之间模型成绩存在很大差异,另外就是判断和解决这个问题的技术。
具体一点,你学会了以下内容:
- 在评估机器学习算法时,可能会出现模型成绩不匹配问题。
- 过度拟合的、代表性不足的数据样本和随机算法的成因。
- 在一开始就强化你的测试工具以避免发生问题的方法。