天天看點

Demo3 - 儲存訓練後模型

訓練好的模型,需要儲存好,下次就直接拿來用,相當于是機器學習的成果。不用每次都去學習了, 直接儲存成檔案,然後下個項目直接導入,就可以使用了。

目前兩種方法比較好用。

  1. python自帶pickle
  2. sklearn joblib工具

還是直接上代碼,兩種方式都已經在注釋裡面。

# -- coding: utf-8 --
# 通過本個demo 将學習後的模型進行儲存。 這樣就不用每次都重新訓練模型。
# (模型的保留的遷移)

# 方法1,使用python自帶的pickle
from sklearn.ensemble import RandomForestClassifier
from sklearn import datasets
from sklearn.externals import joblib
import pickle # ->python 自帶

#  使用sklearn提供的一些demo資料,load_xxxx資料


(X,y) = datasets.load_iris(return_X_y=True)

# 模型建構
rfc = RandomForestClassifier(n_estimators=100,max_depth=100)
rfc.fit(X,y)

# 驗證模式
print("模型初步驗證:")
print(rfc.predict(X[0:1,:]))

# -- 重點! save Model
# file = open('saved_model/rfc.pickle','w')
# pickle.dump(rfc,file)
# file.close()

joblib.dump(rfc,'saved_model/rfc.pkl')  # - 官方建議方式joblib

print("模型已經儲存到 saved_model")
           

一些附加知識

Pickle是python中一種标準的序列化對象的方法。你可以使用

pickle

操作來序列化你的機器學習算法,儲存這種序列化的格式到一個檔案中。稍後你可以導入這個檔案反序列化你的模型,用它進行新的預測。以下的例子向你展示:如何使用

Pima Indians onset of diabetes

資料集,訓練一個logistic回歸模型,儲存模型到檔案,導入模型對未知資料進行預測。運作以下代碼把模型存入你工作路徑中的finalized_model.sav,導入模型,用未知資料評估模型的準确率

Joblib

是SciPy生态的一部分,為管道化python的工作提供的工具。它提供了存儲和導入python對象的工具,可以對Numpy資料結構進行有效的利用。這對于要求很多參數和存儲整個資料集的算法(比如K-Nearest Neighbors)很有幫助。以下代碼向你展示:如何使用

資料集,訓練一個logistic回歸模型,使用joblib儲存模型到檔案,導入模型對未知資料進行預測。運作以下代碼把模型存入你工作路徑中的finalized_model.sav,也會建立一個檔案儲存Numpy數組,導入模型,用未知資料評估模型的準确率。

儲存模型的幾點提醒

當你存儲你的機器學習模型時,需要考慮以下重要問題。一定要記住,記錄下你的工具版本,以便于重構環境。

  1. python的版本:記錄下python的版本。需要相同大版本号的python來序列化和反序列化模型。
  2. 庫的版本:主要的庫的版本要保持一緻,不僅限于Numpy和scikit-learn的版本。
  3. 手動序列化:你可能想要手動的輸出你的模型參數以便于你可以直接把他們用在scikit-learn或者其他的平台。确實學習算法參數實作比算法本身實作要難得多。如果你有能力也可以自己寫代碼來導出參數。