[English version] [Документация]
Bosk - это фреймворк для создания моделей Глубоких лесов, написанный на языке Python. Совместим с scikit-learn.
Bosk – открытая библиотека для разработки и применения новых алгоритмов машинного обучения на основе глубоких лесов.
Глубокие леса – вид моделей машинного обучения, совмещающих обучение представлениям (автоматическое создание более удобных для обучения векторов признаков) с алгоритмами, не требующими обратного распространения ошибки, такими как случайные леса и градиентный бустинг. Иными словами, глубокие леса являются аналогом глубоких нейронных сетей, причём их построение осуществляется послойно, а блоками могут выступать любые модели машинного обучения.
Модели Bosk – глубокие леса, представимые в виде графов, узлы которых составляют вычислительные блоки, например: базовые леса-классификаторы, операции конкатенации и т.д. Каждой модели соответствует два различных вычислительных графа: первый для стадии обучения модели, а второй – для предсказания.
Без использования фреймворка разработчикам глубоких лесов требуется вручную реализовывать и поддерживать согласованность участков кода для каждой стадии. Bosk позволяет разрабатывать новые архитектуры глубоких лесов, не прибегая к написанию рутинного кода отдельно для стадий обучения и предсказания: модель Bosk задаётся один раз, фреймворк автоматически определяет какие вычислительные графы потребуются для каждого из этапов.
Bosk содержит полезные инструменты для выполнения и отладки вычислительных графов. Помимо этого, в Bosk представлено большое количество готовых к использованию стандартных блоков. Фреймворк поддерживает как ручное задание вычислительного графа глубокого леса, так и его автоматическое послойное построение.
Основными направлениями применения Bosk являются:
- Разработка принципиально новых архитектур глубокого леса – гибкая платформа позволяет строить сложные схемы, легко расширять набор базовых блоков;
- Построение (в том числе автоматизированное) моделей для решения конкретных прикладных задач машинного обучения – платформа позволяет легко строить глубокие леса по заданному набору данных, сохранять и загружать модели для последующего предсказания;
- Сравнение различных архитектур глубокого леса – модуль тестирования позволяет оценивать точность и производительность различных моделей, избегая повторения одинаковых вычислений, что может использоваться как в исследовательских целях, так и для выбора наиболее подходящего решения прикладной задачи;
- Разработка высокоуровневых алгоритмов для решения новых прикладных задач машинного обучения – расширяемая архитектура не ограничена задачами классификации и регрессии, для новых видов задач легко могут быть адаптированы соответствующие базовые блоки.
Для корректной работы пакета необходим Python версии не ниже 3.9.
Bosk использует библиотеку Graphviz для визуализации вычислительных графов. Для корректной работы данного инструмента требуется установка бинарной зависимости graphviz.
Инструкции по установке graphviz можно найти по ссылке.
В Bosk используется библиотека JAX для выполнения вычислений на ГПУ (видеокарте), однако ее установка не тривиальна и не может быть выполнена автоматически при установке пакета.
Bosk может быть запущен без установки JAX, однако блоки, выполняющиеся на ГПУ будут недоступны. Для установки без JAX достаточно выполнить пункт установка пакета.
Официально JAX распространяется только для Linux и Mac OS, поэтому, к сожалению, пользователям Windows следует использовать WSL для установки JAX и использования bosk с поддержкой вычислений на ГПУ.
Установка только для ЦПУ
Если на Вашей системе нет графического процессора, Вы можете установить версию JAX для ЦПУ:
pip install --upgrade "jax[cpu]==0.4.10"
Установка с поддержкой вычислений на ГПУ
Если Вы заинтересованы в установке bosk с поддержкой вычислений на ГПУ, пожалуйста, прочитайте наше руководство по установке в документации.
Для установки пакета bosk напрямую из GitHub выполните:
pip install git+https://github.com/NTAILab/bosk.git
Также Вы можете вручную склонировать репозиторий и установить bosk:
git clone https://github.com/NTAILab/bosk.git
cd bosk
pip install -r requirements.txt
python setup.py install
Примеры новых вариантов использования кода включают скрипты и блокноты с кодом и тектовыми пояснениями и диаграммами, располагаются в директории examples. Также вы можете обратиться к нашей документации, в которую включены данные примеры.
Для краткого обзора возможностей фреймворка рассмотрим однослойный Глубокий лес, содержащий в себе два вида лесов: случайный лес (Random Forest) и модель сверхслучайных деревьев (Extremely Randomized Trees). Вектора вероятностей, предсказываемые каждой из моделей, конкатенируются с вектором входных признаков и передаются в финальный лес.
from bosk.pipeline.builder import FunctionalPipelineBuilder
from bosk.executor import RecursiveExecutor, BoskPipelineClassifier
# подключение блоков для обеспечения подсказок IDE
from bosk.block.zoo.input_plugs import Input, TargetInput
from bosk.block.zoo.data_conversion import Concat
from bosk.block.zoo.models.classification import RFC, ETC
from bosk.block.zoo.output_plugs import Output
# создание построителя конвейера
with FunctionalPipelineBuilder() as b:
# блоки для маршрутизации входных данных:
# `x` для вектора факторов и `y`
# для откликов
x = Input('X')() # вход input-блока пустой
y = TargetInput('y')()
# блоки моделей лесов
random_forest = RFC(max_depth=5)
extra_trees = ETC(n_estimators=200)
# блок конкатенации
cat = Concat(['x', 'rf', 'et'])
# слой, конкатенирующий выходные векторы лесов
# и вектор входных признаков
layer_1 = cat(x=x, rf=random_forest(X=x, y=y), et=extra_trees(X=x, y=y))
# лес для осуществления итогового предсказания
final_extra_trees = ETC()
# выход конвейера
Output('proba')(final_extra_trees(X=layer_1, y=y))
# любой блок из `bosk.block.zoo` также доступен через построитель, без импорта:
b.Output('alternative_proba')(b.XGBClassifier(max_depth=5)(X=layer_1, y=y))
# данный блок не будет обучен по умолчанию, поскольку выход не используется для предсказаний
# создание конвейера
pipeline = b.build()
# scikit-learn обертка для конвейера
model = BoskPipelineClassifier(pipeline, executor_cls=RecursiveExecutor)
# обучаем модель
model.fit(X_train, y_train)
# осуществляем предсказание
test_preds = model.predict(X_test)
Для того, чтобы увидеть больше примеров, Вы можете обратиться к нашей документации. Также Вы можете найти Jupyter блокноты с примерами в директории с примерами.
Больше информации о bosk Вы можете найти в нашей документации.
Мы всегда рады вкладу сообщества в наш проект. Пожалуйста, прочитайте инструкцию, чтобы узнать, как стать участником bosk.