5

对于持久化和重用训练有素的机器学习模型有什么建议/最佳实践吗?我正在用 Python 或 R 开发模型。然后这些模型必须在生产工作流程中用于评分(其中 R 不可用)。例如,可能有一个在 R 中训练的逻辑回归模型。现在需要针对该模型对新的观察结果进行评分。评分引擎必须快速且可扩展。我想过跟随

  1. PMML ( http://en.wikipedia.org/wiki/Predictive_Model_Markup_Language )。用 R 开发的大多数模型很容易转换为 pmml。但是,我找不到适用于 PMML 模型的有用评分引擎。例如,有 augustus ( https://code.google.com/p/augustus/ ) 但它只实现了 3-4 个模型。

  2. 在 Python 中使用 pickle 序列化模型并在 Python 中编写消费者。

关于正确方法的任何想法/建议?

4

3 回答 3

2

该领域成熟的库Scikit-learn使用pickle 来实现模型的持久化。我收集到您正在编写自己的函数来训练模型,但是查看已建立的库可以告诉您最佳实践。

另一方面,JSON 可以从多种语言中读取。这是它的主要优势。如果您计划从另一种语言提供模型结果,并且您的模型是相当简单的 Python 对象,那么将它们序列化为 JSON 应该很容易。

于 2014-02-13T12:24:50.910 回答
0

您可以在 python 中使用 pickle 保存和加载模型,如下所示,

import pickle
s = pickle.dumps(clf)
clf2 = pickle.loads(s)

另一种方法是使用 joblib,它对内部携带大型 numpy 数组的对象更有效,就像拟合的 scikit-learn 估计器经常出现的情况一样。

from sklearn.externals import joblib
joblib.dump(clf, 'filename.pkl')
clf = joblib.load('filename.pkl') 

然后可以将该模型作为 RESTful API 部署到生产环境中。

于 2017-09-20T05:59:20.823 回答
0

您可以使用消息包。它使用类似 JSON 的格式来存储模型。它速度快,占用内存少。 https://github.com/muayyad-alsadi/sklearn_msgpack

于 2020-05-17T13:28:34.793 回答