Загрузка обученных моделей

Я часто сталкиваюсь с задачей сохранения обученных моделей машинного обучения для последующего использования без необходимости повторного обучения. Библиотека scikit-learn предоставляет удобные инструменты для сериализации и загрузки моделей.

Загрузка обученных моделей
Краткое содержание

Допустим, у меня есть обученная модель случайного леса (Random Forest) для задачи классификации. Я могу легко сохранить ее в файл, используя функцию joblib.dump():

from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
import joblib

# Генерация синтетических данных
X, y = make_classification(n_samples=1000, n_features=10, n_classes=2, random_state=42)

# Разделение данных на обучающую и тестовую выборки
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Создание и обучение модели случайного леса
rf = RandomForestClassifier(n_estimators=100, random_state=42)
rf.fit(X_train, y_train)

# Сохранение модели в файл
joblib.dump(rf, 'random_forest.joblib')

Здесь я использую функцию make_classification() для генерации синтетических данных, разделяю их на обучающую и тестовую выборки с помощью train_test_split(), создаю и обучаю модель случайного леса. Затем с помощью joblib.dump() сохраняю обученную модель в файл 'random_forest.joblib'. Теперь, когда мне нужно использовать эту модель в будущем, я могу легко загрузить ее из файла с помощью функции joblib.load():

# Загрузка модели из файла
loaded_rf = joblib.load('random_forest.joblib')

# Использование загруженной модели для предсказания на новых данных
y_pred = loaded_rf.predict(X_test)

# Оценка качества модели
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.2f}")

Здесь я загружаю ранее сохраненную модель из файла 'random_forest.joblib' с помощью joblib.load(), затем использую ее для предсказания на тестовых данных X_test и оцениваю качество с помощью метрики accuracy_score. Этот подход работает не только для моделей случайного леса, но и для большинства других моделей scikit-learn, таких как логистическая регрессия, SVM, дерево решений и т.д. Например, если у меня есть обученная модель логистической регрессии, я могу сохранить и загрузить ее аналогичным образом:

from sklearn.linear_model import LogisticRegression

# Создание и обучение модели логистической регрессии
lr = LogisticRegression(random_state=42)
lr.fit(X_train, y_train)

# Сохранение модели в файл
joblib.dump(lr, 'logistic_regression.joblib')

# Загрузка модели из файла
loaded_lr = joblib.load('logistic_regression.joblib')

Помимо joblib, scikit-learn также поддерживает сериализацию моделей с помощью встроенного модуля pickle. Однако joblib является предпочтительным вариантом, так как он обеспечивает более эффективное сжатие и может обрабатывать большие объекты данных. Важно отметить, что при загрузке модели нужно убедиться, что версия scikit-learn, используемая для загрузки, совпадает с версией, используемой для сохранения модели. В противном случае могут возникнуть проблемы совместимости.

Какие библиотеки помогают в загрузке моделей?

Вот некоторые популярные библиотеки Python, которые помогают в загрузке и сохранении обученных моделей машинного обучения:

joblib

joblib - это библиотека, которая предоставляет утилиты для конвейеризации Python-заданий. Она включает в себя инструменты для сохранения и загрузки моделей scikit-learn. Пример использования:

from sklearn.ensemble import RandomForestClassifier
import joblib

# Сохранение модели в файл
joblib.dump(rf, 'random_forest.joblib') 

# Загрузка модели из файла
loaded_rf = joblib.load('random_forest.joblib')

pickle

pickle - это встроенный модуль Python для сериализации и десериализации объектов Python. Его можно использовать для сохранения и загрузки моделей scikit-learn, хотя joblib обычно является предпочтительным вариантом.

TensorFlow

TensorFlow - популярная библиотека глубокого обучения, которая предоставляет функции для сохранения и загрузки обученных моделей. Пример:

model.save('my_model.h5')  # сохранение модели
loaded_model = tf.keras.models.load_model('my_model.h5')  # загрузка модели

PyTorch

PyTorch - еще одна широко используемая библиотека глубокого обучения. Она также позволяет легко сохранять и загружать обученные модели:

torch.save(model.state_dict(), 'model.pth') # сохранение модели
model.load_state_dict(torch.load('model.pth')) # загрузка модели

Помимо этих библиотек, существуют и другие инструменты, такие как ONNX для обмена моделями между фреймворками, и специализированные форматы для отдельных библиотек, например Keras. Выбор подходящей библиотеки зависит от используемого фреймворка машинного обучения и конкретных требований проекта. Но в целом, joblib и pickle являются хорошим выбором для моделей scikit-learn, а TensorFlow и PyTorch предоставляют удобные методы для работы с моделями глубокого обучения.

Надеюсь, эта статья помогла вам понять, как легко сохранять и загружать обученные модели в scikit-learn. Это очень полезный навык, который позволяет эффективно использовать модели машинного обучения в реальных приложениях.

Не стесняйтесь экспериментировать с различными моделями и наборами данных, и помните, что сохранение моделей - это ключ к воспроизводимости и масштабируемости ваших решений машинного обучения.

Nerd IT 🌀 ML, DS, ANN, GPT
Привет! Меня зовут Семён, я работаю в сфере ML и аналитики данных и пишу в блог nerdit.ru статьи о своем опыте и том, что может пригодиться начинающим в начале их пути изучения больших данных.

Подписаться на новости Nerd IT

Не пропустите последние выпуски. Зарегистрируйтесь сейчас, чтобы получить полный доступ к статьям.
jamie@example.com
Подписаться