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

Цель состоит в том, чтобы помочь вам понять основы построения и развертывания моделей машинного обучения. Он не будет охватывать такие концепции, как методы / передовые практики моделирования, безопасность / авторизация, но будет служить отправной точкой для тех, кто: (1) хочет создавать модели машинного обучения без кодирования или (2) хочет понять, что возможно с автоматизированным машинное обучение и его ценность для вас и вашей организации.

Для этого упражнения мы будем использовать платформу автоматизированного машинного обучения Microsoft Azure. Мы настраиваем среду / ресурсы, обучаем несколько моделей в наборе данных и развертываем эту модель в Azure, чтобы мы действительно могли ее использовать.

Эта статья состоит из трех разделов:
1. «Скучный материал» (настройка ресурсов в Azure)
2. «Интересный материал» (обучение модели)
3. «Я-могу-показать-моих-друзей-сейчас» (развертывание модели)

Итак, без лишних слов, давайте создадим кое-что интересное (например, Скучный материал)!

Настраивать

Предупреждение

Использование служб в Azure стоит денег. Есть способы получить бесплатные кредиты или пробные периоды (например, по этой ссылке.)

Весь эксперимент обошелся мне в 3,02 евро (без использования бесплатных кредитов):

В конце этой статьи мы расскажем, как очистить, чтобы избежать непредвиденных расходов.

Поехали!

Аккаунт

(зарегистрируйтесь здесь, если у вас еще нет учетной записи Azure и убедитесь, что у вас настроен способ оплаты, это должно быть частью процесса регистрации).

После регистрации вы должны увидеть домашнюю страницу Azure по умолчанию:

Создать группу ресурсов

Группа ресурсов - это «контейнер, в котором хранятся связанные ресурсы для решения Azure». Это поможет нам легко различать ресурсы, которые принадлежат нашей модели машинного обучения и развертыванию (, и поможет нам легко удалить их впоследствии).

На домашней странице Azure щелкните «Группы ресурсов» в левом меню и создайте новую группу ресурсов:

Для этого упражнения регионы не важны: выберите тот, в котором вы находитесь.

Создать рабочую область службы машинного обучения

Службы машинного обучения Azure - это набор ресурсов, которые помогут вам создавать, тестировать и развертывать модели машинного обучения. Автоматизированное машинное обучение является частью этой коллекции, и именно это мы здесь используем. Не забудьте выделить новый ресурс в созданную выше группу ресурсов «autoML».

Для этого упражнения регионы не так важны: выберите тот, в котором вы находитесь.

Загрузите набор данных.

В этой статье мы построим регрессионную модель, которая предсказывает правильную цену места AirBnB в Нью-Йорке. Данные поступают из Kaggle и доступны по этой ссылке.

Пока мы можем сохранить этот файл локально: в следующем разделе мы загрузим его в Azure.

Резюме

Мы создали учетную запись для Azure, настроили группу ресурсов для организации наших ресурсов, связанных с этим упражнением, и создали рабочую область службы машинного обучения Azure, которую мы видим на нашей домашней странице:

Поздравляю! Мы сделали скучные вещи! Давайте быстро перейдем к реальной работе, связанной с данными.

Обучение

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

Выберите недавно созданную подписку и ресурс машинного обучения Azure:

Загрузить набор данных
Загрузите распакованный набор данных «Output.csv», перейдя в «Наборы данных» (левое меню), затем нажмите «Создать набор данных».

Выберите файл на локальном компьютере. Все остальные настройки можно оставить без изменений. После нажатия кнопки «Готово» набор данных будет загружен:

Теперь наш набор данных будет отображаться на странице «Наборы данных»:

Создать и запустить эксперимент

В меню перейдите к «Автоматизированное машинное обучение» и нажмите синюю кнопку «Создать эксперимент»:

На следующем экране мы должны указать имя и обучающий компьютер. Вы можете задаться вопросом, что означает «обучающий компьютер». Модели, которые мы хотим обучить, нуждаются в компьютере для работы. Azure предоставляет виртуальные компьютеры, которые расположены в крупных центрах обработки данных по всему миру. Это позволяет нам в основном раскручивать компьютер любого размера, когда это необходимо, и снова останавливать его, когда это будет сделано, используя только то, что нам нужно.

В этом упражнении мы собираемся развернуть небольшой вычислительный ресурс (виртуальную машину). Щелкните «создать новое вычисление» и присвойте ему имя, например autoML. Мы будем использовать по умолчанию STANDARD_DS12_V2 - - 4 виртуальных ЦП, 28 ГБ памяти, 56 ГБ хранилища (оставьте дополнительные настройки как есть):

Когда мы выбрали имя эксперимента (я выбрал -surprise! - «autoML») и новое вычисление создано, обязательно выберите обучающее вычисление, которое мы только что создали, и нажмите «Далее».

Затем мы выбираем набор данных, который мы ранее загрузили, и нас попросят ввести еще пару частей. Теперь для нашего варианта использования цель состоит в том, чтобы спрогнозировать цену (целевой столбец) на основе другой информации в наборе данных.

Мы можем проверить вкладку профиля, чтобы немного изучить данные, но для краткости мы перейдем сразу к выбору столбцов для включения, задачи прогнозирования и целевого столбца:

Сначала мы исключаем столбцы, которые нам не нужны / не нужны в нашей модели. Вы можете изучить / включить другие столбцы в будущем, но, чтобы следовать этому руководству: выберите те же столбцы, что и я. Мы включаем следующие столбцы: Neighbourhood_group, District, room_type, price (target column ), minimum_nights, number_of_reviews, last_review, reviews_per_month.

Мы прогнозируем количество (цену за ночь), поэтому наша задача прогнозирования - регрессия и целевой столбец - это цена.

Мы могли бы поиграть с расширенными настройками, и вы, вероятно, сделаете это для будущих экспериментов, но пока мы оставляем большую часть как есть. Это означает, что мы выбираем «Корреляцию Спирмена» в качестве основного показателя для измерения и сравнения моделей. Давайте установим время учебного задания на 30 минут.

Прокрутите вниз, нажмите "Пуск" и поздравьте себя! Теперь вы специалист по данным! *

Теперь Azure задействует нужные ресурсы. После этого начинается собственно «автоматизированная» часть машинного обучения: Azure пытается подобрать различные модели и настройки, чтобы найти наиболее подходящие для наших данных и типа упражнения (регрессия). Скоро мы начнем видеть разные модели и их показатели точности. Кроме того, нам не нужно оставаться на какой-либо конкретной странице во время выполнения; так что не стесняйтесь просматривать интерфейс Azure ML.

Имейте в виду, что Azure потребуется некоторое время, чтобы развернуть ресурсы и получить результаты первых моделей, поэтому весь процесс займет больше, чем 30 минут, которые мы выбрали в качестве времени обучения.

* но не рассказывайте своим друзьям и коллегам по анализу данных, потому что они, вероятно, не согласятся.

Доска почета

Во время и после запуска эксперимента мы можем увидеть результаты каждого запуска, перейдя в таблицу лидеров:

Нажав на любую из завершенных итераций, мы можем увидеть более обширный набор показателей и графиков результатов:

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

Развертывание

Прохладный! У нас есть таблица лидеров и выигрышная модель. Что теперь? Мы пока не можем ничего похвастаться: мы хотим предоставить нашей модели входные столбцы (например, район, количество отзывов и среднее количество отзывов в месяц), а затем получить оценку цены за ночь. Переходим к части этого руководства «Я-могу-показать-своим-друзьям» !

Чтобы получить ориентировочную цену за ночь, нам нужно «развернуть» модель. Это станет «контейнером», который сможет запускать код нашей модели (победившая модель) в указанной среде (python) и обрабатывать входящие запросы. Службы машинного обучения Azure имеют довольно потрясающую функциональность, включенную в службы автоматизированного машинного обучения, которые делают всю работу за нас при развертывании: «Развертывание лучшей модели». Он находится на странице лидеров, на которую мы ранее смотрели, чтобы увидеть, как работают разные модели.

Используйте любое название и описание развертывания, которое хотите, и оставьте для сценария оценки и сценария среды значение «Автоматическая генерация». Нажмите «Развернуть», это займет около 20 минут.

Когда наша модель будет развернута, она появится на странице «Модель». Модель включает конечную точку . Конечная точка API обычно определяется как «конец канала связи». Само по себе это определение нам (совсем) не помогает, но подумайте об этом так: у нас есть модель, и мы хотим взаимодействовать с этой моделью, отправляя input (столбцы, которые мы включили в наша модель) и получая взамен выход (оценка цены за ночь). Мы не можем просто бросить что-либо в нашу модель / конечную точку и ожидать правильного ответа, поэтому теперь нужно найти нашу конечную точку и отправить HTTP-запрос нашей модели!

Когда мы развернули модель, службы машинного обучения Azure создали скрипт Python, который был развернут в «контейнере». Этот контейнер работает где-то в облаке Azure и теперь готов получать от нас HTTP-запросы.

Чтобы это сработало, нам нужно сделать три вещи:

Определите URI оценки конечной точки

Конечная точка доступна в интерфейсе машинного обучения Azure, выбрав «Конечные точки» в левом меню.

Мы нажимаем на нашу недавно развернутую модель и видим список атрибутов, из которых релевантным является «URI оценки».

Помните, как мы говорили о конечных точках API? Этот URI оценки является нашей конечной точкой для созданной нами модели, то есть мы можем отправить («выполнить запрос») что-то в эту конечную точку (вход) и получить ответ (выход). И если мы правильно отформатируем запрос, мы получим обратно то, что хотим: оценку цены за ночь с учетом наших входных столбцов.

Создать HTTP-запрос

Эта часть может немного сбить с толку тех, кто не имеет опыта работы с HTTP-запросами, но просто продолжайте следовать инструкциям, и все заработает!

Функционально мы хотим отправить http-запрос, в котором мы вводим значения для столбцов, которые мы включили в модель (, кроме целевого столбца, который, конечно же, является одним столбцом, который мы хотим вернуть). Это означает, что мы хотим отправить информацию о:

«группа_средства», «район», «тип_ комнаты», «минимум_ночей», «число_обзоров», «последний_просмотр», «отзывы_за_месяц».

Эта информация называется телом нашего HTTP-запроса, и Azure описывает в своей документации, как мы должны отформатировать эту информацию, чтобы она могла быть интерпретирована моделью:

REST API ожидает, что тело запроса будет документом JSON со следующей структурой:

{
    "data":
        [
            <model-specific-data-structure>
        ]
}

где (пример) наша «структура данных для конкретной модели» выглядит так:

{
    "data": [
        {
            "neighbourhood_group": "Queens",
            "neighbourhood": "Ridgewood",
            "room_type": "Entire home/apt",
            "minimum_nights": 3,
            "number_of_reviews": 9,
            "last_review": "2019-06-26T00:00:00.000Z",
            "reviews_per_month": 2.1
        }
    ]
}

HTTP-запрос также включает в себя один или несколько заголовков, и, согласно документации, нам нужно добавить заголовок Content-Type:

“Content-Type” : “application/json”

Подводя итог, на основе: (1) конечной точки / URI оценки, (2) тела (ввод) и (3) заголовков, мы можем создать запрос, который вернет нам (если все работает правильно) ориентировочную цену за ночь! Давайте проверим!

Для любопытных (я полагаю, это все вы, кто дошел до этого): вот полный запрос:

POST /score HTTP/1.1
Host: <scoring-uri>
Content-Type: application/json
User-Agent: PostmanRuntime/7.17.1
Accept: */*
Cache-Control: no-cache
Postman-Token: <token-value>
Host: <scoring-uri>
Accept-Encoding: gzip, deflate
Content-Length: 335
Connection: keep-alive
cache-control: no-cache
{
    "data": [
        {
            "neighbourhood_group": "Queens",
            "neighbourhood": "Ridgewood",
            "room_type": "Entire home/apt",
            "minimum_nights": 3,
            "number_of_reviews": 9,
            "last_review": "2019-06-26T00:00:00.000Z",
            "reviews_per_month": 2.1
        }
    ]
}

Там есть некоторая информация, которую мы не охватили; не беспокойтесь об этом, поскольку это не важно для понимания нашего непрерывного рабочего процесса. Переходим к последней части!

Отправьте HTTP-запрос

На данный момент у вас есть развернутая модель, которую можно «вызвать» с помощью конечной точки API (URI оценки). Любой человек (буквально любой, поскольку мы не применяли никакой авторизации в API) может использовать вашу красивую модель в своих приложениях, записных книжках или других (бизнес) приложениях, используя конечную точку API. Когда я отправляю запрос двумя абзацами вверх, получаю следующий результат:

"{\"result\": [125.5851758821278]}"

Потрясающие! Таким образом, это говорит нам, что с учетом входных данных модели (Queens, Ridgewood, Весь дом / квартира, 3 ночи, 9 отзывов, последний отзыв 26 июня 2019 г. и в среднем 2,1 отзыва в месяц), по оценкам, цена за ночь будет 125,58 долл. США

Легко и просто! Очевидно, вы хотите увидеть это, чтобы поверить в это, поэтому приступим:

Скачайте бесплатное приложение для разработки API Почтальон. Мы будем использовать его для отправки нашего HTTP-запроса нашей модели. После установки. Мы повторим три шага: установка URL-адреса (URI оценки), добавление заголовка Content-Type и добавление тела:

Откройте Почтальон и выберите «Запрос» на вкладке «Создать»:

Укажите имя, создайте коллекцию / папку и нажмите «Сохранить»:

Вы увидите новый экран, на котором мы можем создавать запросы API.

Установите для параметра «http method» значение POST и скопируйте URI оценки, в который помещается заполнитель «введите URL-адрес запроса»:

Когда мы переходим на вкладку «Body» в почтальоне, мы выполняем два действия:
1. Установите тип тела на «raw» и тип на JSON
2. Скопируйте столбец запроса и значения из ранее показанных запрос в поле body:

{
    "data": [
        {
            "neighbourhood_group": "Queens",
            "neighbourhood": "Ridgewood",
            "room_type": "Entire home/apt",
            "minimum_nights": 3,
            "number_of_reviews": 9,
            "last_review": "2019-06-26T00:00:00.000Z",
            "reviews_per_month": 2.1
        }
    ]
}

Заголовок, о котором мы говорили ранее («Content-Type»), автоматически добавляется почтальоном, потому что мы установили тип необработанного тела на «JSON». Вы можете увидеть это на вкладке заголовка.

Это означает, что мы рассмотрели все части запроса! Пора нажать на эту большую синюю кнопку отправки и выполнить наш первый запрос!

Вы сделали это! Поставьте себе пятерку, поставьте свой любимый джем (рекомендую DMX - Party Up (Up In Here) по этому случаю) и отправьте еще пару просьб в свой адрес. собственная развернутая автоматизированная модель машинного обучения!

Когда будете готовы, убедитесь, что удалили группу ресурсов, чтобы избежать непредвиденных расходов в Azure:

Соображения и мысли

Как вы, возможно, заметили, пройдя это руководство, существует довольно много работы, которая не обязательно связана с наукой о данных, когда дело доходит до того, чтобы сделать науку о данных работающей. Я твердо верю, что экспериментируют для любого работника, работающего с данными. У нас есть замечательный набор поставщиков облачных сервисов и (с открытым исходным кодом) фреймворков, чтобы быстро и легко начать тестирование новых идей. Самое главное - начать!

Когда использовать автоматизированное машинное обучение

Похоже, продолжаются дискуссии об автоматизированном машинном обучении, в которых люди примерно разделились на следующие: "Это не наука о данных!" и «Нам больше не нужны специалисты по данным!». Истина, наверное, где-то посередине, но требует определенных нюансов.

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

Я думаю, что знание и возможное применение автоматизированного машинного обучения поможет организациям использовать новые технологии, которые могут оказаться ценными, особенно когда:

  1. У вас нет команды по науке о данных или вы хотите использовать скудные ресурсы по науке о данных, автоматизируя «более простые» задачи по науке о данных.
  2. Вы хотите пройти весь процесс от начала до конца для быстрой разработки сценариев использования аналитики. Мы должны выделить время на все части процесса, а не только на моделирование, чтобы гарантировать, что мы получим не только точное, но и работающее ( рабочее) решение.
  3. Вы хотите создать «базовую модель». Автоматизированная модель машинного обучения не обязательно должна быть последней.

Надеюсь, это был полезный урок для вас, чтобы начать работу с автоматическим машинным обучением! Оставляйте свои мысли / предложения в ответах!

(Не стесняйтесь обращаться и в LinkedIn).

Рекомендуемое дальнейшее чтение:

Различные автоматизированные решения машинного обучения - https://medium.com/@santiagof/auto-is-the-new-black-google-automl-microsoft-automated-ml-autokeras-and-auto- sklearn-80d1d3c3005c

Методология Data Science - https://medium.com/towards-artificial-intelligence/the-data-science-methodology-50d60175a06a