如何训练最终的机器学习模型
我们用来对新数据进行预测的机器学习模型称为最终模型。
在应用机器学习中,关于如何训练最终模型可能会让人无所适从。
这种情形出现在初学者身上,他们会问一些问题,例如:
- 如何通过交叉验证进行预测?
- 我从交叉验证中选择哪种模式?
- 在培训数据集上准备好模型后,我是否使用它?
这篇文章将告诉你如何解决这些问题。
在这篇文章中,你将发现如何完成机器学习模型,以便对新数据进行预测。
我们开始吧。
什么是最终模型?
最终的机器学习模型是用于对新数据进行预测的模型。
也就是说,给定输入数据的新示例,你希望使用模型来预测预期输出。这可以是分类(分配标签)或回归(实际值)。
例如,照片是狗还是猫的照片,或者明天的估计销量。
你的机器学习项目的目标是获得性能最佳的最终模型,其中“最佳”的定义如下:
- 数据:你拥有的历史数据。
- 时间:你必须在这个项目上花费的时间。
- 步骤:数据准备步骤、算法或算法,以及选择的算法配置。
在你的项目中,你将收集数据,花费你所拥有的时间,并了解数据准备过程、要使用的算法以及如何配置它。
最终的模型是这个过程的顶峰,也就是你为了开始实际做出预测而寻求的终点。
训练/测试集的用途
为什么我们要使用训练/测试集?
创建数据集的训练和测试拆分是快速评估算法在问题上的性能的一种方法。
训练数据集用于准备模型,对其进行训练。
我们假设测试数据集是新数据,其中算法保留了输出值。我们从训练的模型中收集关于来自测试数据集的输入的预测,并将它们与测试集的保留输出值进行比较。
通过比较测试数据集上的预测和保留的输出,我们可以计算测试数据集上模型的性能度量。这是在对未知数据进行预测时,对在问题上训练的算法的技能的评估。
让我们把这个进一步拆开
当我们评估算法时,我们实际上是在评估过程中的所有步骤,包括如何准备训练数据(例如,缩放)、算法的选择(例如,kNN)以及所选算法是如何配置的(例如,k=3)。
根据预测计算的性能度量是对整个过程技能的估计。
我们将绩效度量概括为:
- “处理测试集上的技巧”
到
- “处理未知的数据的技巧”
这是一个相当大的飞跃,需要:
- 这个过程足够大,对技能的评估接近于我们对未知的数据的实际预期。
- 性能度量的选择准确地捕获了我们在对未知数据的预测中所感兴趣的度量。
- 数据准备的选择是很容易理解的,在新数据上是可重复的,如果预测需要返回到其原始规模或与原始输入值相关,则可以逆转。
- 算法的选择对于其预期用途和操作环境(例如复杂性或选择的编程语言)是有意义的。
这在很大程度上取决于测试集上整个过程的评估技能。
事实上,使用训练/测试方法来估计程序在未知数据上的技能通常有很高的方差(除非我们有大量数据要拆分)。这意味着当它重复时,它会产生不同的结果,通常是非常不同的结果。
其结果是,我们可能非常不确定该过程在未知数据上的实际执行情况,以及一个过程与另一个过程的比较情况。
通常,在时间允许的情况下,我们更喜欢使用k倍交叉验证。
k倍交叉验证的目的
为什么我们要使用k倍交叉验证?
交叉验证是另一种评估方法在未知数据上的技能的方法。比如使用训练测试分割法。
交叉验证在数据集的多个子集上系统地创建和评估多个模型。
这反过来又提供了大量的绩效衡量标准。
- 我们可以计算这些措施的平均值,以了解程序的平均执行情况。
- 我们可以计算这些措施的标准差,以了解程序的技巧在实践中预计会有多大的变化。
当你尝试选择要使用的算法和数据准备过程时,这也有助于提供一个过程与另一个过程之间更细微的比较。
此外,这个信息是非常有价值的,因为你可以使用平均值和价差来给出机器学习过程在实践中的预期性能的可信区间。
训练测试分割法和k倍交叉验证都是重抽样方法的例子。
为什么我们要使用重采样方法?
应用机器学习的问题在于,我们试图为未知事物建模。
在给定的预测建模问题上,理想的模型是在对新数据进行预测时执行得最好的模型。
我们没有新的数据,所以我们不得不用统计伎俩来假装。
训练检验、分裂和k倍交叉验证称为重抽样方法。重抽样方法是抽样数据集和估计未知量的统计过程。
在应用机器学习的情况下,我们感兴趣的是在看不见的数据上估计机器学习过程的技能。更具体地说,是通过机器学习过程进行预测的技能。
一旦我们有了评估的技能,我们就完成了重采样方法。
- 如果你使用的是训练测试拆分,这意味着你可以丢弃拆分的数据集和训练的模型。
- 如果你使用的是k倍交叉验证,这意味着你可以丢弃所有经过训练的模型。
他们已经达到了他们的目的,不再需要他们了。
现在你已经准备好完成你的模型了。
如何最终确定模型?
你可以通过对所有数据应用所选的机器学习过程来最终确定模型。
就这样。
使用最终模型,你可以:
- 保存模型以供以后或操作使用。
- 对新数据进行预测。
交叉验证模型或训练测试数据集呢?
它们已经被丢弃了。他们不再需要了。他们已经达到了帮助你选择要完成的程序的目的。
常见问题
本节列出了你可能会遇到的一些常见问题。
为什么不让模型根据训练数据集进行训练呢?
和
为什么不让最好的模型不被交叉验证呢?
如果你愿意,你可以的。
通过重用技能评估过程中训练的模型之一,你可以节省时间和精力。
如果训练一个模型需要几天、几周或几个月的时间,这可能是件大事。
当使用所有可用数据进行训练时,你的模型可能会比仅使用用于估计模型性能的子集表现得更好。
这就是为什么我们更喜欢用所有可用的数据来训练最终的模型。
对所有数据进行训练的模型的性能不会有所不同吗?
我认为这个问题导致了大多数关于模型定稿的误解。
换句话说:
- 如果你使用所有可用的数据训练一个模型,那么你如何知道该模型的性能如何呢?
你已经使用重采样过程回答了此问题。
如果设计良好,你使用训练测试或k倍交叉验证计算的性能度量可以适当地描述基于所有可用历史数据训练的最终模型的总体性能。
如果你使用k倍交叉验证,你将对模型的平均“错误”程度(或相反,“正确”程度)以及错误或正确的预期范围有一个估计。
这就是为什么仔细设计测试工具在应用机器学习中是如此关键的原因。更优秀的测试工具将允许你更加依赖于估计的性能。
每次训练模型时,我都会得到不同的性能分数;我应该选择分数最高的模型吗?
机器学习算法是随机的,这种在相同数据上表现不同的行为是可以预期的。
重采样方法,如重复训练/测试或重复k倍交叉验证,将有助于处理方法中有多少差异。
如果它确实令人担忧,你可以创建多个最终模型,并从一组预测中取平均值,以减少方差。
你可以查看这篇文章了解更多信息:
摘要
在这篇文章中,你了解了如何训练最终的机器学习模型以供操作使用。
你已经克服了最终确定模型的障碍,例如:
- 了解重抽样程序的目标,如训练测试拆分和k倍交叉验证。
- 模型定型是指在所有可用数据上训练新模型。
- 将评估性能的关注点从最终确定模型中分离出来。