Skip to content

Dont4rootMe/Ensembles-ML

Repository files navigation

Методы ансамблирования в машинном обучении

Подготовил студент 3 курса ВМК МГУ кафедры ММП Федров Артем Максимович

Проект нацелен на изучение работы методов ансамблирования в машинном обучении (Random Forest и Градиентного Бустинга на деревьях), а так же создание клиент-сервер архитектуры обучения соответсвтующих стратегий. Медоли реализованы на основе библиотеки scikit-learn, сервер с применением фреймворка fastapi, фронтенд с применением Reactjs и библиотеки стилей - react-bootstrap

Устройство

Ensembles-ML
├─ Docker
├─ README.md
├─ local_model_storage
├─ scripts
├─ src
│  ├─ backend
│  └─ frontend
└─ stuff
   ├─ data_examples
   ├─ data_pickles
   ├─ figures
   └─ notebooks

Репозиторий состоит из нескольких логических частей:

  • Фронтенда: Reactjs и html
  • Бэкенда: python, fastapi
  • Локального хранения моделей
  • Скриптов для сборки, запуска и завершения работы приложения
  • Докер файлов
  • Папки с данными по анализу моделей

Руководство пользователя

Запуск осуществляется из командной строки из корневой директории при помощи команды:

sh ./scripts/run.sh

Остановить исполнение возможно при помощи команды:

sh ./scripts/stop.sh

Поднимается структура из двух docker контейнеров, коммуницирующих друг с другом по портам :8000 для бэкенда и :3000 для фронтенда. Перейти к просмотру приложения можно по адресу http://localhost:3000/, просмотр архитектуры бэкенда доступен http://localhost:8000/docs. Организация осуществлена по стандартному протоколу http

UI управления моделями

Перейдя к просмотру сайта, пользователь видит панель управления настройками обучения моделей На выбор даются модели Градиентного бустинга на деревьях и Random Forest с полонительными параметрами обучения:

  • Задание числа базовых моделей (деревьев)
  • Задание максимальной глубины деревьев
  • Задание мощности подвыборки признаков, для обучения базовых моделей
  • Выбор стратегии ветвления деревьев
  • Определение процедуры дробелния обучающей выборки для каждого из деревьев (коэффициент бутстрапинга)
  • Определение seed для генератора случайности
  • Для Градиентного бустинга присутсвует параметр learning-rate

Вместе с параметрами модели пользователю доступна панель настройки обучающей выборки. Существует две опции:

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

Анализ моделей

Анализ модели осуществялется посредством просмотра конечных метрик качества: RMSE, MAE, MAPE, R2 score, а так же по статистике времени. История обучения модели так же вклюяает в себя время обучения и начальные параметры.

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

Использование моделей

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

Функционирование проекта

Проект собирается с помощью docker-compose. Бэкенд выполняет задачи загрузки данных, обучения моделей, выгрузки данных (будь то сами сериализованные модели или предсказания), а так же функцию временного хранения моделей, пока не хакончилась сессия. Фронтенд же обеспечивает коммуницирование пользователя с сервером.

Бэкенд разделен на логические части:

backend
├─ api.py               # эндпоинты для общения с клиентом
├─ engine.py            # обработка операций, парсинг, подготовка готовых ответов для api.py
├─ ensembles.py         # модуль со всеми моделями
├─ schemes.py           # модуль, храняший шаблоны ответов и запросов для api.py
└─ settings.py          # модуль для хранения настроек программы

В свою очередь фронт делится на заглавные файлы "хабы" и библиотеку простых составных компонент:

frontend
├─ package-lock.json
├─ package.json
└─ src
   ├─ App.js                 # главный модуль программы, поддерживающий общение между объектами
   ├─ CALLBACKS.js           # модуль централизованного сообщения с бэком
   ├─ DataSetDefiner.jsx     # модуль выбора обучающей и валидационной выборки для обучения моделей
   ├─ ModelAudit.jsx         # модуль хранения и взаимодействия с обученными моделями
   ├─ ModelSettings.jsx      # модуль определения параметров обучения
   ├─ ToastFactory.jsx       # главный хаб для выведения на экран быстрой информации, сообщений об ошибках и предупреждениях
   ├─ UI                     # библиотека компонент
   └─ index.js

Данные для тестов

Брать данные можно в папке ./stuff/data_examples/...

Для обучения модели общий вид: data_train_<random_name>.csv Для теста модели общий вид файла: data_test<random_name>.csv Для предсказания на уже обученной модели: data_test_external_<random_name>.csv

About

accomplishment of 3 prac-task

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published