JSON

深度學習小技巧(二):如何保存和恢複scikit

字号+ 作者:H5之家 来源:H5之家 2017-10-30 18:28 我要评论( )

735 阿裏雲 技術社區[雲棲] 深度學習小技巧(二):如何保存和恢複scikit-learn訓練的模型 更多深度文章,請關注雲計算頻道: https://yq.aliyun.com/cloud 深度學習小技巧(一):如何保存和恢複TensorFlow訓練的模型 在許多情況下,在使用 scikit 學習 庫

735  阿裏雲  技術社區[雲棲]

深度學習小技巧(二):如何保存和恢複scikit-learn訓練的模型

更多深度文章,請關注雲計算頻道:https://yq.aliyun.com/cloud

深度學習小技巧(一):如何保存和恢複TensorFlow訓練的模型

在許多情況下,在使用scikit學習庫的同時,你需要將預測模型保存到文件中,然後在使用它們的時候還原它們,以便重複使用以前的工作。比如在新數據上測試模型,比較多個模型的優劣。這種保存過程也稱為對象序列化——表示具有字節流的對象,以便將其存儲在磁盤上,它可以通過網絡發送或保存到數據庫,而其恢複的過程被稱為反序列化。在本文中,我們將在Python和scikit學習中看到三種可能的方法,而且每種都有其優點和缺點。

1.保存和恢複模型的工具

庫,它提供了容易(de)序列化方法,其中包含了大數據數組的對象,最後我們會介紹一種手動方法來保存和恢複JSON對象(JavaScript Object Notation)。這些方法都不能代表最佳解決方案,但是可以根據項目的需要選擇合適的方案。

2.模型初始化


from sklearn.linear_model import LogisticRegression from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split # Load and split data data = load_iris() Xtrain, Xtest, Ytrain, Ytest = train_test_split(data.data, data.target, test_size=0.3, random_state=4)

現在讓我們用一些非默認參數來創建模型,並用訓練數據來“喂養”它。我們假設你先前已經找到了模型的最優參數,即產生最高估計精度的參數。

# Create a model model = LogisticRegression(C=0.1, max_iter=20, fit_intercept=True, n_jobs=3, solver='liblinear') model.fit(Xtrain, Ytrain)

這是我們產生的模型:

LogisticRegression(C=0.1, class_weight=None, dual=False, fit_intercept=True, intercept_scaling=1, max_iter=20, multi_class='ovr', n_jobs=3, penalty='l2', random_state=None, solver='liblinear', tol=0.0001, verbose=0, warm_start=False)

使用該fit方法,模型已經學習了存儲在其中的係數model.coef_。目標是將模型的參數和係數保存到文件中,因此你不需要再次對新數據重複模型訓練和參數優化的步驟。

3.Pickle模塊

在以下幾行代碼中,我們將上一步中創建的模型保存到文件中,然後作為一個新對象加載pickled_model。然後使用加載的模型計算準確度分數,並對新的未見(測試)數據進行預測結果。


import pickle # # Create your model here (same as above) # # Save to file in the current working directory pkl_filename = "pickle_model.pkl" with open(pkl_filename, 'wb') as file: pickle.dump(model, file) # Load from file with open(pkl_filename, 'rb') as file: pickle_model = pickle.load(file) # Calculate the accuracy score and predict target values score = pickle_model.score(Xtest, Ytest) print("Test score: {0:.2f} %".format(100 * score)) Ypredict = pickle_model.predict(Xtest)

運行此代碼應該會產生你的預測分數,並通過Pickle保存模型:

$ python save_model_pickle.py Test score: 91.11 %

使用Pickle來保存和恢複學習模型的好處在於它很快,並且你可以用兩行代碼完成。如果你已經對訓練數據上的模型參數進行了優化,那麼這是非常有用的,因此你不需要重複此步驟。不管如何,它都不保存測試結果和任何數據。但仍然可以保存多個對象的元組或列表(並記住哪個對象在哪裏),如下所示:

tuple_objects = (model, Xtrain, Ytrain, score) # Save tuple pickle.dump(tuple_objects, open("tuple_model.pkl", 'wb')) # Restore tuple pickled_model, pickled_Xtrain, pickled_Ytrain, pickled_score = pickle.load(open("tuple_model.pkl", 'rb'))

3.Joblib模塊

Joblib庫它的目的是替代Pickle,用於包含大數據的對象。我們將重複與Pickle一樣的保存和恢複過程。


from sklearn.externals import joblib # Save to file in the current working directory joblib_file = "joblib_model.pkl" joblib.dump(model, joblib_file) # Load from file joblib_model = joblib.load(joblib_file) # Calculate the accuracy and predictions score = joblib_model.score(Xtest, Ytest) print("Test score: {0:.2f} %".format(100 * score)) Ypredict = pickle_model.predict(Xtest)
$ python save_model_joblib.py Test score: 91.11 %

從示例中可以看出,與Pickle相比,Joblib庫提供了一個簡單的工作流程。雖然Pickle要求將文件對象作為參數傳遞,但是Joblib可與文件對象和字符串文件名一起使用。如果你的模型包含大量數據,則每個數組將存儲在單獨的文件中,但整體的保存和恢複過程將保持不變。Joblib還允許使用不同的壓縮方法,如“zlib”,“gzip”,“bz2”和不同的壓縮級別。

4.手動保存並還原到JSON

以下顯示了使用JSON手動保存和恢複對象的示例。這種方法允許我們選擇需要保存的數據,例如模型參數,係數,訓練數據以及我們需要的任何其他數據。

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • PowerShell中的特殊变量$null介绍和创建多行注释小技巧 / jeepyu

    PowerShell中的特殊变量$null介绍和创建多行注释小技巧 / jeepyu

    2017-10-24 18:17

  • Backbone.js的一些使用技巧

    Backbone.js的一些使用技巧

    2017-10-24 13:07

  • javascript变量json对象等到路径

    javascript变量json对象等到路径

    2017-10-19 17:33

  • JS使用json数据自动填充表单

    JS使用json数据自动填充表单

    2017-10-13 09:02

网友点评
d