机器学习的模型持久化
机器学习模型保存方法
什么是模型持久化?
- 持久地保存模型以供将来使用,而无需重新训练
机器学习模型如何进行序列化?
- 跨平台跨语言通用序列化方法,主要使用三种格式: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')