关于统计机器学习需要强调的一点是没有保证。当您使用保留集估计性能时,这只是一个估计值。估计可能是错误的。
这需要一些时间来适应,但这是你必须适应的事情。当您说“如果性能真的恶化怎么办?”时,答案是肯定的,这可能会发生。实际表现可能比您估计/预测的要差。它也可以更好。两者都是可能的。这是不可避免的。存在一些固有的、不可减少的不确定性。
当您使用保留的测试集评估性能时,您是在使用过去的数据来尝试预测未来的性能。正如他们所说,过去的表现并不能保证未来的结果。这是我们必须接受的生活事实。
你不能让这让你动弹不得。可能比您预期的更糟这一事实并不是避免将基于数据训练的模型部署到生产环境的理由。特别是,如果您不这样做,也可能做得很差。在所有数据(训练+验证+测试)上训练的模型可能会比仅在训练+验证部分上训练的模型更差。也有可能会更好。所以,与其寻找保证,我们必须问自己:什么给了我们最大的成功机会?什么最有可能最有效?
在这种情况下,当您想要部署到生产环境时,您能做的最好的事情就是使用所有可用的数据。就预期性能而言,使用所有数据并不比使用部分数据差,甚至可能更好。因此,您不妨在构建生产模型时使用所有可用的数据来训练模型。事情仍然可能会很糟糕——无论何时使用统计方法,总是可能会变得不走运——但这为你提供了让事情顺利进行的最佳机会。
具体而言,标准做法如下:
将您的一些数据保留到保留的测试集中。关于使用什么分数没有硬性规定,但例如,您可以保留 20% 用于测试集,而保留剩余的 80% 用于训练和验证。通常,所有拆分都应该是随机的。
接下来,使用训练和验证数据尝试多种架构和超参数,尝试找到最好的模型。将保留的 80% 用于训练和验证,将其拆分为训练集和验证集,并使用训练集训练模型,然后在验证集上测量其准确性。如果您使用交叉验证,您将多次拆分并在验证集上平均结果;如果不是,您将进行一次拆分(例如,80% 的 70%/30% 拆分,或类似的东西)并评估验证集的性能。如果您有许多超参数要尝试,请为每个候选超参数设置执行一次。如果您有许多架构要尝试,请为每个候选架构执行此操作。你可以迭代这个,使用你的
一旦你感到满意,你就可以冻结架构、超参数等的选择。现在你的实验已经完成了。一旦你达到这一点,你就不能再尝试任何其他选项(没有获得一个新的测试集)——所以在你确定你准备好之前不要达到这一点。
准备就绪后,您可以使用之前选择的架构和超参数在完整的训练 + 验证集(即 80%)上训练模型。然后,在保留的测试集上测量其准确性。这是您对这种建模方法的准确度的估计/预测。你在这里得到一个数字。这个数字就是这样:如果你对它不满意,你就不能回到第 1 步和第 2 步做更多的实验;那将是无效的。
最后,对于生产使用,可以在整个数据集上训练一个模型,训练+验证+测试集,然后投入生产使用。请注意,您永远不会测量此生产模型的准确性,因为您没有任何剩余数据可以这样做;您已经使用了所有数据。如果您想估计它的性能,您有权使用第 4 步中估计的准确度来预测它在生产中的性能,因为这是对其未来性能的最佳预测。与往常一样,没有任何保证——这只是可能的最佳估计,考虑到我们可以获得的信息。当然,它可能会比你预测的更糟,或者比你预测的更好——这总是正确的。