![](/img/trans.png)
[英]What is the canonical way to obtain parameters of a trained classifier in 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.