Tribuo — это библиотека машинного обучения на Java, которая обеспечивает многоклассовую классификацию, регрессию, кластеризацию, обнаружение аномалий и классификацию по нескольким меткам. Tribuo предоставляет реализации популярных алгоритмов машинного обучения, а также объединяет другие библиотеки для обеспечения унифицированного интерфейса. Tribuo содержит весь код, необходимый для загрузки, описания и преобразования данных. Кроме того, он включает классы оценки для всех поддерживаемых типов прогнозов. Разработку возглавляет исследовательская группа по машинному обучению Oracle Labs; мы приветствуем вклад сообщества.
Все тренажеры настраиваются с помощью системы конфигурации OLCUT. Это позволяет пользователю определить тренера в файле xml или json и многократно строить модели. Примеры конфигураций для каждого из поставляемых трейнеров можно найти в папке конфигурации каждого пакета. Эти файлы конфигурации также можно записать в формате JSON или EDN, используя соответствующую зависимость конфигурации OLCUT. Модели и наборы данных можно сериализовать с помощью сериализации Java.
Все модели и оценки включают в себя сериализуемый объект происхождения, который записывает время создания модели или оценки, идентичность данных и любые примененные к ним преобразования, а также гиперпараметры тренера. В случае оценок эта информация о происхождении также включает конкретную используемую модель. Информацию о происхождении можно извлечь в формате JSON или сериализовать напрямую с помощью сериализации Java. Для производственных развертываний информация о происхождении может быть отредактирована и заменена хешем, чтобы обеспечить отслеживание модели через внешнюю систему. Многие модели Tribuo можно экспортировать в формат ONNX для развертывания на других языках, платформах или облачных сервисах.
Tribuo работает на Java 8+, и мы тестируем LTS-версии Java вместе с последней версией. Tribuo сама по себе представляет собой чисто Java-библиотеку и поддерживается на всех платформах Java; однако некоторые из наших интерфейсов требуют собственного кода и поэтому поддерживаются только там, где есть поддержка встроенных библиотек. Мы тестируем архитектуры x86_64 в Windows 10, macOS и Linux (RHEL/OL/CentOS 7+), поскольку это поддерживаемые платформы для собственных библиотек, с которыми мы взаимодействуем. Если вас интересует другая платформа и вы хотите использовать один из собственных интерфейсов библиотеки (ONNX Runtime, TensorFlow и XGBoost), мы рекомендуем обратиться к разработчикам этих библиотек. Обратите внимание, что для карточек моделей и пакетов воспроизводимости требуется Java 17, и поэтому они не являются частью tribuo-all
развертывания Maven Central.
Учебные записные книжки, в том числе примеры классификации, кластеризации, регрессии, обнаружения аномалий, TensorFlow, классификации документов, загрузки столбчатых данных, работы с моделями, обученными извне, и системы конфигурации, можно найти в учебных пособиях. Они используют ядро ноутбука IJava Jupyter и работают с Java 10+, за исключением учебных пособий по карточкам моделей и воспроизводимости, для которых требуется Java 17. Чтобы преобразовать код учебных пособий обратно в Java 8, в большинстве случаев просто замените ключевое слово var
соответствующими типами. .
Tribuo включает в себя реализации нескольких алгоритмов, подходящих для широкого круга задач прогнозирования:
Алгоритм | Выполнение | Примечания |
---|---|---|
Упаковка | Трибуо | В качестве базового обучающего можно использовать любой тренер Tribuo. |
Случайный лес | Трибуо | Как для классификации, так и для регрессии |
Дополнительные деревья | Трибуо | Как для классификации, так и для регрессии |
К-НН | Трибуо | Включает опции для нескольких параллельных бэкэндов, а также однопоточный бэкэнд. |
Нейронные сети | ТензорФлоу | Обучите нейронную сеть в TensorFlow через оболочку Tribuo. Модели можно развертывать с использованием интерфейса ONNX или интерфейса TF. |
Ансамбли и K-NN используют функцию комбинации для получения результатов. Эти объединители зависят от задачи прогнозирования, но реализации ансамбля и K-NN не зависят от задачи. Мы предоставляем объединители для голосования и усреднения для многоклассовой классификации, классификации по нескольким меткам и задач регрессии.
Tribuo имеет реализации или интерфейсы для:
Алгоритм | Выполнение | Примечания |
---|---|---|
Линейные модели | Трибуо | Использует SGD и поддерживает любой оптимизатор градиента. |
Факторизационные машины | Трибуо | Использует SGD и поддерживает любой оптимизатор градиента. |
КОРЗИНА | Трибуо | |
СВМ-СГД | Трибуо | Реализация алгоритма Pegasos |
Adaboost.SAMME | Трибуо | В качестве базового обучающего можно использовать любой классификационный тренажер Tribuo. |
Полиномиальный наивный Байес | Трибуо | |
Регуляризованные линейные модели | LibЛинейный | |
СВМ | LibSVM или LibLinear | LibLinear поддерживает только линейные SVM. |
Деревья решений с градиентным усилением | XGBoost |
Tribuo также поставляет CRF с линейной цепочкой для задач классификации последовательностей. Этот CRF обучается через SGD с использованием любого из оптимизаторов градиента Tribuo.
Tribuo имеет набор теоретико-информационных алгоритмов выбора признаков, которые можно применять для задач классификации. Входные данные автоматически разделяются на ячейки одинаковой ширины. На данный момент сюда входят реализации взаимной максимизации информации (MIM), условной взаимной максимизации информации (CMIM), минимальной избыточности, максимальной релевантности (mRMR) и совместной взаимной информации (JMI).
Для объяснения предсказаний классификатора существует реализация алгоритма LIME. Реализация Tribuo позволяет смешивать текстовые и табличные данные, а также использовать любую разреженную модель в качестве объяснения (например, деревья регрессии, лассо и т. д.), однако она не поддерживает изображения.
Алгоритмы регрессии Tribuo по умолчанию являются многомерными. Одномерные реализации обертываются для получения многомерного вывода.
Алгоритм | Выполнение | Примечания |
---|---|---|
Линейные модели | Трибуо | Использует SGD и поддерживает любой оптимизатор градиента. |
Факторизационные машины | Трибуо | Использует SGD и поддерживает любой оптимизатор градиента. |
КОРЗИНА | Трибуо | |
Лассо | Трибуо | Использование алгоритма LARS |
Эластичная сетка | Трибуо | Использование алгоритма координатного спуска |
Регуляризованные линейные модели | LibЛинейный | |
СВМ | LibSVM или LibLinear | LibLinear поддерживает только линейные SVM. |
Деревья решений с градиентным усилением | XGBoost |
Tribuo включает в себя инфраструктуру для кластеризации, а также предоставляет две реализации алгоритма кластеризации. Мы ожидаем со временем реализовать дополнительные алгоритмы.
Алгоритм | Выполнение | Примечания |
---|---|---|
HDBSCAN* | Трибуо | Алгоритм на основе плотности, который обнаруживает кластеры и выбросы |
K-средние | Трибуо | Включает как последовательные, так и параллельные серверные части, а также алгоритм инициализации K-Means++. |
Tribuo предлагает инфраструктуру для задач обнаружения аномалий. Мы ожидаем, что со временем добавим новые реализации.
Алгоритм | Выполнение | Примечания |
---|---|---|
Одноклассная СВМ | LibSVM | |
Одноклассная линейная СВМ | LibЛинейный |
Tribuo предлагает инфраструктуру для классификации по нескольким меткам, а также оболочку, которая преобразует любой из алгоритмов многоклассовой классификации Tribuo в алгоритм классификации по нескольким меткам. Мы ожидаем, что со временем добавим больше реализаций с несколькими метками.
Алгоритм | Выполнение | Примечания |
---|---|---|
Независимая оболочка | Трибуо | Преобразует многоклассовый алгоритм классификации в многометочный, создавая отдельный классификатор для каждой метки. |
Цепочки классификаторов | Трибуо | Предоставляет цепочки классификаторов и рандомизированные ансамбли цепочек классификаторов с использованием любого из алгоритмов многоклассовой классификации Tribuo. |
Линейные модели | Трибуо | Использует SGD и поддерживает любой оптимизатор градиента. |
Факторизационные машины | Трибуо | Использует SGD и поддерживает любой оптимизатор градиента. |
В дополнение к нашим собственным реализациям алгоритмов машинного обучения, Tribuo также предоставляет общий интерфейс для популярных инструментов ML на JVM. Если вы заинтересованы в создании нового интерфейса, откройте выпуск GitHub, и мы обсудим, как он впишется в Tribuo.
На данный момент у нас есть интерфейсы для:
Двоичные файлы доступны на Maven Central, используя groupId org.tribuo
. Чтобы получить все совместимые с Java 8 компоненты Tribuo, включая привязки для TensorFlow, ONNX Runtime и XGBoost (которые являются собственными библиотеками), используйте:
Мавен:
< dependency >
< groupId >org.tribuo</ groupId >
< artifactId >tribuo-all</ artifactId >
< version >4.3.1</ version >
< type >pom</ type >
</ dependency >
или из Gradle:
implementation ( " org.tribuo:tribuo-all:4.3.1@pom " ) {
transitive = true // for build.gradle (i.e., Groovy)
// isTransitive = true // for build.gradle.kts (i.e., Kotlin)
}
Зависимость tribuo-all
— это pom, который зависит от всех подпроектов Tribuo, за исключением карточек моделей и проектов воспроизводимости, для которых требуется Java 17.
Большая часть Tribuo — это чистая Java и, следовательно, кроссплатформенная, однако некоторые интерфейсы связаны с библиотеками, использующими собственный код. Эти интерфейсы (TensorFlow, ONNX Runtime и XGBoost) работают только на поддерживаемых платформах для соответствующих опубликованных двоичных файлов, и Tribuo не контролирует, какие двоичные файлы поставляются. Если вам нужна поддержка конкретной платформы, обратитесь к сопровождающим этих проектов. Начиная с версии 4.1, все эти собственные пакеты предоставляют двоичные файлы x86_64 для Windows, macOS и Linux. Также возможно скомпилировать каждый пакет для macOS ARM64 (т. е. Apple Silicon), хотя на Maven Central нет двоичных файлов для этой платформы для TensorFlow или XGBoost. Начиная с версии 4.3, Tribuo теперь зависит от версии ONNX Runtime, которая включает поддержку платформ macOS ARM64 и Linux aarch64. При разработке на платформе ARM вы можете выбрать профиль arm
в pom.xml
Tribuo, чтобы отключить тесты собственной библиотеки.
Для каждого модуля Tribuo публикуются отдельные банки. Предпочтительно зависеть только от модулей, необходимых для конкретного проекта. Это предотвращает ненужное использование в вашем коде больших зависимостей, таких как TensorFlow.
Для сборки Tribuo использует Apache Maven v3.5 или выше. Tribuo совместим с Java 8+, и мы тестируем LTS-версии Java вместе с последней версией. Для сборки просто запустите mvn clean package
. Все зависимости Tribuo должны быть доступны в Maven Central. Если у вас возникли проблемы, пожалуйста, сообщите о проблемах, связанных со сборкой (однако сначала проверьте, отсутствуют ли у вас настройки прокси-сервера для Maven, поскольку это распространенная причина сбоев сборки и находится вне нашего контроля). Обратите внимание, что при сборке с использованием Java 16 или более ранней версии пакеты модели и воспроизводимости будут отключены.
Разработка происходит в main
ветке, к которой добавлен номер версии следующего выпуска Tribuo с добавлением «-SNAPSHOT». Основные и второстепенные выпуски Tribuo будут помечены в main
ветке, а затем будет иметь ветку с именем vA.BX-release-branch
(для выпуска vA.B.0
), ответвленную от фиксации выпуска с тегами для любых точечных выпусков (т. е. vA.B.1
, vA.B.2
и т. д.), следующие из этого основного/второстепенного выпуска. Эти точечные выпуски помечены в конкретной ветке выпуска, например, v4.0.2
помечен в ветке v4.0.X-release-branch
.
Мы приветствуем вклады! Ознакомьтесь с нашими правилами внесения взносов.
У нас есть список рассылки для обсуждения [email protected], заархивированный здесь. Мы изучаем различные варианты чата в реальном времени, загляните сюда в будущем. Для сообщений об ошибках, запросов на добавление функций или других проблем отправьте сообщение о проблеме на Github.
Пожалуйста, ознакомьтесь с руководством по безопасности для нашего ответственного процесса раскрытия уязвимостей безопасности.
Tribuo распространяется по лицензии Apache 2.0.