中文文档: http://sklearn.apachecn.org/cn/stable/modules/model_persistence.html
英文文档: http://sklearn.apachecn.org/en/stable/modules/model_persistence.html
官方文档: http://scikit-learn.org/stable/
GitHub: https://github.com/apachecn/scikit-learn-doc-zh(觉得不错麻烦给个 Star,我们一直在努力)
贡献者: https://github.com/apachecn/scikit-learn-doc-zh#贡献者
关于我们: http://www.apachecn.org/organization/209.html
3.4. 模型持久化
在训练完 scikit-learn 模型之后, 最好有一种方法来将模型持久化以备将来使用,而无需重新训练. 以下部分为您提供了有关如何使用 pickle 来持久化模型的示例. 在使用 pickle 序列化时,我们还将回顾一些安全性和可维护性方面的问题.
3.4.1. 持久化示例
可以通过使用 Python 的内置持久化模型将训练好的模型保存在 scikit 中, 它名为 pickle:
在这个 scikit 的特殊示例中,使用 joblib 来替换 pickle (joblib.dump
& joblib.load
) 可能会更有意思, 这对于内部带有大量数组的对象来说更为高效, 通常情况下适合 scikit-learn estimators(预估器), but can only pickle to the disk and not to a string:
之后你可以使用以下方式加载 pickled model(可能在另一个 Python 进程中):
Note
joblib.dump
和 joblib.load
函数也接收类似 file 的对象而不是文件名. 有关使用 Joblib 来持久化数据的更多信息可以参阅 这里.
3.4.2. 安全性和可维护性的局限性
pickle (和通过扩展的 joblib), 在安全性和可维护性方面存在一些问题. 由于以下原因,
- 不要打开不受信任的数据, 因为它可能导致恶意代码在加载时执行.
- 虽然使用一个版本的 scikit-learn 保存的模型可能会在其他版本中加载,但这完全不受支持并且也不合适. 还应该记住, 对这些数据执行的操作可能会产生不同和意想不到的结果.
为了用将来版本的 scikit-learn 来重构类似的模型, 额外的元数据应该随着 pickled model 一起被保存:
- 训练数据, 例如. 引用不可变的快照
- 用于生成模型更多 python 源代码
- scikit-learn 以及它的 dependencies 的版本
- 在训练数据的基础上获得的交叉验证得分
这样可以检查交叉验证得分是否与以前的范围相同.
由于模型内部表示可能在两种不同架构上不一样, 因此不支持在一个架构上转储模型并将其加载到另一个体系架构上.
如果您想要了解关于这些 issues 以及浏览其它可能的序列化方法的更多详情,请参阅这个 Alex Gaynor 的演讲.
中文文档: http://sklearn.apachecn.org/cn/stable/modules/model_persistence.html
英文文档: http://sklearn.apachecn.org/en/stable/modules/model_persistence.html
官方文档: http://scikit-learn.org/stable/
GitHub: https://github.com/apachecn/scikit-learn-doc-zh(觉得不错麻烦给个 Star,我们一直在努力)
贡献者: https://github.com/apachecn/scikit-learn-doc-zh#贡献者
关于我们: http://www.apachecn.org/organization/209.html
有兴趣的们也可以和我们一起来维护,持续更新中 。。。
机器学习交流群: 629470233