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 и его зависимостей
Оценка перекрестной проверки, полученная по данным обучения
Это особенно верно для оценщиков Ensemble, которые полагаются на tree.pyx
модуль, написанный на Cython (например, IsolationForest
), поскольку он создает связь с реализацией, которая не гарантируется стабильной между версиями sklearn. Он видел назад несовместимые изменения в прошлом.
Если ваши модели становятся очень большими и загрузка становится неприятной, вы также можете использовать более эффективные joblib
. Из документации:
В конкретном случае scikit может быть более интересно использовать joblib замену pickle
( joblib.dump
& joblib.load
), которая более эффективна для объектов, которые несут большие массивы внутри, как это часто бывает для встроенных оценок scikit-learn, но может только мариновать на диск, а не на строку: