Построение модели машинного обучения — это только первый шаг, во многих случаях вам потребуется получить доступ к построенным моделям позже, чтобы ускорить процесс обучения, или размеры данных для каждой модели разные. В этом обзоре я представляю различные подходы в Python, чтобы сохранить вашу обученную модель и загрузить их позже в ваш алгоритм.
Обратите внимание, что этот обзор является общим руководством, и вы можете использовать его для любой построенной модели из различных библиотек, таких как Sklearn, TensorFlow и т. д.
В этом руководстве я начинаю с простых подходов, таких как словари и списки, а затем объясняю самые сложные.
Вы можете найти некоторые похожие примеры в моих работах на моем GitHub, а если у вас есть какие-либо вопросы, вы можете задать их мне, создав вопрос на моем GitHub или в обсуждении.
Этот учебник разделен на четыре части следующим образом;
- Словарь
- Список
- соленый огурец
- NumPy-массив
Я рассказываю о преимуществах и недостатках каждой стратегии и привожу фрагмент кода и пример для каждой части.
Словарь
Первая стратегия — создание словаря на питоне для разных обученных моделей. Окончательной обученной моделью будет объект dtype, поэтому вы можете добавить его в отдельный ключ в своем словаре.
models = {} k = 5 for i in range(k): model_ = model.fit(X, y) models[i] = model_
Здесь у вас будет словарь, включающий разные модели в качестве ключа словаря. Чтобы вызвать конкретную модель, вы вызываете элемент словаря, который ищете.
models[1].predict(X)
Между списком и словарем я предпочитаю словарь, потому что вы можете иметь список с порядком и вызывать модель с нужным вам порядком.
Список
Другой простой подход — составить список в Python. Вы можете добавить свой список для каждой недавно обученной модели, которая является объектом Python.
list_ = [] list_.append(model_)
Одна большая проблема с этим подходом заключается в том, что он сортирует список по порядку ввода моделей, поэтому вы не можете вызвать конкретную модель позже или найти конкретную модель, которую искали.
соленый огурец
Pickle — известный модуль Python для сериализации двоичных объектов. Следовательно, они могут быть хорошим методом сброса обученных моделей. Я предлагаю использовать этот метод, когда у вас есть тот же компьютер, когда вы собираетесь загружать обученные модели. Я предлагаю использовать этот метод, когда у вас есть тот же компьютер, когда вы собираетесь загружать обученные модели.
Когда вы обучаете свою модель ML, с помощью метода дампа из рассола вы можете сохранить свой объект по пути в вашем каталоге.
Обязательно используйте клавишу «wb» для записи в виде двоичного файла.
pickle.dump(model, open(model_name, "wb"))
позже вы можете загрузить свою модель с помощью метода загрузки.
model = pickle.load(open(model_name, "rb"))
После дампа моделей у вас будет каталог, содержащий модели ML. Чтобы иметь ясный и чистый алгоритм, вы можете определить параметр управления для очистки моделей дампа после их использования.
Например;
import os def _clear(): for root, _, models in os.walk(path): for model in models: os.remove(os.path.join(root, model))
NumPy-массив
И последнее, но не менее важное — наш друг массив NumPy. Вы можете воспользоваться преимуществами массива NumPy, чтобы сохранить обученные модели в матричной форме. Для этого вам нужно сначала определить пустой массив. Обязательно укажите dtype в матрице, которая является объектом.
import numpy as np n=10 models = np.empty((n, 1), dtype=object) for i in range(n): model_ = model() model_.fit(X, y) models[i, 0] = model
Здесь мы сохранили подобранную модель в массиве. Вы можете изменить размер или создать массив с большим количеством измерений. Это зависит от вашей работы.
Заключение
В этом посте мы узнали о четырех различных способах сохранения обученных моделей машинного обучения, и они являются общими подходами, что означает, что вы можете использовать любую библиотеку для построения модели и ее хранения. с одним из этих подходов.
Я предлагаю проверить ваши версии Python и библиотеки, когда вы хотите сбросить свою модель в двоичные объекты.
Если вы заинтересованы в изучении более сложных методов, вы можете подписаться на меня на GitHub и просмотреть некоторые из моих кодов.