Tribuo é uma biblioteca de aprendizado de máquina em Java que fornece classificação multiclasse, regressão, clustering, detecção de anomalias e classificação multirótulo. Tribuo fornece implementações de algoritmos populares de ML e também agrupa outras bibliotecas para fornecer uma interface unificada. Tribuo contém todo o código necessário para carregar, caracterizar e transformar dados. Além disso, inclui as classes de avaliação para todos os tipos de previsão suportados. O desenvolvimento é liderado pelo Grupo de Pesquisa de Aprendizado de Máquina da Oracle Labs; aceitamos contribuições da comunidade.
Todos os treinadores são configuráveis usando o sistema de configuração OLCUT. Isso permite que um usuário defina um treinador em um arquivo xml ou json e construa modelos repetidamente. Exemplos de configurações para cada um dos Trainers fornecidos podem ser encontrados na pasta de configuração de cada pacote. Esses arquivos de configuração também podem ser gravados em json ou edn usando a dependência de configuração apropriada do OLCUT. Modelos e conjuntos de dados são serializáveis usando serialização Java.
Todos os modelos e avaliações incluem um objeto de proveniência serializável que registra o tempo de criação do modelo ou avaliação, a identidade dos dados e quaisquer transformações aplicadas a eles, bem como os hiperparâmetros do treinador. No caso de avaliações, esta informação de proveniência inclui também o modelo específico utilizado. As informações de proveniência podem ser extraídas como JSON ou serializadas diretamente usando serialização Java. Para implantações de produção, as informações de proveniência podem ser editadas e substituídas por um hash para fornecer rastreamento de modelo por meio de um sistema externo. Muitos modelos Tribuo podem ser exportados no formato ONNX para implantação em outras linguagens, plataformas ou serviços em nuvem.
O Tribuo roda em Java 8+ e testamos em versões LTS do Java junto com a versão mais recente. O próprio Tribuo é uma biblioteca Java pura e é compatível com todas as plataformas Java; entretanto, algumas de nossas interfaces requerem código nativo e, portanto, são suportadas apenas onde há suporte de biblioteca nativa. Testamos em arquiteturas x86_64 no Windows 10, macOS e Linux (RHEL/OL/CentOS 7+), pois são plataformas suportadas para as bibliotecas nativas com as quais fazemos interface. Se você estiver interessado em outra plataforma e quiser usar uma das interfaces de biblioteca nativa (ONNX Runtime, TensorFlow e XGBoost), recomendamos entrar em contato com os desenvolvedores dessas bibliotecas. Observe que a placa de modelo e os pacotes de reprodutibilidade exigem Java 17 e, como tal, não fazem parte da implantação do tribuo-all
Maven Central.
Cadernos de tutorial, incluindo exemplos de classificação, clustering, regressão, detecção de anomalias, TensorFlow, classificação de documentos, carregamento de dados colunares, trabalho com modelos treinados externamente e sistema de configuração, podem ser encontrados nos tutoriais. Eles usam o kernel do notebook IJava Jupyter e funcionam com Java 10+, exceto o cartão de modelo e tutoriais de reprodutibilidade que requerem Java 17. Para converter o código dos tutoriais de volta para Java 8, na maioria dos casos, basta substituir a palavra-chave var
pelos tipos apropriados .
Tribuo inclui implementações de vários algoritmos adequados para uma ampla gama de tarefas de previsão:
Algoritmo | Implementação | Notas |
---|---|---|
Ensacamento | Tribuo | Pode usar qualquer treinador Tribuo como aluno base |
Floresta Aleatória | Tribuo | Para classificação e regressão |
Árvores extras | Tribuo | Para classificação e regressão |
KNN | Tribuo | Inclui opções para vários back-ends paralelos, bem como um back-end de thread único |
Redes Neurais | TensorFlow | Treine uma rede neural no TensorFlow por meio do wrapper Tribuo. Os modelos podem ser implantados usando a interface ONNX ou a interface TF |
Os conjuntos e K-NN usam uma função de combinação para produzir sua saída. Esses combinadores são específicos para tarefas de previsão, mas as implementações de conjunto e K-NN são independentes de tarefas. Fornecemos combinadores de votação e média para classificação multiclasse, classificação multirótulo e tarefas de regressão.
Tribuo possui implementações ou interfaces para:
Algoritmo | Implementação | Notas |
---|---|---|
Modelos lineares | Tribuo | Usa SGD e permite qualquer otimizador de gradiente |
Máquinas de fatoração | Tribuo | Usa SGD e permite qualquer otimizador de gradiente |
CARRINHO | Tribuo | |
SVM-SGD | Tribuo | Uma implementação do algoritmo Pegasos |
Adaboost.SAMME | Tribuo | Pode usar qualquer treinador de classificação Tribuo como aluno base |
Multinomial Ingênuo Bayes | Tribuo | |
Modelos Lineares Regularizados | Biblioteca Linear | |
SVM | LibSVM ou LibLinear | LibLinear suporta apenas SVMs lineares |
Árvores de decisão com gradiente aprimorado | XGBoost |
A Tribuo também fornece um CRF de cadeia linear para tarefas de classificação de sequências. Este CRF é treinado via SGD usando qualquer um dos otimizadores de gradiente do Tribuo.
Tribuo possui um conjunto de algoritmos de seleção de características teóricas da informação que podem ser aplicados a tarefas de classificação. As entradas de recursos são automaticamente discretizadas em compartimentos de largura igual. No momento, isso inclui implementações de maximização mútua de informações (MIM), maximização condicional de informações mútuas (CMIM), redundância mínima, relevância máxima (mRMR) e informações mútuas conjuntas (JMI).
Para explicar as previsões do classificador, existe uma implementação do algoritmo LIME. A implementação do Tribuo permite a mistura de dados textuais e tabulares, juntamente com o uso de qualquer modelo esparso como explicador (por exemplo, árvores de regressão, laço etc), porém não suporta imagens.
Os algoritmos de regressão do Tribuo são multidimensionais por padrão. Implementações unidimensionais são agrupadas para produzir resultados multidimensionais.
Algoritmo | Implementação | Notas |
---|---|---|
Modelos lineares | Tribuo | Usa SGD e permite qualquer otimizador de gradiente |
Máquinas de fatoração | Tribuo | Usa SGD e permite qualquer otimizador de gradiente |
CARRINHO | Tribuo | |
Laço | Tribuo | Usando o algoritmo LARS |
Rede Elástica | Tribuo | Usando o algoritmo de descida coordenada |
Modelos Lineares Regularizados | Biblioteca Linear | |
SVM | LibSVM ou LibLinear | LibLinear suporta apenas SVMs lineares |
Árvores de decisão com gradiente aprimorado | XGBoost |
Tribuo inclui infraestrutura para clustering e também fornece duas implementações de algoritmos de clustering. Esperamos implementar algoritmos adicionais ao longo do tempo.
Algoritmo | Implementação | Notas |
---|---|---|
HDBScan* | Tribuo | Um algoritmo baseado em densidade que descobre clusters e outliers |
K-médias | Tribuo | Inclui back-ends sequenciais e paralelos e o algoritmo de inicialização K-Means++ |
A Tribuo oferece infraestrutura para tarefas de detecção de anomalias. Esperamos adicionar novas implementações ao longo do tempo.
Algoritmo | Implementação | Notas |
---|---|---|
SVM de classe única | LibSVM | |
SVM linear de uma classe | Biblioteca Linear |
O Tribuo oferece infraestrutura para classificação multirótulo, juntamente com um wrapper que converte qualquer um dos algoritmos de classificação multiclasse do Tribuo em um algoritmo de classificação multirótulo. Esperamos adicionar mais implementações específicas de vários rótulos ao longo do tempo.
Algoritmo | Implementação | Notas |
---|---|---|
Invólucro independente | Tribuo | Converte um algoritmo de classificação multiclasse em um algoritmo multirrótulo, produzindo um classificador separado para cada rótulo |
Cadeias Classificadoras | Tribuo | Fornece cadeias de classificadores e conjuntos de cadeias de classificadores aleatórios usando qualquer um dos algoritmos de classificação multiclasse do Tribuo |
Modelos lineares | Tribuo | Usa SGD e permite qualquer otimizador de gradiente |
Máquinas de fatoração | Tribuo | Usa SGD e permite qualquer otimizador de gradiente |
Além de nossas próprias implementações de algoritmos de aprendizado de máquina, o Tribuo também fornece uma interface comum para ferramentas populares de ML na JVM. Se você estiver interessado em contribuir com uma nova interface, abra um Issue no GitHub e poderemos discutir como ela se encaixaria no Tribuo.
Atualmente temos interfaces para:
Os binários estão disponíveis no Maven Central, usando groupId org.tribuo
. Para extrair todos os componentes compatíveis com Java 8 do Tribuo, incluindo as ligações para TensorFlow, ONNX Runtime e XGBoost (que são bibliotecas nativas), use:
Maven:
< dependency >
< groupId >org.tribuo</ groupId >
< artifactId >tribuo-all</ artifactId >
< version >4.3.1</ version >
< type >pom</ type >
</ dependency >
ou do 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)
}
A dependência tribuo-all
é um pom que depende de todos os subprojetos Tribuo, exceto do cartão de modelo e dos projetos de reprodutibilidade que requerem Java 17.
A maior parte do Tribuo é Java puro e, portanto, multiplataforma, no entanto, algumas das interfaces estão vinculadas a bibliotecas que usam código nativo. Essas interfaces (TensorFlow, ONNX Runtime e XGBoost) rodam apenas em plataformas suportadas para os respectivos binários publicados, e o Tribuo não tem controle sobre quais binários são fornecidos. Se precisar de suporte para uma plataforma específica, entre em contato com os mantenedores desses projetos. A partir da versão 4.1, todos esses pacotes nativos fornecem binários x86_64 para Windows, macOS e Linux. Também é possível compilar cada pacote para macOS ARM64 (ou seja, Apple Silicon), embora não haja binários disponíveis no Maven Central para essa plataforma para TensorFlow ou XGBoost. A partir da versão 4.3, o Tribuo agora depende de uma versão do ONNX Runtime que inclui suporte para plataformas macOS ARM64 e Linux aarch64. Ao desenvolver em uma plataforma ARM você pode selecionar o perfil arm
no pom.xml
do Tribuo para desabilitar os testes da biblioteca nativa.
Jars individuais são publicados para cada módulo do Tribuo. É preferível depender apenas dos módulos necessários ao projeto específico. Isso evita que seu código extraia desnecessariamente grandes dependências, como o TensorFlow.
Tribuo usa Apache Maven v3.5 ou superior para construir. Tribuo é compatível com Java 8+ e testamos em versões LTS do Java junto com a versão mais recente. Para compilar, basta executar mvn clean package
. Todas as dependências do Tribuo devem estar disponíveis no Maven Central. Registre um problema para problemas relacionados à compilação se estiver tendo problemas (embora verifique primeiro se estão faltando configurações de proxy para o Maven, pois essa é uma causa comum de falhas de compilação e está fora de nosso controle). Observe que se você estiver compilando usando Java 16 ou anterior, o cartão de modelo e os pacotes de reprodutibilidade serão desabilitados.
O desenvolvimento acontece no branch main
, que possui o número da versão do próximo lançamento do Tribuo com "-SNAPSHOT" anexado a ele. Os lançamentos principais e secundários do Tribuo serão marcados no branch main
e, em seguida, terão um branch chamado vA.BX-release-branch
(para o lançamento vA.B.0
) ramificado do release commit marcado para quaisquer lançamentos pontuais (ou seja, vA.B.1
, vA.B.2
etc) após essa versão principal/secundária. Esses lançamentos pontuais são marcados no branch de lançamento específico, por exemplo, v4.0.2
está marcado no v4.0.X-release-branch
.
Aceitamos contribuições! Veja nossas diretrizes de contribuição.
Temos uma lista de discussão para discussão [email protected], arquivada aqui. Estamos investigando diferentes opções de bate-papo em tempo real. Verifique novamente no futuro. Para relatórios de bugs, solicitações de recursos ou outros problemas, registre um problema no Github.
Consulte o guia de segurança para conhecer nosso processo responsável de divulgação de vulnerabilidades de segurança.
Tribuo é licenciado sob a licença Apache 2.0.