中文文檔: 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:
>>> from sklearn import svm
>>> from sklearn import datasets
>>> clf = svm.SVC()
>>> iris = datasets.load_iris()
>>> X, y = iris.data, iris.target
>>> clf.fit(X, y)
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
decision_function_shape='ovr', degree=3, gamma='auto', kernel='rbf',
max_iter=-1, probability=False, random_state=None, shrinking=True,
tol=0.001, verbose=False)
>>> import pickle
>>> s = pickle.dumps(clf)
>>> clf2 = pickle.loads(s)
>>> clf2.predict(X[0:1])
array([0])
>>> y[0]
0
在這個 scikit 的特殊示例中,使用 joblib 來替換 pickle (joblib.dump
& joblib.load
)
可能會更有意思, 這對於內部帶有大量數組的對象來說更爲高效, 通常情況下適合 scikit-learn estimators(預估器), but can only pickle to the disk and not to a string:
>>> from sklearn.externals import joblib
>>> joblib.dump(clf, 'filename.pkl')
之後你可以使用以下方式加載 pickled model(可能在另一個 Python 進程中):
>>> clf = joblib.load('filename.pkl')
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