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

Недавно я наткнулся на инструмент Microsoft Azure под названием Microsoft Azure Machine Learning Studio, который представляет собой графический веб-интерфейс для выполнения операций машинного обучения с использованием визуального рабочего процесса без необходимость написания любого кода.

Я всегда был программистом, а R был моим профессиональным партнером еще со времен университета, поэтому я всегда мало доверял графическому программному обеспечению. Когда я открыл для себя ML Studio и выполнил за несколько часов то, что могло занять несколько дней программирования в R, я определенно добавил ML Studio в свой Data Science Toolbox.

В этой статье я расскажу о практическом примере создания модели машинного обучения в ML Studio с использованием знаменитого набора данных Iris, адаптированного для задачи двоичной классификации.

Я предприму следующие шаги:

  • Импорт данных
  • Базовый анализ данных
  • Разделение тренировок / тестов
  • Нормализация данных
  • Выбор модели с перекрестной проверкой
  • Обучение лучшей модели
  • Оценка по набору данных удержания
  • Оценка производительности

Бесплатная подписка

В тот день, когда я пишу эту статью, Azure ML Studio поставляется с бесплатной подпиской и множеством платных подписок, основанных на использовании API или дискового пространства. Бесплатная подписка включает 10 ГБ дискового пространства, и этого достаточно для образовательных целей или небольших экспериментов. Кстати, «Эксперимент» - это название, которое студия ML использует для обозначения визуального рабочего процесса. Это не единственное, что мы можем делать с помощью этого программного обеспечения, поскольку оно также поставляется с хорошо известными ноутбуками Jupyter. Однако в этой статье я остановлюсь только на визуальной части студии ML, то есть экспериментах.

Чтобы создать бесплатную подписку, вы можете посетить URL-адрес https://azure.microsoft.com/en-us/services/machine-learning-studio/, нажать кнопку Начать сейчас, а затем выбрать План Свободное рабочее место. Если у вас уже есть учетная запись Microsoft (например, если вы когда-либо использовали Skype), вы можете прикрепить к этой учетной записи подписку ML Studio; в противном случае вам нужно будет его создать.

Первый подход

После завершения процедуры подписки первое окно, которое вы увидите при запуске ML Studio, будет следующим:

На левой боковой панели мы можем найти множество полезных функций ML studio, но в этой статье я расскажу только о экспериментах.

Нажав кнопку «Эксперименты», а затем кнопку «Создать», мы можем создать «Пустой эксперимент» или загрузить предварительно определенный из галереи.

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

Левый столбец содержит все элементы управления, которые можно перетаскивать в центральной части. Правая боковая панель связана с параметрами и опциями узлов.

Теперь мы можем начать с интересного.

Импорт данных

Студия машинного обучения может обрабатывать данные, поступающие из разных источников. Можно загрузить набор данных из плоского файла или прочитать его из базы данных SQL Azure, URL-адреса или даже большого двоичного объекта в учетной записи хранения Azure. Единственное, что вы должны иметь в виду, это то, что ML studio поддерживает только ограниченное количество форматов, включая CSV и TSV (значения, разделенные табуляцией). Что касается разделителя, у вас есть только несколько фиксированных параметров, среди которых вы можете выбрать, поэтому будьте осторожны при создании набора данных; Во-первых, убедитесь, что вы используете формат, который распознает ML Studio.

В этом простом примере я буду использовать знаменитый набор данных Iris. ML Studio содержит множество примеров наборов данных, включая модифицированную версию набора данных Iris, подходящую для задачи двоичной классификации.

Если вы перейдете в «Сохраненные наборы данных», а затем в «Образцы», вы найдете все доступные наборы примеров.

Найдите «Iris two class data» и перетащите его в центральную часть экрана.

Круг с цифрой 1 в нижней части узла - это порт вывода. В ML Studio каждый узел может иметь несколько портов ввода и вывода, обозначенных кружками и номерами. Входные порты расположены на верхней стороне узла и определяют входные данные, которые узел должен манипулировать. Порты вывода расположены внизу и используются для распределения вывода узла в качестве ввода другим узлам. Подключение узлов через их порты заставляет нас разработать полный рабочий процесс.

У наборов данных нет порта ввода, потому что они не обрабатывают никакие данные (они только доставляют их).

Базовый анализ данных

Прежде чем каким-либо образом манипулировать этим набором данных, мы можем взглянуть на него. Щелкните узел правой кнопкой мыши и выберите «Набор данных», затем «Визуализировать».

Это окно, которое появляется:

Центральная часть содержит образец набора данных и несколько эскизов гистограмм каждого столбца, которые можно выбрать индивидуально.

Правая часть содержит некоторую базовую статистику по выбранному вами столбцу.

Если вы прокрутите вниз, вы увидите гистограмму выбранной переменной.

Полезной функцией является возможность сопоставить одну переменную с другой через раскрывающееся меню «Сравнить с».

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

Разделение тренировок / тестов

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

Мы можем использовать узел «Разделить данные» и подключить его вход к выходу набора данных.

Таким образом, мы говорим ML studio: «Используйте выходные данные узла набора данных радужной оболочки глаза в качестве входных данных для узла разделения».

В правой части вы можете увидеть параметры узла. Мы можем использовать коэффициент 0,7 для набора обучающих данных, а оставшиеся 0,3 - для набора тестов. Разделение выполняется случайным образом.

Два выходных порта разделенного узла - это, соответственно, обучающий набор данных (порт номер 1) и тестовый набор данных (порт номер 2).

Нормализация данных

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

Итак, нам нужно использовать узел «Нормализовать данные». На панели параметров мы можем выбрать MinMax (то есть диапазон 0–1).

Вход узла нормализации данных - это обучающий набор данных, поэтому мы подключаем его к первому выходному порту узла разделенных данных.

Узел нормализации данных имеет два выходных порта. Первый - это масштабированный набор входных данных, второй - позволяет использовать преобразование масштабирования в других наборах данных. Скоро пригодится.

Выбор модели с перекрестной проверкой

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

Для каждой из двух моделей мы выполним k-кратную перекрестную проверку, чтобы проверить их среднюю эффективность на невидимых данных, а затем выберем модель, которая имеет высочайшие показатели.

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

Мы можем выбрать узел «Логистическая регрессия двух классов» и перетащить его в рабочую область.

Затем мы можем выполнить поиск «перекрестно» и найти узел «Модель перекрестной проверки».

Мы можем соединить узлы, как показано на следующем рисунке:

В правой части мы должны выбрать целевую переменную:

Щелкните «Запустить средство выбора столбца» и выберите переменную «Класс», как показано на следующем рисунке.

Теперь мы можем запустить процесс перекрестной проверки, щелкнув правой кнопкой мыши узел «Cross Validate Model» и выбрав «Run selected».

После завершения процесса мы можем снова щелкнуть правой кнопкой мыши и выбрать «Результаты оценки по сгибу», затем «Визуализировать».

На следующем рисунке показан показатель эффективности оценки для каждого из 10 значений по умолчанию для перекрестной проверки. Мы проверим Площадь под кривой ROC (часто называемую AUC) в качестве показателя для сравнения различных моделей. Чем выше это значение, тем лучше модель.

Прокрутите вниз до строки «Среднее», которая содержит средние значения показателей эффективности, рассчитанных среди складок.

Среднее значение AUC логистической регрессии составляет 0,9. Будем иметь это в виду.

Теперь пришло время для нейронной сети, поэтому мы повторим процесс и поищем слово «нейронная» в поле поиска.

Нам нужен узел «Двухклассовая нейронная сеть», поэтому давайте перетащим его вместе с узлом перекрестной проверки, как показано на следующем рисунке.

Нейронные сети имеют много гиперпараметров, поэтому мы должны выбрать, по крайней мере, сколько нейронов мы хотим использовать в скрытом слое. В этом примере мы выберем 5 скрытых узлов.

Щелкните узел «Двухклассовая нейронная сеть» и измените «Количество скрытых узлов» на 5.

Мы можем повторить конфигурацию «модели перекрестной проверки» целевой переменной и запустить новый узел перекрестной проверки.

Средняя производительность нейронной сети следующая:

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

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

Обучение лучшей модели

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

Обучение модели на наборе данных можно выполнить с помощью узла «Обучить модель». Первый входной порт - это сама модель, а второй входной порт - это обучающий набор данных.

Щелкнув узел «Модель поезда», мы можем выбрать целевой столбец, который по-прежнему является переменной «Класс».

Щелкните правой кнопкой мыши обучающий узел и выберите «Выполнить», чтобы обучить нашу модель на обучающем наборе данных.

Оценка набора данных удержания

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

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

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

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

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

Оцените производительность

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

Чтобы оценить набор данных, мы можем найти узел «Модель оценки».

Затем мы можем добавить его в рабочий процесс таким образом.

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

После выполнения узла модели оценки мы можем посмотреть, что он делает.

Как видите, появилась новая пара столбцов под названием «Оценочные метки» и «Оцененные вероятности». Второй - это вероятность того, что целевая метка равна 1, а первая - это сама предсказанная цель, вычисляется как 1, если вероятность больше 50%, и 0 в противном случае.

Наконец, мы можем использовать узел «Оценить модель» для извлечения необходимых нам показателей производительности.

Мы можем подключить узел модели оценки к узлу оценки и запустить его.

Наконец, вот результаты.

Панель слева представляет собой кривую ROC, которая довольно удивительна.

Прокручивая вниз, мы можем найти все числа, которые ищем.

В верхней левой части находится матрица путаницы. Затем у нас есть стандартные показатели для модели двоичной классификации (точность, точность и т. Д.). Правый ползунок изменяет порог, который преобразует вероятность в метку 0–1. При изменении порога все метрики изменяются автоматически, за исключением AUC, которая не зависит от порога.

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

Заключение

В этой короткой статье я показал простой пример использования студии Azure ML. Это очень полезный инструмент в индустрии машинного обучения, и, хотя он имеет некоторые ограничения (ограниченное количество записей, ограниченный выбор моделей), я думаю, что этот простой инструмент понравится даже самому ориентированному на код специалисту по данным. Стоит отметить, что, заплатив соответствующую плату, ML studio может использоваться для обучения и прогнозирования в реальном времени благодаря мощному интерфейсу REST API. Это позволяет использовать множество возможных сценариев машинного обучения.