前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >机器学习如何训练出最终模型

机器学习如何训练出最终模型

作者头像
小莹莹
发布2018-04-23 15:11:32
1.6K0
发布2018-04-23 15:11:32
举报
文章被收录于专栏:PPV课数据科学社区

Jason Brownlee 2017年3月17日

我们用于对新数据进行预测的机器学习模型称为最终模型。

在应用机器学习时,如何训练出一个最终模型这可能是大家的一个疑惑。

初学者通常会问以下问题:

  • 如何用交叉验证进行预测?
  • 根据交叉验证应该选择哪种模型?
  • 在训练数据集上要建立模型吗?

这个帖子会消除大家的疑惑。

在这篇文章中,您将会了解如何确定您的机器学习模型,以便对新数据进行预测。

现在让我们开始吧。

Photoby Camera Eye Photography

什么是最终模型?

最终机器学习模型是用于对新数据进行预测的模型。

也就是说,给出新输入数据的例子,然后使用该模型预测输出的值。这可能是一个分类(分配标签)或回归(估实际值)模型。

例如,不管是判断猫还是狗的照片,还是明天的估计销售数量;机器学习项目的目标是获得最佳的最终模型,其中“最佳”由以下因素决定:

  • 数据:可用的历史数据。
  • 时间:在项目上花费的时间。
  • 程序:数据准备步骤,一个或多个算法,以及算法配置的选择。

在整个项目中,收集数据,花费大量时间;要使用数据准备程序,要使用的算法以及如何对其进行配置。

最终的模型是这个过程的巅峰之作,最后你会发现实际上就是要做预测。

  • 训练/测试数据集的目的

为什么要训练和测试数据集?

划分一个训练和测试数据集是快速评估对您问题的算法性能的一种方法。

训练数据集用于准备一个模型并进行训练的。

我们假设测试数据集是新的数据,其中输出值会在算法中被隐藏。我们从训练模型中收集来自测试数据集的输入数据的预测,并将其与测试集中保留的输出值进行比较。

比较测试数据集上的预测和保留的输出值,使我们能够在测试数据集上计算模型的性能。这是对未知数据做预测时,对算法在该问题上训练的技巧的估计。

  • 让我们来进一步学习

当我们评估一个算法时,我们实际上是评估整个算法的所有步骤,包括训练数据如何准备(如按比例放缩),算法的选择(例如KNN)以及如何配置所选择的算法(例如k= 3)。

对预测值的计算的度量是对整个程序技能的估计。

我们对一个算法的评估会依据:

  • 从“测试数据集的程序技巧”
  • 到“对未知数据处理的程序技巧”。

这个过程是一个飞跃,它要求:

  • 该程序足够强大,使得它的估计接近我们对未知数据的预期。
  • 性能测量的选择准确地捕获了我们对未知数据预测的兴趣。
  • 数据准备能够很好地在新的数据中被理解和重复使用,当预测值需要返回到原始状态或与原始输入值相关的状态时,它是可逆的。
  • 算法的选择要考虑其预期用途和操作环境(例如,复杂性或编程语言的选择)是有意义的。

测试集上整个程序的估计技能有很多。

事实上,使用训练/测试方法来估计未知数据的程序技能往往具有很大的方差(除非我们有很多数据要划分)。这意味着当它重复训练时,它通常会给出相差很大的结果。

结果是,我们可能不太了解程序实际上对未知数据执行的操作以及一个程序是如何与另一个程序进行比较的。

通常在时间允许的情况下,我们更愿意使用k-fold交叉验证。

  • k-fold交叉验证的目的

为什么我们使用k-fold交叉验证?

交叉验证是另一种对未知数据进行估计的方法。就像随机划分训练集和测试集。

交叉验证法可以在数据集的多个子集上系统地创建和估计多个模型。

这反过来又提供了一系列衡量标准:

  • 我们可以计算这些方法得出的结果的平均值,来了解这些程序的平均水平。
  • 我们还可以计算出它们的标准差,以了解实践中我们的期望值是如何变化的。

当您选择要使用的算法和数据准备程序时,这也有助于对程序进行更细微的比较。

此外,这些信息是非常宝贵的,因为您可以使用均值和差分来对实际中机器学习过程的预期表现给出置信区间。

训练集和测试集划分和k-flod交叉验证都是重抽样方法的示例。

  • 为什么要使用重抽样方法?

机器学习的应用问题是尝试对未知数据进行建模。

在给定的预测建模问题上,理想模型是在对新数据进行预测时,执行得最好的模型。

我们没有新数据,所以我们必须用统计技巧。

训练集和测试集划分和k-flod交叉验证称为重抽样方法。重抽样方法是对数据集进行抽样和估计未知数量的统计过程。

在应用机器学习的情况下,我们有兴趣估计机器学习在未知数据上的学习过程的技能。更具体地说,预测是通过机器学习过程进行的。

一旦我们可以进行估计,我们则完成了重抽样方法。

  • 如果您正在使用训练集和测试集划分模型,那意味着您可以丢弃分割数据集和训练有素的模型。
  • 如果您使用k-fold交叉验证,那意味着您可以丢弃所有受过训练的模型。

他们已经达到目的,就不再需要了。

你现在就准备好确定你的模型了。

  • 如何确定模型?

您可以通过在所有数据上应用所选的机器学习过程来确定模型。

通过最终的模型,您可以:

  • 保存模型供以后或运行使用。
  • 对新数据进行预测。

那么交叉验证模型和train-test数据集呢?

他们被丢弃了,他们不再被需要了。他们就是用来帮助您选择一个确定的程序来确定模型。

  • 常见问题

这部分列出了一些你可能会遇到的问题。

为什么不让模型在训练数据集上训练?为什么保持交叉验证模型的最佳模式?

如果你喜欢,你可以这样做。在技能估计的时候重复使用其中一个模型可以节省很多时间和精力。

如果需要几天、几个星期甚至几个月来训练一个模型,这是一个很大的工程。

对所有可用数据进行训练时,您的模型可能会比仅用于估计模型性能的子集数据更好。

这就是为什么我们更愿意在所有可用的数据上训练出最终的模型。

在不同的数据集上训练,模型的性能也会不同吗?

我认为这是关于确定最终模型的一个误区。

换一种说法:

  • 如果您在所有可用数据上训练模型,那么您如何知道该模型的表现呢?

您已经使用重抽样方法回答了这个问题。

如果程序设计得好,则使用train-test或k-flod交叉验证计算的性能测量值适当地描述了对所有可用历史数据进行训练的最终模型的效果有多好。

如果您使用k-fold交叉验证,您将会估算出模型在平均水平上如何“错误”(或相反地,如何“正确”),以及该错误或正确性的预期扩散程度。

这就是为什么您精心设计的测试工具在机器学习中是极其重要的。更强大的测试工具将使您更加依赖于估计的性能。

每次训练模型时,我都会获得不同的分数; 我应该选择分数最高的模型吗?

机器学习算法是随机的,并且这种在相同数据上的不同性能的表现是可以预期的。

重抽样方法,如重复训练/测试或重复k-flod交叉验证将有助于处理方法中有多少变动。

如果是一个真正要解决的问题,您可以创建多个最终模型,并从一个预测集合中获得平均值,以减少差异。

关于这方面我在这篇文章中会谈到更多:

  • 接受机器学习中的随机性(http://machinelearningmastery.com/randomness-in-machine-learning/)
  • 总结

在这篇文章中,你学会了如何训练出最终的机器学习模型。

您已经克服了确定您的模型的障碍,例如:

  • 了解重抽样程序的目标,例如随机训练集和测试集的拆分和k折交叉验证。
  • 在所有可用数据上训练一个新模型时,模型的确定。
  • 将估计性能的模型与最终确定模型分开。

您是否还有其他我没提及的关于确定最终模型的问题?

在评论中提问,我会尽力帮助。

END.

来源:http://machinelearningmastery.com/train-final-machine-learning-model/

PPV课小组翻译,转载请联系授权。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-03-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PPV课数据科学社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档