sklearn
estimator menerapkan metode untuk memudahkan Anda menyimpan properti terlatih yang relevan dari estimator. Beberapa estimator mengimplementasikan __getstate__
metode sendiri, tetapi yang lain, seperti GMM
hanya menggunakan implementasi basis yang hanya menyimpan objek kamus batin:
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
Metode yang disarankan untuk menyimpan model Anda ke disk adalah dengan menggunakan pickle
modul:
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)
Namun, Anda harus menyimpan data tambahan sehingga Anda dapat melatih kembali model Anda di masa depan, atau menderita konsekuensi yang mengerikan (seperti dikunci ke dalam versi lama sklearn) .
Dari dokumentasi :
Untuk membangun kembali model yang sama dengan versi scikit-learn di masa depan, metadata tambahan harus disimpan di sepanjang model acar:
Data pelatihan, misalnya referensi ke foto yang tidak dapat diubah
Kode sumber python digunakan untuk menghasilkan model
Versi scikit-learn dan dependensinya
Skor validasi silang diperoleh pada data pelatihan
Hal ini terutama berlaku untuk penaksir Ensemble yang bergantung pada tree.pyx
modul yang ditulis dalam Cython (seperti IsolationForest
), karena ia membuat sambungan ke implementasi, yang tidak dijamin stabil di antara versi sklearn. Telah melihat perubahan yang tidak kompatibel di masa lalu.
Jika model Anda menjadi sangat besar dan memuat menjadi gangguan, Anda juga dapat menggunakan yang lebih efisien joblib
. Dari dokumentasi:
Dalam kasus khusus scikit, mungkin lebih menarik untuk menggunakan penggantian joblib pickle
( joblib.dump
& joblib.load
), yang lebih efisien pada objek yang membawa array numpy besar secara internal seperti yang sering terjadi pada penduga scikit-learn yang dipasang, tetapi hanya dapat mengasup ke disk dan bukan ke string: