sklearn
Estimatorは、Estimatorの関連するトレーニング済みプロパティを簡単に保存できるようにするメソッドを実装します。一部の推定器は__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で記述されたモジュール(など)に依存するEnsemble推定器に特に当てはまりますIsolationForest
。これは、実装への結合を作成し、sklearnのバージョン間での安定性が保証されないためです。過去に後方互換性のない変更が見られました。
モデルが非常に大きくなり、読み込みが煩わしい場合は、より効率的なを使用することもできますjoblib
。ドキュメントから:
scikitの特定のケースでは、joblibのpickle
(joblib.dump
&joblib.load
)の置換を使用する方が興味深い場合があります。これは、フィットしたscikit-learn推定量の場合によくあるように、内部に大きなnumpy配列を運ぶオブジェクトでより効率的ですが、ピクルスしかできません。文字列ではなくディスクに: