Подготовил студент 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
Перейдя к просмотру сайта, пользователь видит панель управления настройками обучения моделей На выбор даются модели Градиентного бустинга на деревьях и 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