专栏首页AI研习社支招 | 构建机器学习系统的六个重要步骤

支招 | 构建机器学习系统的六个重要步骤

原标题 | Six Important Steps to Build a Machine Learning System

作 者 | Rahul Agarwal

翻 译 | Pita、邺调(江苏科技大学)

图片来自:Pixabay

构建一个伟大的机器学习系统是一门讲究的艺术。

在构建的过程中,你需要考虑很多事情。但是作为数据科学家的我们往往只担心了项目的其中某些部分。

尽管大部分时间都在建模,但实际上,机器学习项目的成功或失败取决于许多其他因素。

机器学习管道不仅仅是创建模型

在培训模型之前以及培训模型并将其部署到生产中之后,了解其中发生了什么是至关重要的。

这篇文章是关于解释端到端数据项目管道涉及的内容。这是我在职业生涯中很晚才学到的东西。

1.问题定义


非常显然,第一个重要步骤就是 定义问题

而且,这可能是整个构建机器学习系统过程中最重要的部分。

那么,我们如何为机器学习定义问题呢?

这取决于很多因素。在我们考虑的所有要素中,第一个应该是了解它将如何使业务受益。

这也是任何数据科学项目的圣杯,如果你的项目无法为业务带来帮助,那么这个项目将不会部署并走向终结。

一旦你有了想法并确定了业务的兼容性,你就需要定义一个项目成功的衡量标准。

那么问题来了,怎样才算项目成功了呢?

是达到90%,95%还是达到99%就算成功了呢?

在我看来,可能70%的预测准确性我就已经感到很满意了,因为普通人不会超过这个准确度,同时,你可以让这个过程自动化。

注意了,现阶段不应该定这么高的(准确度)目标,是时候理智地对待每1%的准确度变化如何影响项目的成功。

举个例子:对于点击预测问题/欺诈应用,与审查情绪预测的准确度增加1%相比,1%的准确度增加将提升它们的业务底线。

并非所有准确度的增加带来的结果都是相同的。

2.数据


在为你的机器学习模型进行数据获取和数据创建时,你需要思考几个问题。

需要回答的最重要的问题是:这个模型需要实时工作吗?

如果你的回答是“是”的话,这种情况就无法使用Hive / Hadoop等系统来进行数据存储,因为这类系统可能会引入大量延迟,并且更适合离线批处理。

问题2:你的模型需要实时训练吗?

如果机器学习模型的性能表现随着时间的推移而降低,如上图所示,那么应该考虑进行实时训练。随着互联网趋势的变化相当快,实时训练可能对大多数的点击预测系统更有益。

问题3:测试和训练的数据之间是否存在不一致情况?

或者用简单的话来说 - 你是否怀疑生产数据来自与培训数据不同的分布?

例如:在针对点击预测问题的实时训练中,你向用户展示了广告,而他没有点击。这是一个失败的例子吗?通常用户可能会在10分钟后才进行点击。但是你已经创建了数据并在此基础上训练了你的模型。

在为你设计的模型准备数据时,你应该考虑许多因素。在这个阶段,你需要提出问题并从头到尾思考整个过程才能成功。

3.评估分析


我们应该如何评估分析我们设计的模型的表现呢?

这里的黄金标准是训练-测试-验证拆分。

经常,我们会通过采样来制作训练验证测试集,但是我们忘记了一个隐含的假设 —— 数据很少是IID(独立且恒等分布)。

简单来说,我们假设每个数据点彼此独立且恒等分布,即使不是完全错误的,至少也是错误的。

对于一家互联网公司而言,2007年的数据点与2019年的数据点是截然不同的。由于很多因素,互联网发展的速度才是最重要的,因此它们并非来自相同的分布。

如果你有做过猫与狗的预测问题,那么随机抽样方面的就会表现得非常好。但是,在大多数机器学习模型中,它们的任务是预测未来。

你可以考虑使用时间变量拆分数据,而不是从数据中随机抽样。例如:对于点击预测问题,你可以将上个月的所有过去的数据作为上个月的训练数据和验证数据。

你要考虑的下一个因素是基线模型。

假设我们使用RMSE作为时间序列模型的评估指标。我们在测试集上评估了模型,结果RMSE为4.8。

所以这是个好的RMSE吗?咱也不敢问,咱也不知道啊。因此我们需要一个基线RMSE,它可能来自当前用于相同任务的模型。或者使用一些简单的模型。对于时间序列模型,失败的基线是对最后一天的预测,即预测前一天的数量。

对于NLP分类模型,我通常会将基线设置为Countvectorizer(Bag of words)上Logistic回归模型的评价指标(precision, F1, log loss)。

你还应该考虑如何在多个组中打破评估,这样你的模型不会导致不必要的偏差。

去年,亚马逊被曝正在秘密使用人工智能招聘工具的消息,该工具显示出对女性的偏见。为了使得我们的机器学习模型免于这种不一致,我们需要在不同的组上评估我们的模型。也许我们的模型对于女性而言并不像男性那么准确,因为在训练数据中,女性的数量要少得多。

或者一个预测产品是否会被购买的模型对于特定的产品类别非常有效,而对于其他类别则不然。

事先牢记这些事情并准确地思考特定评估方法可能出现的问题,这无疑能帮助我们设计一个好的机器学习系统。

4.功能特性


良好的功能特性是任何机器学习模型的支柱,而且这些特性往往是你会花最多时间设计的部分。我已经看到,这个(功能特性)也是你可以进行调优以获得最大模型性能的部分。

好的功能特性的创建通常需要领域知识、创造力和大量的时间。

最重要的是,对于不同的模型,功能特性的创建练习可能会发生变化。例如,对于神经网络和XGboost,特性创建是非常不同的。

理解特性创建的各种方法本身就是一个相当大的主题。我在这里写了一篇关于特性创建的文章。点击底部【阅读原文】可戳相关链接查看:

https://towardsdatascience.com/the-hitchhikers-guide-to-feature-extraction-b4c157e96631

一旦创建了许多功能特性,接下来要做的就是删除冗余特性。以下文章有一些方法可以做到这一点:

https://towardsdatascience.com/the-5-feature-selection-algorithms-every-data-scientist-need-to-know-3a6b566efd2

5.建模


可解释的手册(https://christophm.github.io/interpretable-ml-book/terminology.html)

现在轮到我们最关心的部分了。有何不可呢?它是我们最终在项目结束时交付的部分。这就是我们花费了所有时间在数据采集和清理,特征创建和诸如此类的部分。

那么在创建模型时我们需要考虑什么?

可能你需要问自己的第一个问题是,你的模型是否需要可解释?

在相当多的用例中,业务可能需要一个可解释的模型。其中一个这样的用例是,当我们想要做属性建模的时候。我们在这里定义了各种广告流(电视、广播、报纸等)对收入的影响。在这种情况下,了解来自每个广告流的响应就变得很有必要。

如果我们需要最大限度地提高精度或其他指标,我们仍然希望使用像NeuralNets或XGBoost这样的黑盒模型。

除了模型选择之外,你还应该考虑其他事项:

  • 模型架构:nns有多少层,gbt有多少树,或者您需要为线性模型创建特性交互。
  • 如何优化超参数?:您应该尝试自动执行此部分。市场上有很多这样的工具。我倾向于使用hyperopt。

6.实验


现在你已经创建了模型,它的性能比基线或者你当前的模型表现得更好。我们该如何继续研究呢?

我们有两个选择:

  1. 在进一步改进我们的模型时进入一个无止境的循环。
  2. 在生产环境中测试我们的模型,了解可能出现的问题,然后通过持续集成继续改进我们的模型。

我更喜欢第二种方法。Andrew Ng说,在他的第三门课程中【敬请点击阅读原文访问相关链接】,他命名为“深入学习专业化的机器学习项目”—

“不要一开始就试图设计和构建完美的系统。相反,快速构建和训练一个基本的系统——也许只需几天。即使基本系统离你能建立的“最佳”系统还很远,但研究基本系统的功能是很有价值的:你会很快找到线索,告诉你最有希望的方向,在哪方面投入时间。”

我还想强调的一点是持续整合。如果当前模型的性能比现有模型好,为什么不在生产中部署它,而不是在增量收益之后运行呢?

要测试你的模型优于现有模型的假设的有效性,可以设置A/B测试。一些用户(测试组)看到你的模型,而一些用户(控件)看到来自上一个模型的预测。

你应该始终致力于最大程度地缩短模型首次在线实验的时间。这不仅产生了价值,还让你了解了你的模型存在的缺点与实时反馈,然后你可以第一时间进行处理。

结论


在机器学习中没有什么是简单的。不应该有任何假设。

在构建机器学习管道时,你应该始终对所做的任何决策保持批评态度。

一个简单的决定可能是你的机器学习项目成败的区别。

所以要明智地思考,多思考。

这篇文章是增加我对机器学习生态系统的理解的一部分,灵感来自Facebook工程团队的一组很棒的视频(https://research.fb.com/videos/?cat=3)。

如果你想了解更多关于如何构建机器学习项目和最佳实践的知识,我想请他(Andrew Ng)在Coursera Deep Learning Specialization中推出的第三门非常棒的课程名为结构化机器学习项目。一定要去看看。【敬请点击阅读原文访问相关链接】

谢谢你的阅读。我也会在未来写更多适合初学者的帖子。请在medium上关注我(https://medium.com/@rahul_agarwal),或订阅我的博客(http://eepurl.com/dbQnuX)以了解他们的情况。一如既往,我欢迎反馈和建设性的批评,可以在twitter@mlwhiz上联系到我。

作者@rahul agarwal

via https://towardsdatascience.com/6-important-steps-to-build-a-machine-learning-system-d75e3b83686

本文分享自微信公众号 - AI研习社(okweiwu),作者:雷锋字幕组

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 高级数据科学家阿萨姆:如何应对机器学习过程中的多项选择问题?| 分享总结

    AI 研习社按:随着硬件算力的上升、数据量的加大以及各种新算法的浮现,机器学习也变得一天比一天火热。不夸张的说,这是机器学习的时代。然而,机器学习虽然能够给出惊...

    AI研习社
  • 2017 知乎看山杯从入门到第二

    利用一个暑假的时间,做了研究生生涯中的第一个正式比赛,最终排名第二,有些小遗憾,但收获更多的是成长和经验。我们之前没有参加过机器学习和文本相关的比赛,只是学过一...

    AI研习社
  • 黑客视角:避免神经网络训练失败,需要注意什么?

    确保网络正常运行的关键因素之一是网络的配置。正如机器学习大师 Jason Brownle 所说,「深度学习神经网络已经变得易于定义和拟合,但仍然难以配置。」

    AI研习社
  • 【学术】以精确性来提高对机器学习的信任

    传统的机器学习工作流程主要集中在模型训练和优化上,最好的模型通常是通过像精确或错误这样的性能度量来选择的,我们倾向于假定一个模型如果超过了这些性能标准的某些阈值...

    AiTechYun
  • DeepMind:实现通用语言智能我们还缺什么?

    2014年11月,那时候还没有被广泛认知为“深度学习教父”的Geoffrey Hinton,在国外网站Reddit回答网友提问的活动“AMA” (Ask Me ...

    新智元
  • 高级数据科学家阿萨姆:如何应对机器学习过程中的多项选择问题?| 分享总结

    AI 研习社按:随着硬件算力的上升、数据量的加大以及各种新算法的浮现,机器学习也变得一天比一天火热。不夸张的说,这是机器学习的时代。然而,机器学习虽然能够给出惊...

    AI研习社
  • 数据挖掘模型生命周期管理

    为成功地利用数据挖掘模型,我们需要从开发阶段直至生产环境对模型进行全面跟踪管理与评估。挖掘模型生命周期过程是由以下阶段组成的高效交替过程。 ? 确定商业目标 ...

    机器学习AI算法工程
  • 笔记︱集成学习Ensemble Learning与树模型、Bagging 和 Boosting、模型融合

    本文参考:模型融合的【机器学习】模型融合方法概述 概况有五个部分:Voting、Averaging、Bagging 、blending、Boosting、 S...

    素质
  • 2017 知乎看山杯从入门到第二

    利用一个暑假的时间,做了研究生生涯中的第一个正式比赛,最终排名第二,有些小遗憾,但收获更多的是成长和经验。我们之前没有参加过机器学习和文本相关的比赛,只是学过一...

    AI研习社
  • 【机器学习】机器到底在学习什么?

    机器识别手写数字的问题早已经解决,MNIST数据集http://yann.lecun.com/exdb/mnist/如今机器识别的准确率已经超过99%。事实上,...

    量化投资与机器学习微信公众号

扫码关注云+社区

领取腾讯云代金券