机器学习模型持久性选项
Posted
技术标签:
【中文标题】机器学习模型持久性选项【英文标题】:Machine learning models persistence options 【发布时间】:2014-03-12 07:30:41 【问题描述】:对于持久化和重复使用经过训练的机器学习模型有什么建议/最佳做法?我正在使用 Python 或 R 开发模型。然后这些模型必须在生产工作流程中用于评分(其中 R 不可用)。例如,可能有一个在 R 中训练的逻辑回归模型。现在需要针对该模型对新的观察结果进行评分。评分引擎必须快速且可扩展。我已经考虑过
PMML (http://en.wikipedia.org/wiki/Predictive_Model_Markup_Language)。将 R 中开发的大多数模型转换为 pmml 很容易。但是,我找不到适用于 PMML 模型的有用评分引擎。例如,有 augustus (https://code.google.com/p/augustus/),但它只实现了 3-4 个模型。
在 Python 中使用 pickle 对模型进行序列化,并在 Python 中编写使用者。
关于正确方法的任何想法/建议?
【问题讨论】:
您需要使用哪些型号? @pacoid :主要是回归模型(线性和逻辑)和基于树的模型。 【参考方案1】:你可以使用消息包。它使用类似 JSON 的格式来存储模型。它速度快,占用内存少。 https://github.com/muayyad-alsadi/sklearn_msgpack
【讨论】:
【参考方案2】:你可以在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 部署到生产环境中。
【讨论】:
【参考方案3】:Scikit-learn,该领域成熟的库,使用pickle for its persistence of models。我猜您正在编写自己的函数来训练模型,但是查看已建立的库可以告诉您最佳实践。
另一方面,JSON 可以从多种语言中读取。这是它的主要优势。如果您计划从其他语言提供模型结果,并且您的模型是相当简单的 Python 对象,那么将它们序列化为 JSON 应该很容易。
【讨论】:
以上是关于机器学习模型持久性选项的主要内容,如果未能解决你的问题,请参考以下文章