В моем предыдущем уроке «Машинное обучение для разработчиков на Java» была представлена настройка алгоритма машинного обучения и разработка функции прогнозирования в Java. Я продемонстрировал внутреннюю работу алгоритма машинного обучения и прошел процесс разработки и обучения модели машинного обучения. Этот урок поднимает с того места, где он остановился. Я покажу вам, как настроить конвейер данных для машинного обучения, познакомлю вас с пошаговым процессом переноса вашей модели машинного обучения из разработки в производство и кратко расскажу о технологиях развертывания обученной модели машинного обучения в Java-основе. производственная среда.
Содержание статьи
Требования и что ожидать от этого урока
Развертывание модели машинного обучения — это отдельная попытка разработки модели, часто реализуемая другой командой. Разработка модели машинного обучения требует понимания базовых данных и хорошего понимания математики и статистики. Развертывание модели машинного обучения в производстве — это, как правило, работа для человека, имеющего опыт разработки программного обеспечения и эксплуатации.
В этом руководстве показано, как сделать модель машинного обучения доступной в масштабируемой производственной среде. Я предполагаю, что у вас есть некоторый опыт разработки и базовое понимание моделей и алгоритмов машинного обучения; в противном случае вы можете начать с чтения «Машинное обучение для Java-разработчиков, часть 1».
Я начну с краткого курса по обучению под наблюдением, включая пример приложения, которое я буду использовать для демонстрации того, как обучать, развертывать и обрабатывать модель машинного обучения для использования в производстве.
Контролируемое машинное обучение: повышение квалификации
Я буду использовать простую контролируемую модель машинного обучения, чтобы проиллюстрировать машинное обучение. процесс развертывания. Пример модели машинного обучения, показанный на рисунке 1, можно использовать для прогнозирования ожидаемой цены продажи дома.
Рисунок 1. Модель обученного контролируемого машинного обучения для прогнозирования продажной цены
Напомним, что модель машинного обучения — это функция с внутренними, обучаемыми параметрами, которые сопоставляют входы и выходы. На приведенной выше диаграмме функция линейной регрессии h θ (x) используется для прогнозирования продажной цены дома на основе различных характеристик. Переменные x функции представляют входные данные. Переменные θ (theta) представляют внутренние, доступные для изучения параметры модели.
Чтобы предсказать цену продажи дома, сначала необходимо создать массив входных данных x переменные. Этот массив содержит такие функции, как размер участка или количество комнат в доме. Этот массив называется вектором объектов .
Поскольку для большинства функций машинного обучения требуется числовое представление функций, вам, вероятно, придется выполнить некоторые преобразования данных, чтобы построить вектор объектов. Например, функция, указывающая местоположение гаража, может включать метки, такие как «прикрепленный к дому» или «встроенный», которые должны быть сопоставлены с числовыми значениями. Когда вы выполняете прогнозирование цены дома, функция машинного обучения будет применена с этим вектором входных признаков, а также с внутренними, обученными параметрами модели. Результатом функции является расчетная цена дома. Этот вывод называется меткой .
Обучение модели
Внутренние, обучаемые параметры модели (θ) являются частью модели, которую изучают из обучения данные. Изучаемые параметры будут установлены в процессе обучения. Модель контролируемого машинного обучения, подобная показанной ниже, должна быть обучена, чтобы делать полезные прогнозы.
Рисунок 2. Необученная контролируемая модель машинного обучения
Как правило, процесс обучения начинается с неподготовленной модели, в которой все изучаемые параметры устанавливаются с начальным значением, таким как ноль. Модель использует данные о различных характеристиках дома, а также реальные цены на жилье. Постепенно он определяет корреляции между характеристиками домов и ценами на жилье, а также весомость этих отношений. Модель настраивает свои внутренние, обучаемые параметры модели и использует их для прогнозирования.
Рис. 3. Модель обученного контролируемого машинного обучения
После учебного процесса модель сможет оценивать продажную цену дома, оценивая его характеристики.
Алгоритмы машинного обучения в коде Java
HousePriceModel предоставляет два метода. Один метод реализует алгоритм обучения для обучения (или соответствия ) модели. Другой метод используется для предсказаний.
Рисунок 4. Два метода в модели машинного обучения
Метод fit ()
Метод fit ()
используется для обучения модели. Он использует характеристики дома, а также цены продажи дома в качестве входных параметров, но ничего не возвращает. Метод fit ()
требует правильного «ответа», чтобы иметь возможность регулировать свои внутренние параметры модели. Используя списки жилья в сочетании с продажными ценами, алгоритм обучения ищет шаблоны в данных обучения. Исходя из этого, он создает параметры модели, которые обобщаются из этих шаблонов. По мере того, как входные данные становятся более точными, внутренние параметры модели будут корректироваться.
Листинг 1. Метод fit () используется для обучения модели машинного обучения
// загрузить данные тренировки
// ...
// например [{MSSubClass=60.0, LotFrontage=65.0, ...}, {MSSubClass=20.0, ...}]
Список <Карта > домов = ...;
// например [208500.0, 181500.0, 223500.0, 140000.0, 250000.0, ...]
Список цены = ...;
// создаем и обучаем модель
var model = new HousePriceModel ();
model.fit (дома, цены);
Обратите внимание, что элементы дома дважды напечатаны в коде. Это связано с тем, что алгоритм машинного обучения, используемый для реализации метода fit ()
требует ввода чисел. Все элементы дома должны быть представлены численно, чтобы их можно было использовать в качестве параметров x в формуле линейной регрессии, как показано здесь:
h θ (x) = θ 0 * x 0 + ... + θ n * x n
Прогноз цен на обученные дома Модель может выглядеть так, как показано ниже:
цена = -490130,8527 * 1 + -241,0244 * MSSubClass + -143,716 * LotFrontage +… *…
Здесь функции входных данных, такие как MSSubClas
или LotFrontage
представлены как переменные x . Параметры обучаемой модели (θ) задаются значениями, такими как -490130.8527 или -241.0244, которые были получены в процессе обучения.
В этом примере используется простой алгоритм машинного обучения, для которого требуется всего несколько параметров модели. Более сложный алгоритм, такой как для глубокой нейронной сети, может потребовать миллионов параметров модели; это одна из главных причин, почему процесс обучения таких алгоритмов требует высокой вычислительной мощности.
Метод Foret ()
После того, как вы закончили обучение модели, вы можете использовать Предсказание ()
метод определения предполагаемой цены продажи дома. Этот метод использует данные об особенностях дома и производит расчетную цену продажи. На практике агент риэлторской компании может вводить такие характеристики, как размер партии (площадь участка), количество комнат или общее качество дома, чтобы получить ориентировочную цену продажи для данного дома.
Преобразование нечисловых значений
Вы часто сталкиваетесь с наборами данных, которые содержат нечисловые значения. Например, набор данных Ames Housing, используемый для конкурса цен на дома Kaggle, включает как числовые, так и текстовые списки характеристик домов:
Рисунок 5. Образец из набора данных по ценам на жилье в Kaggle
Для усложнения набора данных Kaggle также есть пустые значения (помеченные NA), которые не могут быть обработаны алгоритмом линейной регрессии, показанным в листинге 1.
Реальный мир записи данных часто являются неполными, непоследовательными, не имеют желаемого поведения или тенденций и могут содержать ошибки. Обычно это происходит в тех случаях, когда входные данные были объединены с использованием разных источников. Перед вводом в модель входные данные должны быть преобразованы в чистый набор данных.
В приведенном выше примере вам необходимо заменить отсутствующее (NA) числовое значение LotFrontage
. Вам также необходимо заменить текстовые значения, такие как MSZoning
«RL» или «RM», на числовые значения. Эти преобразования необходимы для преобразования необработанных данных в синтаксически правильный формат, который может быть обработан вашей моделью.
После того, как вы преобразовали свои данные в общедоступный формат, вам все равно может потребоваться внести дополнительные изменения в улучшить качество входных данных. Например, вы можете удалить значения, не соответствующие общей тенденции данных, или поместить редко встречающиеся категории в одну общую категорию.
Как построить конвейер данных машинного обучения
Зачастую этапы подготовки или предварительной обработки данных организованы в виде конвейера. Например, приведенный ниже конвейер упрощенного прогнозирования дома упорядочивает набор компонентов предварительной обработки преобразователя с помощью окончательной модели прогнозирования дома.
Рисунок 6. Пример шагов предварительной обработки данных
Компоненты преобразователя очищают необработанные данные и преобразуют их в формат, который модель может использовать. Данные становятся более подходящими для модели после каждого этапа преобразования.
Шаблон конвейера позволяет вам организовать код преобразования так, чтобы каждый компонент преобразователя нес единую ответственность. Например, приведенный ниже класс CategoryToNumberTransformer
заменяет все значения текстовых объектов числовыми. Поскольку эта реализация преобразователя не обрабатывает нулевые значения, преобразователь должен быть обработан после применения AddMissingValuesTransformer
. Внутренне, CategoryToNumberTransformer
содержит карту, использующую значения текстовых объектов в качестве ключа, и уникальные сгенерированные числа в качестве значений. Отображение функции MSZoning
может выглядеть следующим образом:
{FV = 1, RH = 2, RM = 3, C = 5,…, RL = 8, «по умолчанию» = - 1}
Когда вы вызываете transform ()
текстовые значения будут обнаружены и преобразованы в числа с использованием набора сопоставлений, как показано в листинге 2.
Листинг 2. Замените значения текстовых объектов числовыми
Открытый класс CategoryToNumberTransformer реализует Transformer
Существует два способа создания внутренней карты категории к номеру. Чтобы сделать это вручную, вы должны добавить все возможные записи на карту во время разработки. Чтобы сделать это динамически, как показано выше, вы должны сканировать все доступные записи во время обучения. В этом примере метод обучения fit ()
динамически создает карту категории к номеру. Сначала он извлекает набор всех текстовых значений, а затем использует набор значений для построения карты, которая включает в себя вновь созданные числа, связанные с уникальными текстовыми значениями.
Конфигурирование конвейера данных машинного обучения
В большинстве случаев логика предварительной обработки специфична для модели, поэтому обновление логики компонентов предварительной обработки требует повторного обучения модели. По этой причине код предварительной обработки и код модели часто упаковываются вместе, как показано ниже. Здесь общий класс Pipeline
используется для организации преобразователей вместе с окончательной моделью прогнозирования дома.
Листинг 3. Общий класс Pipeline
var pipe = Pipeline.add (новые DropNumericOutliners ("LotArea", 10))
.add (новый AddMissingValuesTransformer ())
.add (новый CategoryToNumberTransformer ())
.add (new AddComputedFeatureTransformer ())
.add (новый DropUnneededFeatureTransformer ("YrSold", "YearRemodAdd"))
.add (new HousePriceModel ());
pipe.fit (дома, цены);
//…
Некоторые библиотеки машинного обучения предоставляют конвейерные абстракции, подобные примеру выше. Другие предоставляют только настраиваемые и настраиваемые компоненты предварительной обработки.