Мне нравятся пакеты машинного обучения, которые может предложить Python. Однако это еще не все. Мое время в аспирантуре и в промышленности научило меня, что обучение оценке алгоритма машинного обучения — это только часть битвы.

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

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

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

Прочитав документацию от разработчика, содержащую веса логистической регрессии без каких-либо меток (фактически делая ее бесполезной), я решил, что с меня хватит. Я бы написал свою собственную оболочку с открытым исходным кодом для этих библиотек машинного обучения, которая делала бы это автоматически. Я так и сделал и назвал его deploy-ml.

В этом руководстве я познакомлю вас с основами использования deploy-ml для обучения базового алгоритма логистической регрессии SK-Learn с использованием deploy-ml, чтобы позаботиться о ненужных вещах.

Прежде всего, вы устанавливаете deploy-ml

pip install deployml

Затем мы импортируем материал, необходимый для обучения алгоритма логистической регрессии. Нам нужны панды, так как фрейм данных необходим для подачи данных deploy-ml:

from deployml.sklearn import LogisticRegressionBase
import pandas as pd

training_data = pd.read_csv("training_data.csv")

Затем мы определяем объект логистической регрессии и делаем атрибут данных, данные, которые мы только что загрузили. Есть аргументы, которые можно передать в LogisticRegressionBase, они описаны в документации. В этом примере данные были очищены. Вам придется очистить свои собственные данные самостоятельно, прежде чем прикреплять их к атрибуту данных, поскольку очистка данных и категоризация уникальны для каждого проекта/проблемы:

log = LogisticRegressionBase()
log.data = training_data

Для этого примера данных столбец, который мы пытаемся предсказать, называется «присутствовал», поскольку мы пытаемся предсказать, не придет ли кто-то на встречу. Затем мы обучаем алгоритм и отображаем кривую обучения:

log.outcome_pointer = 'attended'
log.plot_learning_curve(scale=True, batch_size=100)
log.show_learning_curve()

Метод plot_learning_curve фактически обучает алгоритм. Он разделяет тестовый поезд и масштабирует данные, если для масштаба установлено значение True. Существует целый ряд масштабаторов на выбор. Если он не определен, используется стандартный скейлер. Масштабатор подгоняет обучающие данные, затем преобразует их, а затем преобразует данные тестирования. Существует аргумент повышения дискретизации, который будет повышать дискретизацию после того, как тестовый поезд разделится только на обучающие данные, чтобы избежать просачивания точек данных с повышением дискретизации в тестовые данные, что, в свою очередь, дает искусственно высокие оценки точности. Я видел, как умные люди, одержимые сексуальными понятиями, стреляли себе в ногу, совершая эти две ошибки, только чтобы понять это позже, когда их алгоритм работал полгода. Остальные параметры обучения описаны здесь.

Теперь мы обучили нашу модель логистической регрессии, нам нужно ее оценить. Это можно сделать с помощью метода Assessment_outcome:

log.evaluate_outcome()

При этом используется функция отчета о классификации SK-Learn, возвращающая точность, полноту и оценку F-1 для тестовых данных. Также можно отобразить кривую ROC:

log.show_roc_curve()

Все эти функции показа имеют параметр сохранения, когда установлено значение True, график сохраняется там, где запускается файл. Теперь, если мы довольны результатами, мы можем развернуть алгоритм следующим методом:

log.deploy_model(description="example model for documentation",
                    author="Maxwell Flitton",
                    organisation="Example Organisation",
                    contact="[email protected]",
                    file_name="example_model.sav")

Что это делает, так это собирает словарь, который имеет диапазон ключей с именем, определенным в параметре file_name. Клавиша модель даст вам модель. Если используется скейлер, он также будет в этом словаре. Название столбцов и порядок, в котором они должны быть введены, также находятся под названием ключа порядок ввода. Версии системы, дата обучения, целевой параметр, который прогнозируется, и показатели тестирования (отзыв, точность, F-1) также участвуют. Подробнее о сохраненном файле — здесь. Теперь у вас есть обученная модель, которую вы можете отправить по электронной почте, закинуть на сервер или сохранить на жестком диске и забыть о ней. Кто бы ни планировал его использовать, у него есть вся документация для этого в выбранном файле! Больше не нужно задаваться вопросом, что было сделано, или осмелиться не трогать что-то, потому что разработчик, который изначально это настроил, ушел.

Теперь у вас есть сохраненная модель, давайте загрузим ее:

import pickle

loaded_model = pickle.load(open("example_model.sav", "rb"))

Помните, мы использовали масштабатор, поэтому давайте получим новые данные и масштабируем их:

input_data = loaded_model['scaler'].transform([[24, 500, 0, 0, 400,
                                             500, 10, 1, 12, 1, 0]])

Помните, если вы не можете вспомнить порядок, в котором ваши данные должны быть переданы, просто напечатайте порядок параметров, используя следующее:

print(loaded_model['input order'])

Теперь данные масштабированы, давайте посчитаем вероятность того, что этот человек не придет на прием:

loaded_model['model'].predict_proba(input_data)[0][1]

И вот оно! Тренировка со всеми мирскими задачами, автоматически выполняемыми за вас. Deploy-ml поддерживает нейронные сети, вспомогательные векторные машины и случайные леса. Однако, если вы хотите определить свой алгоритм SK-learn самостоятельно, используйте функцию импорта, описанную здесь. В настоящее время я работаю над поддержкой Keras. Будем надеяться, что в ближайшие пару месяцев это будет запущено. Нам уже удалось обойти некоторые моменты и сделать возможным травление моделей Keras.