簡體   English   中英

Python scikit-learn:導出訓練有素的分類器

[英]Python scikit-learn: exporting trained classifier

我正在使用基於scikit-learn的nolearn的DBN(深度信念網絡)。

我已經構建了一個可以很好地對我的數據進行分類的網絡,現在我有興趣導出模型進行部署,但我不知道(我每次想要預測某些東西時都在訓練DBN)。 matlab我只需導出權重矩陣並將其導入另一台機器。

有人知道如何導出要導入的模型/權重矩陣而無需再次訓練整個模型嗎?

您可以使用:

>>> from sklearn.externals import joblib
>>> joblib.dump(clf, 'my_model.pkl', compress=9)

然后,在預測服務器上:

>>> from sklearn.externals import joblib
>>> model_clone = joblib.load('my_model.pkl')

這基本上是一個Python pickle,具有針對大型numpy數組的優化處理。 它與常規pickle wrt代碼更改具有相同的限制:如果pickle對象的類結構發生更改,則可能無法再使用nolearn或scikit-learn的新版本來解除對象的攻擊。

如果您想要長期穩健地存儲模型參數,則可能需要編寫自己的IO層(例如,使用二進制格式序列化工具,如協議緩沖區或avro或低效但可移植的文本/ json / xml表示,如PMML ) 。

pickling / unpickling的缺點是它只適用於匹配的python版本(主要版本,也可能是次要版本)和sklearn,joblib庫版本。

機器學習模型還有其他描述性輸出格式,例如由數據挖掘組開發的格式,例如預測模型標記語言(PMML)和可移植分析格式(PFA)。 在這兩者中,PMML得到了更好的支持

所以,你必須保存從模型的選擇scikit學習到PMML(例如使用sklearn2pmml ),然后部署,並在Java中,火花,或蜂房使用運行jpmml (當然你有更多的選擇)。

3.4 scikit-learn文檔中的模型持久性幾乎涵蓋了所有內容。

除了sklearn.externals.joblib ogrisel指出,它還顯示了如何使用常規的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, degree=3, gamma=0.0,
  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])
array([0])
>>> y[0]
0

並提供一些警告,例如在一個版本的scikit-learn中保存的模型可能無法加載到另一個版本中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM