sklearn
estymatory wdrażają metody ułatwiające zapisywanie odpowiednich przeszkolonych właściwości estymatora. Niektóre estymatory implementują __getstate__
same metody, ale inne, jak na przykład GMM
użycie podstawowej implementacji, która po prostu zapisuje wewnętrzny słownik obiektów:
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
Zalecaną metodą zapisania modelu na dysku jest użycie pickle
modułu:
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)
Powinieneś jednak zapisać dodatkowe dane, abyś mógł ponownie przeszkolić swój model w przyszłości lub ponieść straszne konsekwencje (takie jak zamknięcie się w starej wersji sklearn) .
Z dokumentacji :
Aby odbudować podobny model w przyszłych wersjach scikit-learn, dodatkowe metadane powinny zostać zapisane wzdłuż marynowanego modelu:
Dane treningowe, np. Odniesienie do niezmiennej migawki
Kod źródłowy Pythona użyty do wygenerowania modelu
Wersje scikit-learn i jego zależności
Wynik weryfikacji krzyżowej uzyskany na podstawie danych treningowych
Jest to szczególnie prawdziwe w przypadku estymatorówtree.pyx
zestawów, które opierają się na module napisanym w Cython (np. IsolationForest
), Ponieważ tworzy ono sprzężenie z implementacją, co nie gwarantuje stabilności między wersjami sklearn. W przeszłości widział niezgodne wstecz wstecz zmiany.
Jeśli twoje modele stają się bardzo duże, a ładowanie staje się uciążliwe, możesz również użyć bardziej wydajnych joblib
. Z dokumentacji:
W konkretnym przypadku scikit może być bardziej interesujące użycie zamiennika pickle
( joblib.dump
& joblib.load
) Joblib , który jest bardziej wydajny w przypadku obiektów, które niosą duże tablice numpy wewnętrznie, jak to często bywa w przypadku dopasowanych estymatorów uczenia się, ale może tylko zalewać na dysk, a nie na ciąg: