2013-07-07 16 views
33

私はscikit-learnに基づいてnolearnからDBN(深い信念ネットワーク)を使用しています。Python scikit-learn:訓練されたクラシファイアをエクスポートする

私は既にデータを非常によく分類できるネットワークを構築していますが、今はモデルをエクスポートすることに興味がありますが、私は何かを予測するたびにDBNをトレーニングしています。私はちょうど重量行列をエクスポートし、別のマシンにインポートするmatlabで。

誰かが、モデル全体を再度訓練する必要なく、インポートするモデル/重量マトリックスをエクスポートする方法を知っていますか?

を使用でき
+2

[pickle](http://docs.python.org/2/library/pickle.html)モジュールで単純にモデルをシリアル化しようとしましたか? – ffriend

+0

@ffriend - いいえ、でも試してみるつもりです。どうも! – jcdmb

答えて

54

>>> 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') 

これは基本的に大規模なnumpyのアレイのための最適化されたハンドリングとPythonの漬物です。それは通常の漬物w.r.tと同じ制限があります。コードの変更:pickleオブジェクトのクラス構造が変更された場合、新しいバージョンのnolearnまたはscikit-learnでオブジェクトをunpickleできなくなる可能性があります。

モデルパラメータを長期保存したい場合は、独自のIOレイヤーを作成する必要があるかもしれません(例えば、プロトコルバッファーやavroや非効率な移植性のあるtext/json/xml表現例えばPMML)。

+1

'joblib.dump(clf、 'my_model.pkl'、compress = 9)で' RuntimeError:maximum recursion depth exceeded'を取得しました。 –

+1

https://github.com/dnouri/nolearn/issues/271 –

2

scikit-learnドキュメントのセクション3.4. Model persistenceには、ほとんどすべてが含まれています。指さsklearn.externals.joblib ogriselに加えて

は、それが通常の漬物パッケージを使用する方法を示しています。

>>> 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-学ぶ別にロードされない場合がありますのいずれかのバージョンで保存されたモデルなど、いくつかの警告を与えますバージョン。

7

pickling/unpicklingは、pythonのバージョン(メジャーバージョンと場合によってはマイナーバージョン)とsklearn、joblibライブラリバージョンとのみ一致するという欠点があります。

Data Mining Groupによって開発された予測モデルマークアップ言語(PMML)やポータブル形式の解析(PFA)などの、機械学習モデルの代替の記述出力形式があります。このうち、PMMLはmuch better supportedです。

scikit-learnからPMMLにモデルを保存して(たとえばsklearn2pmmlを使用して)モデルを保存し、jpmmlを使用してjava、spark、またはhiveで展開して実行するオプションがあります。

+0

よく見えますが、配備がPythonベースの場合はどうなりますか? 'pmml2sklearn'はありますか? – VillasV