Сервисы анализа данных и машинного обучения. Применение машинного обучения в ит аутсорсинге. Анализируют данные с сенсоров


Машинное обучение – одна из самых популярных областей Computer Science, хотя в то же время одна их самый избегаемых среди разработчиков. Основная причина этого в том, что теоретическая часть машинного обучения требует глубокой математической подготовки, которую многие предпочитают сразу же забыть по окончании университетского обучения. Но необходимо понимать, что помимо теоретических основ, существует также и практическая сторона, которая оказывается значительно проще для освоения и ежедневного использования. Цель этой работы – ликвидировать разрыв между программистами и специалистами по обработке данных и показать, что использование машинного обучения в своих приложениях может быть достаточно простой задачей. В статье излагается вся последовательность шагов, необходимая для построения модели предсказания цены автомобиля в зависимости от набора его характеристик с последующим ее использованием в мобильном приложении на Windows 10 Mobile.

Что такое Azure ML?

Если кратко, то Azure Machine Learning – это:

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

Почему именно Azure ML?
Потому, что Azure Machine Learning – один из простейших инструментов для использования машинного обучения, убирающий входной барьер для всех, кто решает использовать его для своих нужд. С Azure ML больше не надо быть математиком.

Логический процесс построения алгоритма машинного обучения

  1. Определение цели. Все алгоритмы машинного обучения бесполезны без явно-определенной цели проведения эксперимента. В данной лабораторной работе цель – это предсказание цены автомобиля на основе набора характеристик, предоставленных конечным пользователем.
  2. Сбор данных. Во время этого этапа формируется выборка данных, необходимая для дальнейшего обучения модели. В данном случае будут использоваться данные репозитария машинного обучения университета Калифорнии.
    archive.ics.uci.edu/ml/datasets/Automobile
  3. Подготовка данных. На этом этапе производится подготовка данных путем формирования характеристик, удаления выбросов и разделения выборки на обучающую и тестовую.
  4. Разработка модели. В процессе разработки модели производиться выбор одного или нескольких моделей данных и соответствующих алгоритмов обучения, которые по мнению разработчика должны будут дать требуемый результат. Часто этот процесс совмещен с параллельным исследованием эффективности нескольких моделей и визуальным анализом данных с целью отыскания каких-либо закономерностей.
  5. Обучение модели. Во время обучения алгоритм обучения производит поиск скрытых закономерностей в выборке данных с целью отыскания способа предсказания. Сам процесс поиска определяется выбранной моделью и алгоритмом обучения.
  6. Оценка модели. После того как модель обучена необходимо исследовать ее прогностические характеристики. Чаще всего для этого ее прогоняют на тестовой выборке и оценивают получившийся уровень ошибки. В зависимости от этого и требований к точности модель может быть как принята в качестве итоговой, так и произведено повторное обучение после добавления новых входных характеристик или даже изменения алгоритма обучения.
  7. Использование модели. В случае успешного тестирования обученной модели наступает стадия ее использования. И это тот случай, когда Azure ML становится незаменим, давая все необходимые инструменты для публикации, мониторинга и монетизации алгоритмов

Построение прогностической модели

На открывшейся странице нажмите Get Started now.

Для работы с Azure ML вам необходима активная подписка Microsoft Azure. Если она у вас уже есть, то просто войдите в Azure Management Portal, иначе – предварительно зарегистрируйте бесплатную пробную учетную запись, перейдя по ссылке .

В первую очередь необходимо загрузить обучающую выборку. Для этого перейдите по ссылке и загрузите на свой компьютер файл imports-85.data, содержащий выборку данных по автомобилям.
Для загрузки этого файла в Azure ML Studio нажмите на New в нижней части страницы и в открывшейся панели последовательно выберите Dataset и From Local File. В меню загрузки укажите путь к загруженному файлу, название и в качестве типа выберите Generic CSV File with no header (.hn.csv).

Создание нового эксперимента

Для того чтобы создать новый эксперимента выберите New -> Experiment -> Blank Experiment. В результате будет создана новая рабочая область эксперимента с панелью инструментов справа.

Определение выборки данных

Загруженные ранее данные должны быть отражены в разделе Saved Datasets слева. Выберите его и перетащите в любое место рабочего пространства, например, туда, куда указывает стрелка Drag Items Here.

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

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

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

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

Для исправления проблемы с именами из группы Data Transformation/Manipulation перенесите на рабочую поверхность Metadata Editor.

Перетяните выход (снизу) выборки данных на вход (сверху) нового компонента, чтобы соединить их. Теперь кликните на него, чтобы открыть окно настроек справа. Metadata Editor позволяет изменить метаинформацию одного или нескольких столбцов, включая тип или название. Откройте мастер выбора столбцов нажатием на Launch column selector. Чтобы выбрать все столбцы, в поле Begin With выберите All columns, удалите строку уточнения выбора нажатием на знак “-“ справа и подтвердите нажатием на галочку.

В поле New column names панели настроек введите новые имена столбцов через запятую, которые можно найти в файле import-85.names по ранее приводившейся ссылке. Значение поля должно быть следующим:

symboling,normalized-losses,make,fuel-type,aspiration,num-of-doors,body-style,drive-wheels,engine-location,wheel-base,length,width,height,curb-weight,engine-type,num-of-cylinders,engine-size,fuel-system,bore,stroke,compression-ratio,horsepower,peak-rpm,city-mpg,highway-mpg,price

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

Теперь удалим normalized-losses. Для этого перетащите в рабочую область Project Columns из той же группы, соедините его с Metadata Editor и перейдите к его настройкам. Снова выберите мастер выбора строк и в этот раз выберите все строки за исключением normalized-losses, сделав настройки, аналогичные приведенным на рисунке ниже.

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

К сожалению, есть еще столбцы, в которых отсутствуют значения. Но их не много, а потому можно ограничиться лишь отбрасыванием неполных строк. Для этого выберите Missing Value Scrubber и соедините его с Project Columns. В поле For missing values измените значение на Remove entire row. Запустите, визуализируйте и убедитесь, что строки с пустыми значениями пропали.

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

make,body-style,wheel-base,engine-size,horsepower,peak-rpm,highway-mpg,num-of-cylinders,price

Добавьте новый Project Columns и выберите приведенные выше столбцы.

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

Разбивка выборки

Теперь данные готовы к использованию в процессе обучения. Но в машинном обучении возможен эффект, получивший название «переобучение», – заучивание моделью данных без обобщения. Такое поведение ведет к невозможности адекватного предсказания на сколько-нибудь отличающихся данных. Для обработки этой ситуации выборку принято разделить на обучающую и тестовую в отношении близком к 3:1. Последняя из них никак не участвует в процессе обучения и по окончании используется для оценки ошибки предсказания. Если эта ошибка значительно отличается в большую сторону от ошибки на обучающей выборке, значит, наблюдается описанный выше эффект.

Для создания тестовой выборки перенесите на рабочую область эксперимента и соедините с последним Project Columns компонент Split Data из группы Data Transformation/Sample and Split. Установите долю строк на первом выходе равной 0.75 и убедитесь, что установлен флаг Randomize Split.

Обучение модели линейной регрессии

Первым делом перенесите из панели инструментов компоненты Linear Regression, Train Model, Score Model и Evaluate Model. Train Model – универсальный компонент, позволяющий обучение любой модели на любой обучающей выборке. Для настройки нашего конкретного случая подсоедините первый (левый) выход Split Data и выход Linear Regression к соответствующим входам Train Model. В настройках Train Model в качестве целевого значения (outcome column) укажите price. Теперь модель готова к обучению.

Но, помимо самого обучения, важно узнать результат обучения. Компонент Score Model позволяет вычислить выход обученной модели на произвольной выборке и рассчитать результат предсказания. Соедините выход Train Model, содержащий обученную модель, с соответствующим входом Score Model, а в качестве выборки данных на другой вход подайте тестовую выборку со второго выхода Split Data. Выход Score Model соедините с любым из входов Evaluate Model для того, чтобы рассчитать численные характеристики качества обучения. В результате должна получиться процесс, аналогичный представленному на рисунке.

Запустите модель и визуализируйте результат выполнения Evaluate Model.

Коэффициент детерминации указывает, как хорошо линия регрессии описывает исходные данные. Принимаемые ей значения варьируются от 0 до 1, где единице соответствует абсолютная точность. В нашем случае коэффициент равен 82%. Хороший ли это результат или нет – напрямую зависит от постановки задачи и определенной толерантности к ошибке. Для случая предсказания цены автомобиля 82% - отличный результат. Если вы хотите его улучшить попробуйте добавить другие столбцы в Project Columns или попробовать принципиально другой алгоритм. Например, Poisson Regression. Последнее может быть достигнуто путем простой замены компонента линейной регрессии на пуасонову. Но более интересный подход – это собрать из элементов параллельное обучение и подключить результат ко второму выходу Evaluate Model, что позволит в удобной форме сравнить результаты обучения обоих моделей.

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

Кликните правой кнопкой по мыши по компоненту Train Model, отвечающему линейной регрессии и выберите Save as Trained Model. Это позволит использовать полученную модель в любых других экспериментах без необходимости повторного обучения.

Публикация веб-сервиса

Для публикации сервиса выберите компонент Train Model, отвечающий линейной регрессии и нажмите в Set Up Web Service. В открывшемся меню выберите Predictive Web Service и дождитесь пока Azure ML создаст новый эксперимент, оптимизированный для нужд сервиса. Удалите автоматически созданные компоненты Web Service Input и Web Service Output – мы создадим их позднее после небольшой подготовки.

На данный момент элемент Score Model повторяет на выходе все входящие столбцы, а предсказанному значению дает название Score Labels. Это необходимо исправить.

Для этого перенесите из панели инструментов на рабочую поверхность два уже знакомых компонента: Project Columns и Metadata Editor. И соедините их в последовательности изображенной на рисунке ниже. В настройках Project Columns выберите только один столбец Score Labels, и используя Metadata Editor переименуйте его в price.

В заключение необходимо добавить вход и выход создаваемого сервиса. Для этого добавьте в эксперимент Web Service Input и Web Service Output. Соедините первый со входом Score Model, а второй с выходом Metadata Editor. В настройках обоих элементов измените название на «input» и «prediction», соответственно.

Запустите модель еще раз, нажав на Run, и по окончании валидации опубликуйте сервис нажатием Deploy Web Service.

Тестирование сервиса

После нажатия на Deploy Web Service вы будете перенаправлены на страницу с информацией о только что созданном сервисе. Ссылки под API HELP PAGE содержат достаточно подробное описание с информацией о содержимом входящего и исходящего JSON пакетов, а также пример кода консольного приложения, дающего преставление о способе использования.

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

audi sedan 99.8 four 109 102 5500 30 13950

Разработка приложения

В заключение рассмотрим процесс разработки мобильного приложения, использующего Azure ML в роли back-end сервиса. Сначала создайте новый проект универсального приложения Windows. Для этого в открытом Visual Studio 2015 выберите File -> New -> Project… В открывшемся окне перейдите на вкладку Windows в меню слева и выберите Blank App (Universal Windows). В поле названия введите AzureMLDemo и нажмите OK. В случае необходимости готовый проект может быть найден на GitHub .

После некоторой подготовки Visual Studio откроет новый проект универсального приложения. Убедитесь, что в поле процессорной архитектуры справа от Debug указано x86, и правее выберите одну из мобильных виртуальных машин в качестве среды запуска. Например, Mobile Emulator 10.0.10240.0 720p 5 inch 1GB.

Теперь можно перейти к написанию самого приложения. В меню Solution Explorer двойным кликом откройте MainPage.xaml. Описание языка разметки XAML графического интерфейса выходит за границы этой работы, поэтому просто замените открывающийся и закрывающийся теги на код ниже.