机器学习模型持久性选项

时间:2014-02-13 12:12:43

标签: python r machine-learning pmml

持久和重复使用经过培训的机器学习模型的任何建议/最佳做法?我正在用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编写使用者。

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

3 个答案:

答案 0 :(得分:2)

Scikit-learn,此字段中的成熟库,使用pickle for its persistence of models。我知道你正在编写自己的函数来训练模型,但是查看已建立的库可以告诉你最佳实践。

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

答案 1 :(得分: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部署在生产环境中。

答案 2 :(得分:0)

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