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

В этом посте мы рассмотрим два разных этапа построения прогностической модели с использованием Jupyter лаборатории Notebook и платформы Microsoft Azure. Основная цель поста — понять шаги по построению модели и то, как мы можем достичь этого, используя две платформы.

Примечание. Я никоим образом не связан ни с одной из вышеперечисленных платформ.

Начнем!

Как правило, существует несколько шагов для построения модели, как описано ниже:

  1. Сбор данных. В основном это анализ, понимание проблемы и выбор подходящего набора данных.
  2. Подготовка данных. Этот этап включает в себя очистку данных, маркировку данных, визуализацию данных, нормализацию данных и разделение данных.
  3. Выбор модели. По сути, это влечет за собой процесс выбора правильного алгоритма для решения проблемы. Это может быть сделано на основе предыдущих исследований производительности алгоритма на аналогичных задачах.
  4. Обучение. Как правило, этот этап включает в себя процесс обучения модели на выбранном наборе данных для улучшения итогового прогнозируемого результата.
  5. Оценка. Модель необходимо оценить на необученных данных, шаг включает в себя показ модели невидимым данным. Это служит лучшим индикатором того, как модель будет работать в реальном сценарии.
  6. Настройка параметров. После того, как мы оценили модель, нам необходимо повысить ее производительность путем точной настройки определенных параметров. Этот шаг аналогичен настройке радиочастоты, чтобы получить более четкий сигнал для конкретного радиоканала, который вы слушаете.
  7. Прогнозирование. Это последний этап, на котором созданная модель используется для прогнозирования/решения проблемы.

В этом посте мы предпримем шаги, чтобы понять, как использовать «обычный» Jupyter Notebook и платформу MS Azure.

Выбранный для поста набор данных — классический набор данных Iris, однако в этом случае мы будем использовать набор данных Iris Two Class, найденный в MS Azure. Набор данных. Последний имеет два класса, 100 строк и 4 функции.

Сбор данных/загрузка набора данных

Платформа Microsoft Azure

Чтобы получить набор данных Iris Two Class, нажмите «Сохраненные наборы данных» в Microsoft Azure Machine Learning Studio и выберите «Образцы», затем прокрутите вниз, чтобы получить набор данных, как показано ниже (набор данных — последний элемент на втором изображении). Выберите и перетащите его в рабочее пространство:

Теперь мы можем визуализировать детали набора данных, такие как количество классов в наборе данных в MS Azure, с помощью:

  1. Щелкните правой кнопкой мыши набор данных.
  2. Выберите набор данных
  3. Выберите Визуализировать

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

Давайте рассмотрим, как того же можно добиться с помощью Jupyter Notebook.

Блокнот Jupyter

Тот же процесс можно выполнить в Jupyter Notebook, загрузив файл набора данных Excel (CSV), как показано ниже (CSV-файл должен находиться в том же каталоге, что и Jupyter Notebook):

Затем мы также можем просмотреть описание набора данных с помощью некоторых встроенных функций Pandas Dataframe, которые предоставят описание набора данных.

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

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

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

Подготовка данных

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

Платформа Microsoft Azure

Чтобы добавить шаг нормализации в свой эксперимент, необходимо:

  1. В левом углу рабочей области студии MS Azure щелкните раскрывающийся список Преобразование данных
  2. Нажмите раскрывающееся меню "Масштабировать и уменьшить".
  3. Выберите «Нормализация данных» и перетащите его в рабочую область.

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

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

Можно выбрать метод нормализации по своему выбору из ZScore / MinMax / Logistic / LogNormal / Tanh. Мы будем использовать метод преобразования MinMax для этого поста.

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

Чтобы нормализовать набор данных, вы можете нажать «Выполнить». Легкий?

Значения набора данных после нормализации MinMax:

Разделить данные

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

  1. Нажмите раскрывающееся меню "Преобразование данных"
  2. В списке вариантов нажмите раскрывающееся меню Sample and Split
  3. Нажмите «Разделить данные» и перетащите их в рабочую область.

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

Чтобы выбрать способ разделения данных, щелкните модуль «Разделить данные» в рабочей области, и в правом окне появятся различные параметры:

У одного есть разные параметры при разделении данных, для режима разделения вы можете выбрать:

  1. Разделить строки: используйте эту опцию, если вы просто хотите разделить данные на две части. Вы можете указать процент данных для каждого разделения. По умолчанию данные делятся 50/50.
  2. Разделение регулярного выражения: выберите этот параметр, если хотите разделить набор данных, проверив значение в одном столбце.
  3. Относительное разделение выражения: используйте этот параметр, когда хотите применить условие к числовому столбцу. Число может быть полем даты/времени, столбцом, содержащим возраст или суммы в долларах, или даже процентом.

Это соответствует документации MS Azure, которую можно найти здесь: https://docs.microsoft.com/en-us/azure/machine-learning/algorithm-module-reference/split-data

В этом случае данные были разделены по строкам, и было выбрано от 70% до 30% для обучающих и тестовых данных соответственно.

Блокнот Jupyter

Нормализация набора данных может быть выполнена с использованием встроенных функций масштабирования sklearn. В этом случае мы покажем, как преобразовать через MinMax и ZScore (называемый Standard Scaler в sklearn) соответственно.

Сначала мы загружаем данные для обработки в виде массива NumPy, затем подгоняем данные к созданному объекту MinMaxScaler (масштабатор) и, наконец, возвращаем данные в виде массива NumPy (new_data). Распечатываем значения MinMaxScaler для сравнения с MS Azure, значения совпадают. Мы будем использовать нормализацию MinMax для обучения.

Для Z-Score мы предпринимаем те же шаги, что и для MinMaxScaler, однако мы меняем функцию MinMaxScaler на StandardScaler.

Наш набор данных теперь нормализован.

Подробное объяснение MinMax / ZScore можно найти по ссылкам ниже, автором которых является Серафим Лукас.





Разделить данные

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

Модуль train_test_split в sklearn разбивает набор данных по строкам. Размер теста установлен на 30%, а обучение — на 70%.

Наш набор данных теперь нормализован и уже разделен на обучение и тестирование. Быстро и гибко?

Выбор модели

MS Azure

Для набора данных была выбрана модель двухклассовой нейронной сети (двоичный классификатор) на платформе MS Azure. Вы можете выбрать его, как показано ниже:

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

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

Блокнот Jupyter

Выбранная модель была загружена в Jupyter Notebook ~ MultiLayer Perceptron с использованием sklearnбиблиотеки.

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

Обучение

MS Azure

Чтобы обучить модель с заданными параметрами, мы добавляем модуль Train Model, как показано ниже:

Нам нужно выбрать столбец «Класс»/Цель, поэтому запустите селектор столбцов и выберите столбец «Класс/Цель» в вашем наборе данных, как показано ниже:

Блокнот Jupyter

Для Jupyter Notebook мы подгоняем модель к набору данных, как показано ниже:

Оценка

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

MS Azure

Чтобы протестировать модель, мы загружаем модуль Score Model в рабочую область. Мы достигаем этого, перетаскивая Score Model в рабочую область:

Чтобы получить выходные данные модели, щелкните правой кнопкой мыши Score Model -> Scoreed dataset и выберите Visualize:

Вывод должен быть:

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

Мы можем добавить его:

  1. Нажмите раскрывающееся меню "Машинное обучение" слева.
  2. Нажмите раскрывающееся меню "Оценить"
  3. Перетащите Оценить модель в рабочую область

Теперь мы можем четко оценить производительность модели на тестовых данных:

Мы можем оценить и проверить, что точность модели составляет 0,40 на тестовых данных, а AUC с порогом 0,5 составляет 0,500.

Блокнот Jupyter

Мы можем выполнить этап оценки аналогичным образом с некоторыми строками кода:

Отсюда видно, что точность модели составляет 0,43, а AUC 0,23.

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

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

  1. Количество скрытых нейронов в скрытом слое.
  2. Скорость обучения созданной нейронной сети.
  3. Максимальное количество итераций.

Кроме того, можно выполнить GridSearchCV, чтобы определить оптимальные параметры модели.

Вы можете найти код Jupyter Notebook здесь: https://github.com/Ankin01/Build-a-model-using-Jupyter-Notebook.

Полную схему шагов MS Azure можно найти здесь:

https://github.com/Ankin01/Build-a-model-using-Microsoft-Azure

Теперь, когда вы увидели два подхода:

Каковы ваши предпочтения? С кодом или без кода? Оставьте свой отзыв и подключитесь:

LinkedIn: Андрей Киньюа

Твит @KinyuaAndrew

Удачной обработки данных!