ПОЛНОЕ РУКОВОДСТВО

Как сохранить и загрузить свои модели Scikit-learn за минуту

Вы когда-нибудь создавали модели машинного обучения и задавались вопросом, как их сохранить? Что ж, через минуту я покажу вам, как сохранить ваши модели Scikit learn в виде файла.

Сохранение данных называется сериализацией, где мы сохраняем объект в виде потока байтов для сохранения на диске. Загрузка или восстановление модели называется десериализацией, при которой мы восстанавливаем поток байтов с диска обратно в объект Python.

Причины, по которым вам следует сохранить модель?

  1. Если вам нужно воссоздать обученную модель.
  2. Поделитесь моделью с другими. Мы можем сохранить модель в файл и поделиться им с другими, которые можно загрузить для составления прогнозов.
  3. Когда нужно использовать модель в производственных целях. Чтобы избежать длительного обучения, мы обучили модель на огромном наборе данных и получили хорошо работающую прогнозную модель.

Инструменты для сохранения и восстановления моделей в Scikit-learn

Первый инструмент, который мы описываем, - это Pickle, стандартный инструмент Python для сериализации и десериализации объектов. Затем мы рассмотрим библиотеку Joblib, которая предлагает простую (де) сериализацию объектов, содержащих большие массивы данных, и, наконец, мы представляем ручной подход для сохранения и восстановления объектов в / из JSON (нотация объектов JavaScript). Ни один из этих подходов не представляет собой оптимального решения, но правильный выбор следует выбирать в соответствии с потребностями вашего проекта.

Инициализация модели

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

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

Используя метод fit, модель узнала свои коэффициенты, которые хранятся в model.coef_. Цель состоит в том, чтобы сохранить параметры и коэффициенты модели в файл, чтобы вам не нужно было повторять шаги обучения модели и оптимизации параметров для новых данных.

Наша Модель сейчас обучена. Мы можем сохранить модель, а затем загрузить ее, чтобы делать прогнозы на основе невидимых данных.

Сохраните модель с помощью Pickle

Pickle используется для сериализации и десериализации структур объектов Python, также называемых маршалингом или сглаживанием. Сериализация относится к процессу преобразования объекта в памяти в поток байтов, который может быть сохранен на диске или отправлен по сети. Позже этот символьный поток может быть извлечен и десериализован обратно в объект Python. Pickle очень полезен, когда вы работаете с алгоритмами машинного обучения, где вам нужно сохранить их, чтобы иметь возможность генерировать прогнозы в более позднее время, не переписывая все заново.

Сохраните модель с помощью Joblib

Joblib является частью экосистемы SciPy и предоставляет утилиты для конвейерной обработки заданий Python. Он предоставляет утилиты для сохранения и загрузки объектов Python, которые эффективно используют структуры данных NumPy. Это может быть полезно для некоторых алгоритмов машинного обучения, которые требуют большого количества параметров или хранят весь набор данных (например, K-Nearest Neighbours). В то время как Pickle требует передачи файлового объекта в качестве аргумента, Joblib работает как с файловыми объектами, так и с строковыми именами файлов. Если ваша модель содержит большие массивы данных, каждый массив будет храниться в отдельном файле, но процедура сохранения и восстановления останется прежней.

Сохраните модель в формате JSON

В зависимости от вашего проекта, Pickle и Joblib часто оказываются неподходящими решениями. Некоторые из этих причин обсуждаются позже в разделе «Замечания». Сначала мы импортируем библиотеку JSON, создадим словарь, содержащий коэффициенты и перехват. Коэффициенты и точка пересечения представляют собой объект массива. Мы не можем выгрузить массив в строки JSON, поэтому мы конвертируем массив в список и сохраняем его в словаре.

мы конвертируем словарь Python в строку JSON с помощью дампов JSON. нам нужен вывод с отступом, поэтому мы предоставляем параметр indent и устанавливаем его равным 4. Сохраните строку JSON в файл.

Загружаем содержимое файла в строку JSON. Откройте файл в режиме «чтения», а затем загрузите данные JSON в объект Python, который в нашем случае является словарем.

Поскольку сериализация данных с использованием JSON фактически сохраняет объект в строковом формате, а не в байтовом потоке, файл regressor_param.txt можно открывать и изменять с помощью текстового редактора. Хотя этот подход был бы удобен для разработчика, он менее безопасен, поскольку злоумышленник может просматривать и изменять содержимое файла JSON.

Раздел рассмотрения

  1. Самым большим недостатком инструментов Pickle и Joblib является их совместимость с разными моделями и версиями Python.
  2. Внутренняя структура модели должна оставаться неизменной между сохранением и восстановлением модели.
  3. Восстанавливайте модели при получении из известного источника, чтобы избежать вредоносного кода. И Pickle, и Joblib могут содержать вредоносный код, поэтому не рекомендуется восстанавливать данные из ненадежных или не прошедших проверку подлинности источников.

Заключение

Поздравляю! Теперь вы готовы начать сборку и распаковку файлов с помощью Python. Вы сможете сохранить свои модели машинного обучения и продолжить работу над ними позже. Библиотеки Pickle и Joblib быстры и просты в использовании, но имеют проблемы совместимости между разными версиями Python и изменениями в модели обучения.

Новичок в науке о данных? , Требуется наставничество?

Вы можете связаться здесь