【Scikit-Learn 中文文檔】模型持久化 - 模型選擇和評估 - 用戶指南 | ApacheCN

中文文檔: 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

發佈了29 篇原創文章 · 獲贊 8 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章