机器学习的模型持久化

机器学习模型保存方法

什么是模型持久化?

  • 持久地保存模型以供将来使用,而无需重新训练

机器学习模型如何进行序列化?

  • 跨平台跨语言通用序列化方法,主要使用三种格式:XML,JSON,和 Protobuf,前两种是文本格式,人和机器都可以理解,后一种是二进制格式,只有机器能理解,但在存储传输解析上有很大的速度优势。
  • 语言级通用序列化方法:pickle 是标准的 Python 序列化的方法;通过 joblib 序列化对象时会采用 NumPy 的格式保存数据,这对某些保存数据到模型中的算法非常有效
  • 模型本身提供的自定义序列化方法
  • 用户自定义序列化方法,使用自定义序列化格式,以满足自己的特殊部署需求:部署性能、模型大小、环境要求等等

在 sklearn 中,如何使用”Python 特定序列化 “行模型持久化?

  • 使用 Python 的内置持久性模型,即 pickle 将模型保存
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     >>> from sklearn import svm
    >>> from sklearn import datasets
    >>> clf = svm.SVC()
    >>> X, y= datasets.load_iris(return_X_y=True)
    >>> clf.fit(X, y)
    SVC()
    >>> import pickle
    >>> s = pickle.dumps(clf)
    >>> clf2 = pickle.loads(s)
    >>> clf2.predict(X[0:1])
    array([0])
    >>> y[0]
    0

在 sklearn 中,如何使用 joblib 替换 pickle 进行模型持久化?

  • 这对于内部携带大型 numpy 数组的对象更有效
    1
    2
    3
    4
    5
    6
    7
    8
    9
     >>> from sklearn import svm
    >>> from sklearn import datasets
    >>> clf = svm.SVC()
    >>> X, y= datasets.load_iris(return_X_y=True)
    >>> clf.fit(X, y)
    SVC()
    >>> from joblib import dump, load
    >>> dump(clf, 'filename.joblib')
    >>> clf = load('filename.joblib')