Инструмент для машинного обучения на частично-структурированных данных (командный проект) — различия между версиями

Материал из Wiki - Факультет компьютерных наук
Перейти к: навигация, поиск
(Новая страница, с помощью формы Новый_командный_проект)
 
(Какие начальные требования?)
Строка 54: Строка 54:
  
 
=== Какие начальные требования? ===
 
=== Какие начальные требования? ===
Внутренняя потребность (и относительное умение) писать качественный код, продумывать архитектуру. ACM ICPC уровня бог или чуть ниже — может быть плюсом.
+
Внутренняя потребность (и относительное умение) писать качественный код, продумывать архитектуру, ACM ICPC уровня бог или чуть ниже — может быть плюсом. Минимальный опыт построения моделей машинного обучения, большим плюсом — успешное участие в соревнования по машинному обучению на Kaggle или иных площадках.
  
 
=== Темы вводных занятий ===
 
=== Темы вводных занятий ===

Версия 20:28, 6 октября 2016

Компания Yandex Data Factory
Учебный семестр Осень 2016
Учебный курс 3-й курс
Максимальное количество студентов, выбравших проект: 2-3



Что это за проект?

Классическая постановка задачи машинного обучения очень проста: необходимо построить модель (алгоритм), которая по числовому вектору признаков предсказывает значение некоторой целевой переменной. Такая постановка максимально удобна для работы с ней на языке математики, разработки численных методов. Однако, в практике специалиста по анализу данных приходится иметь дело со сложными объектами, процесс описания которых в виде числового вектора (feature engineering) — одна из наиболее трудозатратных задач. Вот этот процесс разработки признаков хочется как можно сильнее упростить.

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

Примеры типов признаков, которые должна уметь обрабатывать библиотека:

  • числа
  • категория
  • текст
  • дата/время
  • временной ряд (массив из чисел)
  • последовательность событий (массив из вложенных объектов)

Имея генератор векторно-числовых описаний объектов, инструмент использует наиболее универсальный и простой метод машинного обучения — градиентный бустинг над решающими деревьями (см. XGBoost) и таким образом строит конечную модель.

Почему описывать объекты именно в формате JSON? Для этого есть несколько аргументов: формат прост и подходит для описания почти любых типов данных, на этом языке реализованы многие Web API, одна из наиболее удачных реализаций концепции NoSQL баз данных (MongoDB) предлагает хранить данные именно в формате JSON. Вот несколько примеров наборов данных, представленных в формате JSON, с платформы Kaggle:

Чему научатся студенты? Что самое интересное в проекте?

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

Организация работы (Как студенты будут работать в команде?)

Проект расчитан на 2–3 студентов:

  1. Архитектор, в ответственности которого — разработка ядра библиотеки
  2. Разработчик с фокусом на data science, в его ответственности — разработка обработчиков признаков и обсуждение архитектурных решений
  3. Опционально: третий разработчик, либо аналитик с фокусом на подготовку бенчмарков, прототипирование и выбор наиболее перспективных методов feature engineer-инга для реализации в библиотеке

Компоненеты (Из каких частей состоит проект?)

  1. Подготовка и разбор бенчмарков: подборка наборов данных, построение модели “вручную”, используя стандартные приемы feature engineer-инга.
  2. Разработка библиотеки с модульной архитектурой, позволяющей добавлять обработчики признаков. Налаживание процесса совместной разработки и автоматического тестирования.
  3. Реализация обработчиков различных видов признаков (см. примеры в описании проекта), тестирование алгоритма на построенных бенчмарках.
  4. Интерфейс и его документация: CLI xgboost-like + Python sklearn-like.
  5. (*) Элементы AutoML: автоматический подбор параметров обучения, отбор фичей (или способов их генерации)
  6. (*) Интеграция с NoSQL базами данных вроде MongoDB.

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

Какие будут использоваться технологии?

  • Библиотеки XGBoost, SciKit-Learn.
  • База данных MongoDB.
  • GitHub + Travis CI (непрерывная интеграция)

Какие начальные требования?

Внутренняя потребность (и относительное умение) писать качественный код, продумывать архитектуру, ACM ICPC уровня бог или чуть ниже — может быть плюсом. Минимальный опыт построения моделей машинного обучения, большим плюсом — успешное участие в соревнования по машинному обучению на Kaggle или иных площадках.

Темы вводных занятий

  • Инструменты коллективной разработки и автоматического тестирования
  • Элементы agile
  • Feature engineering в различных задачах

Критерии оценки

  • 4-5: Алгоритм реализован и дает приемлемое качество на минимум 3х бенчмарках
  • 6-7: Реализованы обработчики большинства видов признаков, часто встречаемых в прикладных задачах. Библиотеку получила положительный отзыв у независимого практикующего data scientиста, протестировавшего ее в реальной задаче.
  • 8-10: Качественно реализованная и оформленная open source библиотека на GitHub + публикация в профессиональном издании + 200+ поинтов на HackerNews

Похожие проекты

Контактная информация

Ромов Петр (peter@romov.ru), будет еще технический ко-ментор