ПОЛНОЕ РУКОВОДСТВО
Как сохранить и загрузить свои модели Scikit-learn за минуту
Вы когда-нибудь создавали модели машинного обучения и задавались вопросом, как их сохранить? Что ж, через минуту я покажу вам, как сохранить ваши модели Scikit learn в виде файла.
Сохранение данных называется сериализацией, где мы сохраняем объект в виде потока байтов для сохранения на диске. Загрузка или восстановление модели называется десериализацией, при которой мы восстанавливаем поток байтов с диска обратно в объект Python.
Причины, по которым вам следует сохранить модель?
- Если вам нужно воссоздать обученную модель.
- Поделитесь моделью с другими. Мы можем сохранить модель в файл и поделиться им с другими, которые можно загрузить для составления прогнозов.
- Когда нужно использовать модель в производственных целях. Чтобы избежать длительного обучения, мы обучили модель на огромном наборе данных и получили хорошо работающую прогнозную модель.
Инструменты для сохранения и восстановления моделей в 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.
Раздел рассмотрения
- Самым большим недостатком инструментов Pickle и Joblib является их совместимость с разными моделями и версиями Python.
- Внутренняя структура модели должна оставаться неизменной между сохранением и восстановлением модели.
- Восстанавливайте модели при получении из известного источника, чтобы избежать вредоносного кода. И Pickle, и Joblib могут содержать вредоносный код, поэтому не рекомендуется восстанавливать данные из ненадежных или не прошедших проверку подлинности источников.
Заключение
Поздравляю! Теперь вы готовы начать сборку и распаковку файлов с помощью Python. Вы сможете сохранить свои модели машинного обучения и продолжить работу над ними позже. Библиотеки Pickle и Joblib быстры и просты в использовании, но имеют проблемы совместимости между разными версиями Python и изменениями в модели обучения.
Новичок в науке о данных? , Требуется наставничество?
Вы можете связаться здесь
- Twitter: @akinwhande
- Linkedin: акинванде