sklearn
推定器は、推定器の関連するトレーニング済みプロパティを簡単に保存できるようにするメソッドを実装します。一部のエスティメータは__getstate__
メソッド自体を実装しますが、オブジェクトの内部ディクショナリを保存するだけGMM
の基本実装を使用するようなものもあります。
def __getstate__(self):
try:
state = super(BaseEstimator, self).__getstate__()
except AttributeError:
state = self.__dict__.copy()
if type(self).__module__.startswith('sklearn.'):
return dict(state.items(), _sklearn_version=__version__)
else:
return state
モデルをディスクに保存するための推奨される方法は、pickle
モジュールを使用することです。
from sklearn import datasets
from sklearn.svm import SVC
iris = datasets.load_iris()
X = iris.data[:100, :2]
y = iris.target[:100]
model = SVC()
model.fit(X,y)
import pickle
with open('mymodel','wb') as f:
pickle.dump(model,f)
ただし、追加のデータを保存して、将来モデルを再トレーニングしたり、悲惨な結果(古いバージョンのsklearnにロックされているなど)に対応したりできるようにする必要があります。
ドキュメントから:
scikit-learnの将来のバージョンで同様のモデルを再構築するには、ピクルドモデルに沿って追加のメタデータを保存する必要があります。
トレーニングデータ、たとえば不変のスナップショットへの参照
モデルの生成に使用されたpythonソースコード
scikit-learnのバージョンとその依存関係
トレーニングデータで取得した相互検証スコア
これはtree.pyx
、Cythonで記述されたモジュール(などIsolationForest
)に依存するEnsemble推定器に特に当てはまります。これは、sklearnのバージョン間での安定性が保証されない実装への結合を作成するためです。過去に互換性のない変更がありました。
モデルが非常に大きくなり、ロードが煩わしい場合は、より効率的なを使用することもできますjoblib
。ドキュメントから:
scikitの特定のケースでは、joblibのpickle
(joblib.dump
&joblib.load
)の置換を使用する方が興味深い場合があります。これは、フィッティングされたscikit-learn推定器の場合によくあるように、内部で大きなnumpy配列を運ぶオブジェクトでより効率的ですが、ピクルのみが可能です。文字列ではなくディスクに: