首页 文章

如何在 生产环境 环境中部署机器学习算法?

提问于
浏览
3

我是机器学习算法的新手 . 我正在学习基本算法,如回归,分类,聚类,序列建模,在线算法 . 互联网上提供的所有文章都展示了如何将这些算法与特定数据一起使用 . 没有关于在 生产环境 环境中部署这些算法的文章 . 所以我的问题是

1) How to deploy machine learning algorithm in production environment?

2)机器学习教程中的典型方法是使用一些训练数据构建模型,用它来测试数据 . 但是在 生产环境 环境中使用这种模型是否明智?传入的数据可能会不断变化,因此模型无效 . What should be duration for the model refresh cycle 容纳这样的变化?

2 回答

  • 3

    我不确定这是不是一个好问题(因为它太笼统而且没有表现好),但我建议你阅读偏差 - 方差权衡 . 简而言之,您可以使用低偏差\高方差机器学习模型,并在测试数据(用于实现模型的数据)上获得100%准确的结果,但是您可能会导致模型过度拟合训练数据 . 因此,当您尝试在训练期间未使用的数据上使用它时,将导致性能不佳 . 另一方面,您可能具有高偏差\低方差模型,这将很难适应您的训练数据,并且对新的 生产环境 数据也会表现差 . 记住一般准则将是:

    1)获取一些可用于构建机器学习系统原型的大量数据

    2)将数据拆分为列车集,交叉验证集和测试集

    3)创建一个模型,该模型在您的测试数据上具有相对较低的偏差(良好的准确性,实际上 - 良好的F1分数) . 然后在交叉验证集上尝试此模型以查看结果 . 如果结果不好 - 你有很高的方差问题,你使用了一个过度拟合数据的模型,并且不能很好地推广 . 重新编写模型,使用模型参数或使用不同的算法 . 重复,直到你在CV集上得到一个好的结果

    4)由于我们使用模型以便在CV集上获得良好的结果,因此您希望在测试集上测试最终模型 . 如果它是好的 - 就是这样,你有一个最终版本的模型,可以在prod环境中使用它 .

    第二个问题没有答案,它基于您的数据和您的应用程序 . 但可能会使用两种通用方法:

    1)做我之前提到的所有内容来构建一个在测试集上具有良好性能的模型 . 在一段时间内对新数据重新训练模型(尝试不同的时期,但是一旦看到模型的性能下降,您可以尝试重新训练模型) .

    2)使用在线学习方法 . 这不适用于许多算法,但在某些情况下可以使用它 . 通常,如果您发现可以使用随机梯度下降学习方法 - 您可以使用在线学习,并使您的模型与最新的 生产环境 数据保持同步 .

    请记住,即使您使用#2(在线学习方法),您也无法确定您的模型将永远是好的 . 您获得的数据迟早可能会发生显着变化,您可能希望使用完全不同的模型(例如,切换到ANN而不是SWM或逻辑回归) .

  • 5

    DISCLAIMER: I work for this company, Datmo building a better workflow for ML. We’re always looking to help fellow developers working on ML so feel free to reach out to me at anand@datmo.com if you have any questions.

    1)为了部署,您应该首先将代码拆分为预处理,培训和测试 . 这样,您可以轻松地封装所需的组件以进行部署 . 通常,您将需要进行预处理,测试以及权重文件(培训过程的输出)并将它们放在一个文件夹中 . 接下来,您将希望在服务器上托管它并围绕此服务器包装API服务器 . 我建议使用Flask Restful API,以便您可以使用查询参数作为输入,并在标准JSON blob中输出响应 .

    要在服务器上托管它,您可以使用this article来讨论如何在EC2上部署Flask API .

    您可以加载和建模并将其作为API提供,如code中所示 .

    2)没有更多细节我很难回答 . 它高度依赖于数据类型和模型类型 . 例如,对于深度学习,没有在线学习这样的东西 .

相关问题