的 免责声明:我在这家公司工作, Datmo 为ML建立更好的工作流程。我们一直希望帮助开发ML的开发人员,如果您有任何疑问,请随时通过anand@datmo.com与我联系。 强>
1)为了部署,您应该首先将代码分为预处理,培训和测试。这样,您可以轻松地封装所需的组件以进行部署。通常,您将需要进行预处理,测试以及权重文件(培训过程的输出)并将它们放在一个文件夹中。接下来,您将希望在服务器上托管它并围绕此服务器包装API服务器。我建议一个 Flask Restful API 这样您就可以使用查询参数作为输入,并在标准JSON blob中输出响应。
要在服务器上托管它,您可以使用 本文 其中讨论了如何在EC2上部署Flask API。
您可以加载和建模并将其作为API提供,如下所示 码 。
2)没有更多细节我很难回答。它高度依赖于数据类型和模型类型。例如,对于深度学习,没有在线学习这样的东西。
我不确定这是不是一个好问题(因为它太笼统而且没有表现好),但我建议你阅读偏差 - 方差权衡。简而言之,您可以使用低偏差\高差异机器学习模型,并在测试数据(您用于实现模型的数据)上获得100%准确的结果,但是您可能会使您的模型过度拟合训练数据。因此,当您尝试在训练期间未使用的数据上使用它时,将导致性能不佳。另一方面,您可能具有高偏差\低方差模型,这将很难适应您的训练数据,并且对新的生产数据也会表现差。记住一般准则将是:
1)获取一些可用于构建机器学习系统原型的大量数据
2)将您的数据拆分为列车集,交叉验证集和测试集
3)创建一个模型,该模型在测试数据上具有相对较低的偏差(良好的准确性,实际上 - 良好的F1分数)。然后在交叉验证集上尝试此模型以查看结果。如果结果不好 - 您的方差问题很大,那么您使用了一个过度拟合数据并且不能很好地推广的模型。重写模型,使用模型参数或使用不同的算法。重复,直到你在CV集上得到一个好的结果
4)由于我们使用模型以便在CV集上获得良好的结果,因此您希望在测试集上测试最终模型。如果它是好的 - 就是这样,你有一个模型的最终版本,可以在prod环境中使用它。
第二个问题没有答案,它基于您的数据和您的应用程序。但可能会使用两种通用方法:
1)做我之前提到的所有内容来构建一个在测试集上具有良好性能的模型。在一段时间内重新训练您的模型新数据(尝试不同的时期,但是一旦您看到模型的性能下降,您可以尝试重新训练您的模型)。
2)使用在线学习方法。这不适用于许多算法,但在某些情况下可以使用它。通常,如果您发现可以使用随机梯度下降学习方法 - 您可以使用在线学习,并使您的模型与最新的生产数据保持同步。
请记住,即使您使用#2(在线学习方法),您也无法确定您的模型将永远是好的。您获得的数据迟早可能会发生显着变化,您可能希望使用完全不同的模型(例如,切换到ANN而不是SWM或逻辑回归)。