Сохранение и загрузка классификатора в scikit-learn
Быстрый ответ
Для сохранения классификатора scikit-learn предпочтение отдаётся joblib
:
Чтобы сохранить классификатор clf
в файл 'model.joblib'
для последующего использования:
from joblib import dump
dump(clf, 'model.joblib', compress=9) # Применяем наивысший уровень сжатия для увеличения эффективности.
Когда возникнет необходимость использовать классификатор в дальнейшем:
from joblib import load
clf = load('model.joblib') # Загружаем модель, она готова к использованию.
С joblib даже обширные массивы numpy сжимаются на уровне 9
.
Работа с комбинацией классификатора и векторизатора
Иногда требуется сохранить не только классификатор, но и весь пайплайн, в который может входить векторизатор, например, TfIdfVectorizer. Процесс следующий:
Для сохранения:
dump(vectorizer, 'vectorizer.joblib')
dump(clf, 'classifier.joblib') # Направляем clf на заслуженный отдых.
Для загрузки:
vectorizer = load('vectorizer.joblib') # Векторизатор проснулся и готов к работе.
clf = load('classifier.joblib') # Классификатор готов начать новый день.
Сохранение обеих компонент пайплайна в формате '.joblib
' гарантирует возможность трансформации данных и выполнения прогнозов по мере необходимости.
Советы для повышения эффективности модели
Pickle
подходит для большинства задач, однако joblib более предпочтителен для объектов с обширными массивами numpy, что связано со спецификой сериализации.
Перед сохранением не забывайте оптимизировать модель. Обучите классификатор, применив clf.fit()
. Для сокращения объема хранилища удаляйте stop_words_
у векторизаторов.
Визуализация
Можно представить joblib как магический палочку, упаковывающую ваш классификатор для отдыха в файл с расширением '.joblib
':
🍾 🚢💤 **Классификатор** отдыхает в 'joblib'
Волшебное заклинание для отправления классификатора на отдых:
import joblib
joblib.dump(clf, 'classifier_in_a_bottle.joblib', compress=9) # Желаем спокойных снов!
И вот ваш классификатор уже снова с вами:
🏡🌺🚁 Классификатор проснулся полон сил и готов к новым задачам!
Волшебное заклинание для его пробуждения:
clf = joblib.load('classifier_in_a_bottle.joblib') # Пора просыпаться!
Классификатор как будто только что проснулся и готов делать точные прогнозы!
Спарсное хранение и версионирование классификаторов
Применяйте спарсивные матрицы. Для моделей типа SGDClassifier с большими весовыми матрицами переводите их в спарсивный формат.
Учитывайте версию scikit-learn
. Ведь версионные различия могут повлиять на совместимость моделей, и лучше избежать столкновения с такой проблемой.
Управление продвинутыми функциями
Будьте бдительны с ансамблевыми методами. При использовании, например, RandomForest убедитесь, что сохранение состояния корректно выполнено при помощи метода __getstate__()
, если он доступен.
Хорошо бы также сохранить:
- Метаданные, например, имена классов, характеристики обучающих данных.
- Фиксируйте результаты кросс-валидации или параметры для отслеживания контекста модели.
Экономное использование дискового пространства
Когда место на диске оказывается на вес золота, параметр compress=9
в функции dump
уменьшит занимаемый объем. Хотя это может занять больше времени, но зато сэкономит место на диске.
Полезные материалы
- Сохранение моделей в scikit-learn — Комплексное руководство по сохранению моделей scikit-learn.
- Сохранение данных с joblib — Все, что вы хотели узнать о joblib.
- Rpy2 – Обработка датафреймов — Обсуждение механизмов сохранения моделей на StackOverflow.
- Статья на Medium о моделях Scikit Learn — Аналитическая статья о scikit-learn на Medium.
- pickle — Сериализация объектов в Python — Осваиваем сериализацию с помощью pickle.
- Сохранение и загрузка моделей машинного обучения — Практическое руководство для работы с моделями.
- Модели Scikit Learn на YouTube — Видеоуроки о сохранении и загрузке моделей.