Создание комплексного решения машинного обучения менее чем за час

Мотивация

В предыдущей статье Прогнозирование медицинских расходов с помощью AzureML и линейной регрессии SkLearn я создал регрессионную модель. Конечно, было большое количество строк кода. AzureML предлагает интерфейс перетаскивания под названием AzureML Designer. Опыт и ощущения аналогичны RapidMiner.

Сценарий

Используя общий Titanic Dataset, создайте классификационную модель, чтобы предсказать, выжил ли пассажир во время аварии на Титанике в 1912 году. Возможно, анализ можно использовать для проверки безопасности.

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

Конвейер конструктора Azure

Соответствующие активы найдены здесь.

Создать актив данных

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

default_ds = ws.get_default_datastore()

if 'titanic dataset' not in ws.datasets:
    Dataset.File.upload_directory(src_dir='data',
                              target=DataPath(default_ds, 'titanic-data/')
                              )

    #Create a tabular dataset from the path on the datastore (this may take a short while)
    tab_data_set = Dataset.Tabular.from_delimited_files(path=(default_ds, 'titanic-data/titanic.csv'))

    # Register the tabular dataset
    try:
        tab_data_set = tab_data_set.register(workspace=ws, 
                                name='titanic dataset',
                                description='titanic data',
                                tags = {'format':'CSV'},
                                create_new_version=True)
        print('Dataset registered.')
    except Exception as ex:
        print(ex)
else:
    print('Dataset already registered.')

Актив данных можно найти в колонке «Данные» AzureML.

Настройка вычислений для конвейера

Вычисления необходимы конвейеру для обработки необходимых шагов для обработки данных и обучения.

from azureml.core.compute import ComputeTarget, AmlCompute
from azureml.core.compute_target import ComputeTargetException

cluster_name = "sweetdreams"

try:
    # Check for existing compute target
    pipeline_cluster = ComputeTarget(workspace=ws, name=cluster_name)
    print('Found existing cluster, use it.')
except ComputeTargetException:
    # If it doesn't already exist, create it
    try:
        compute_config = AmlCompute.provisioning_configuration(vm_size='STANDARD_DS11_V2', max_nodes=2)
        pipeline_cluster = ComputeTarget.create(ws, cluster_name, compute_config)
        pipeline_cluster.wait_for_completion(show_output=True)
    except Exception as ex:
        print(ex)

Теперь мы готовы построить наш конвейер.

Доступ к конструктору

Выберите блейд «Дизайнер» в пользовательском интерфейсе AzureML и выберите «Создать новый конвейер с использованием классических компонентов предварительной сборки».

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

Создайте и запустите конвейер обучения

Ниже приведен очень простой конвейер для сквозной модели классификации.

Подробное описание шагов:

Примечание. Параметры компонента можно найти в моих изображениях на Github

  1. Titanic dataset
     – извлекает хранилище данных, содержащее наши необработанные данные. Хранилище данных
  2. Выбрать столбцы в наборе данных
    . Из базового набора данных выберите интересующие столбцы, такие как функции (наши предикторы) и столбец с метками (то, что мы пытаемся предсказать).
  3. Очистить отсутствующие данные
     – выполнить импутацию отсутствующих данных или выбрать полное удаление строки из конвейера.
  4. Нормализация данных
     – Выполните нормализацию, такую ​​как стандартизация MinMax, для непрерывных переменных (например, возраст и стоимость проезда)
     – этот шаг не является обязательным для алгоритмов дерева решений, но включен, например< br /> — обычно используется для алгоритмов на основе расстояния или моделей глубокого обучения для обеспечения точности и производительности.
  5. Разделить данные
     — разделить данные на обучающий и тестовый наборы.
     — можно определить случайное начальное число и долю тестового набора. Пример. (.2 или 20% данных удерживаются для тестирования
    — отсюда узлы начинают расходиться, где обучающий набор будет подключен к «Модели обучения», а тестовые данные будут отправлены в «Модель оценки».
  6. Усиленное дерево решений с двумя классами
    — выбранный алгоритм для выполнения машинного обучения.
    - Здесь можно ввести гиперпараметры.
    - В этом примере нет настройки гиперпараметров.
  7. Обучение модели
    — на основе выбранного алгоритма и обучающих данных выполните обучение модели, когда оно достигает своего целевого порога или количество итераций было выполнено
    — модель с ее обученными весами будет храниться как артефакт в AzureML.
  8. Оценочная модель
    . Из обученной модели запустите прогнозы, используя обучающий и тестовый наборы.
  9. Оценить модель
     – сравните результаты на основе выбранного показателя оценки, такого как AUC, точность, полнота или точность.

Отправить конвейер

Мониторинг конвейера

В колонке «Задания» AzureML вы можете отслеживать ход конвейера и получать более подробную информацию.

Создайте и запустите конвейер вывода

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

Чтобы конвейер работал, вам потребуется удалить компоненты, такие как "Оценить модель", "Выбрать столбцы в наборе данных" и компоненты первого преобразования, поскольку они не имеют отношения к выводам и вызовут ошибку. . Вам также понадобится несколько компонентов, чтобы сделать вывод.

Выполнение скрипта Python содержит следующий код для обработки возвращаемого прогноза.

# The script MUST contain a function named azureml_main
# which is the entry point for this module.

# imports up here can be used to
import pandas as pd

# The entry point function MUST have two input arguments.
# If the input port is not connected, the corresponding
# dataframe argument will be None.
#   Param<dataframe1>: a pandas.DataFrame
#   Param<dataframe2>: a pandas.DataFrame
def azureml_main(dataframe1 = None, dataframe2 = None):

    scored_results = dataframe1[['Scored Labels', 'Scored Probabilities']]
                            
    scored_results.rename(columns={'Scored Labels':'Survived Prediction',

    'Scored Probabilities':'Survived Probability'},               
                
    inplace=True)               
                
    return scored_results

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

После завершения конвейера представление будет выглядеть примерно так.

Создайте конечную точку

Когда нас устроит конвейер вывода, мы выбираем «Развернуть», и AzureML начнет подготавливать конечную точку.

Делайте выводы

После того, как конечная точка будет успешно создана, вы можете запускать выводы! Дата ввода из «Теста» была предоставлена ​​нами компонентом «Ввести данные вручную» конвейера вывода.

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

Резюме/выводы/заключение

  1. Быстрая проверка концепции
    . Хотя AzureML предлагает AutoML для получения необработанных данных и автоматического запуска подготовки данных и алгоритмов, вы, возможно, уже знаете свой подход или компания уже определилась с моделью и алгоритмом.< br /> — вы можете использовать AzureML Designer, чтобы быстро проверить концепцию, прежде чем тратить часы на разработку в блокноте.
  2. Использование журналов
     — этапы конвейера предлагают выходные данные и журналы, в которых можно просматривать журналы и предварительный просмотр данных. Я нашел это невероятно полезным, чтобы увидеть, работает ли конвейер, как ожидалось, или есть ли журналы ошибок, что позволяет найти основную причину. Это подробное представление помогает в устранении неполадок, а не в сканировании всей записной книжки или скрипта Python!
  3. Необходимо, чтобы Microsoft внедрила возможность экспорта для конструктора AzureML
    . В настоящее время конвейеры можно сохранять в рабочих областях, а URL-адреса можно использовать совместно. Но нет возможности экспортировать конфигурацию конвейера или даже PDF. Если Microsoft сможет упаковать конвейеры в облегченную форму, такую ​​как JSON или XML, тогда конвейеры могут быть более удобными для работы между организациями и рабочими пространствами Azure.
  4. Выводы рынка
     –
    на основе бесед с специалистами по обработке и анализу данных в полевых условиях, рабочие нагрузки машинного обучения становятся все более операциональными, а приложения на рынке более доступны для нетехнических специалистов. Существует больше предложений для машинного обучения на основе графического интерфейса, или приложение пишет код для вас на основе заданных параметров. Я не ожидаю, что специалисты по данным останутся без работы, потому что они должны выполнять рабочую нагрузку, интерпретировать модель и рекомендовать решения заинтересованным сторонам.

Ссылки/Ресурсы/Благодарности

Связанные статьи от меня