http://scikit-learn.org/0.18/modules/model_persistence.html を google翻訳した
scikit-learn 0.18 ユーザーガイド 3. モデルの選択と評価 より
3.4. モデルの永続化
scikit-learn モデルを訓練した後、再学習することなく将来の使用のためにモデルを持続させる方法が望ましい。次のセクションでは、pickleでモデルを永続化する方法の例を示します。また、pickleシリアル化の作業時に、セキュリティと保守性に関するいくつかの問題を確認します。
3.4.1. 永続性の例
Pythonの組み込み永続化モジュール、つまり pickle を使って、scikitモデルを保存することは可能です:
>>> 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
scikitの特定のケースでは、joblib の pickle置き換え( joblib.dump
& joblib.load
)を使用する方が面白いかもしれません。これは、 scikit-learn 評価機オブジェクト(多くの場合、大規模なnumpy配列を内部的に持つ)に対してより効率的です。ただし、dumps
メソッドはないため、ディスクにのみ保存できます。
>>> from sklearn.externals import joblib
>>> joblib.dump(clf, 'filename.pkl')
後でpickleされたモデルを(おそらく別のPythonプロセスで)ロードすることができます:
>>> clf = joblib.load('filename.pkl')
注意: joblib.dump関数とjoblib.load関数は、ファイル名の代わりにファイルのようなオブジェクトも受け入れます。 Joblibでのデータ永続化の詳細は、 こちら を参照してください。
3.4.2. セキュリティと保守性の制限
pickle(および joblib 拡張)は、保守性とセキュリティに関していくつかの問題があります。このため、
- ロード時に悪意のあるコードが実行される可能性があるため、信頼できないデータを解読しないでください。
- scikit-learnのとあるバージョンを使用して保存されたモデルは、他のバージョンの scikit-learn で読み込まれる可能性がありますが、これは完全にサポートされておらず、お勧めできません。また、そのようなデータに対して実行される操作は、異なる予期しない結果をもたらす可能性があることに留意する必要があります。
将来のバージョンのscikit-learnで同様のモデルを再構築するには、pickledモデルに沿って追加のメタデータを保存する必要があります。
- トレーニングデータの不変のスナップショットへの参照
- モデルを生成するために使用されるpythonソースコード
- scikit-learnとその依存関係のバージョン
- トレーニングデータで得られたクロスバリデーションスコア
これにより、クロスバリデーションスコアが以前と同じ範囲にあることを確認することが可能になります。
これらの問題についてもっと知りたい場合や他の可能なシリアライズ方法を調べたい場合は、 Alex Gaynorのこの話 を参照してください。
scikit-learn 0.18 ユーザーガイド 3. モデルの選択と評価 より
©2010 - 2016、scikit-learn developers(BSDライセンス)。