scikit-learn中如何保存模型?

有些模型,比如rf應該是可以保存著的,stackoverflow上見過一個用cPickle的,但是我自己的情況用了無效,不知道還有什麼方法?


sklearn中提供了高效的模型持久化模塊joblib,將模型保存至硬碟。

from sklearn.externals import joblib
#lr是一個LogisticRegression模型
joblib.dump(lr, "lr.model")
lr = joblib.load("lr.model")


Scikit-learn 官網上建議的兩種方式:

1. 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=None, 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

2. joblib

&>&>&> from sklearn.externals import joblib
&>&>&> joblib.dump(clf, "filename.pkl")
&>&>&> clf = joblib.load("filename.pkl")


首先,joblib確實是一個選項,同樣用裝有sklearn的python讀取是個選擇。

其次,如果是模型上線,很可能是python訓練模型之後,交給技術部門用java正式上線運行,這個時候joblib就不行了,此時最好用pmml,github上有sklearntopmml的模塊可以免費使用,強烈推薦。


進一步詢問:joblib.dump成pkl文件還是model文件??有什麼區別


請參考以下問題

sklearn的模型如何保存下來?

謝謝!


只要是sklearn裡面的統計學習方法或者演算法,都可以用他的統一介面來保存持久化模型pickle或者joblib


from sklearn.externals import joblib

joblib.dump(gnb, "filename.pkl")

clf = joblib.load("filename.pkl")


看文檔,官方文檔就有。sci中的joblib就可以保存在硬碟上


不是有個pickle嗎(它和cpickle的差別我也不是特別清楚),但是據說存類實例是有點問題的。scikit-learn里還提供了一個叫joblib的模塊,雖然我也還不是很清楚。


推薦閱讀:

TAG:Python | 數據挖掘 | 機器學習 | numpy | sklearn |