Tribuo est une bibliothèque d'apprentissage automatique en Java qui fournit une classification multi-classes, une régression, un clustering, une détection d'anomalies et une classification multi-étiquettes. Tribuo fournit des implémentations d'algorithmes ML populaires et englobe également d'autres bibliothèques pour fournir une interface unifiée. Tribuo contient tout le code nécessaire pour charger, présenter et transformer les données. De plus, il inclut les classes d'évaluation pour tous les types de prédiction pris en charge. Le développement est dirigé par le groupe de recherche sur l'apprentissage automatique d'Oracle Labs ; nous apprécions les contributions de la communauté.
Tous les formateurs sont configurables à l’aide du système de configuration OLCUT. Cela permet à un utilisateur de définir un entraîneur dans un fichier XML ou JSON et de créer des modèles de manière répétée. Des exemples de configurations pour chacun des formateurs fournis peuvent être trouvés dans le dossier de configuration de chaque package. Ces fichiers de configuration peuvent également être écrits en json ou edn en utilisant la dépendance de configuration OLCUT appropriée. Les modèles et les ensembles de données sont sérialisables à l'aide de la sérialisation Java.
Tous les modèles et évaluations incluent un objet de provenance sérialisable qui enregistre l'heure de création du modèle ou de l'évaluation, l'identité des données et toutes les transformations qui leur sont appliquées, ainsi que les hyperparamètres du formateur. Dans le cas des évaluations, ces informations sur la provenance incluent également le modèle spécifique utilisé. Les informations de provenance peuvent être extraites au format JSON ou sérialisées directement à l'aide de la sérialisation Java. Pour les déploiements en production, les informations de provenance peuvent être rédigées et remplacées par un hachage pour permettre le suivi du modèle via un système externe. De nombreux modèles Tribuo peuvent être exportés au format ONNX pour un déploiement dans d'autres langages, plateformes ou services cloud.
Tribuo fonctionne sur Java 8+ et nous testons sur les versions LTS de Java ainsi que sur la dernière version. Tribuo lui-même est une bibliothèque Java pure et est pris en charge sur toutes les plates-formes Java ; cependant, certaines de nos interfaces nécessitent du code natif et ne sont donc prises en charge que là où il existe un support de bibliothèque native. Nous testons sur des architectures x86_64 sous Windows 10, macOS et Linux (RHEL/OL/CentOS 7+), car ce sont des plateformes supportées pour les bibliothèques natives avec lesquelles nous interagissons. Si vous êtes intéressé par une autre plateforme et souhaitez utiliser l'une des interfaces de bibliothèque natives (ONNX Runtime, TensorFlow et XGBoost), nous vous recommandons de contacter les développeurs de ces bibliothèques. Notez que les packages de carte modèle et de reproductibilité nécessitent Java 17 et, en tant que tels, ne font pas partie du déploiement tribuo-all
Maven Central.
Des cahiers de didacticiels, comprenant des exemples de classification, de clustering, de régression, de détection d'anomalies, de TensorFlow, de classification de documents, de chargement de données en colonnes, d'utilisation de modèles formés en externe et du système de configuration, peuvent être trouvés dans les didacticiels. Ceux-ci utilisent le noyau du notebook IJava Jupyter et fonctionnent avec Java 10+, à l'exception des didacticiels de carte de modèle et de reproductibilité qui nécessitent Java 17. Pour reconvertir le code des didacticiels en Java 8, dans la plupart des cas, remplacez simplement le mot-clé var
par les types appropriés. .
Tribuo comprend des implémentations de plusieurs algorithmes adaptés à un large éventail de tâches de prédiction :
Algorithme | Mise en œuvre | Remarques |
---|---|---|
Ensachage | Tribu | Peut utiliser n'importe quel entraîneur Tribuo comme apprenant de base |
Forêt aléatoire | Tribu | Pour la classification et la régression |
Arbres supplémentaires | Tribu | Pour la classification et la régression |
K-NN | Tribu | Inclut des options pour plusieurs backends parallèles, ainsi qu'un backend à thread unique |
Réseaux de neurones | TensorFlow | Entraînez un réseau de neurones dans TensorFlow via le wrapper Tribuo. Les modèles peuvent être déployés à l'aide de l'interface ONNX ou de l'interface TF |
Les ensembles et K-NN utilisent une fonction de combinaison pour produire leur sortie. Ces combinateurs sont spécifiques à une tâche de prédiction, mais les implémentations d'ensemble et K-NN sont indépendantes de la tâche. Nous fournissons des combinateurs de vote et de moyenne pour les tâches de classification multi-classes, de classification multi-étiquettes et de régression.
Tribuo a des implémentations ou des interfaces pour :
Algorithme | Mise en œuvre | Remarques |
---|---|---|
Modèles linéaires | Tribu | Utilise SGD et autorise n'importe quel optimiseur de dégradé |
Machines de factorisation | Tribu | Utilise SGD et autorise n'importe quel optimiseur de dégradé |
PANIER | Tribu | |
SVM-SGD | Tribu | Une implémentation de l'algorithme Pegasos |
Adaboost.SAMME | Tribu | Peut utiliser n'importe quel entraîneur de classification Tribuo comme apprenant de base |
Bayes naïfs multinomiaux | Tribu | |
Modèles linéaires régularisés | LibLinéaire | |
SVM | LibSVM ou LibLinear | LibLinear ne prend en charge que les SVM linéaires |
Arbres de décision améliorés par gradient | XGBoost |
Tribuo fournit également un CRF à chaîne linéaire pour les tâches de classification de séquences. Ce CRF est formé via SGD à l'aide de l'un des optimiseurs de gradient de Tribuo.
Tribuo dispose d'un ensemble d'algorithmes de sélection de caractéristiques théoriques de l'information qui peuvent être appliqués aux tâches de classification. Les entrées de fonctionnalités sont automatiquement discrétisées dans des compartiments de largeur égale. À l'heure actuelle, cela inclut les implémentations de maximisation des informations mutuelles (MIM), de maximisation des informations mutuelles conditionnelles (CMIM), de pertinence maximale de redondance minimale (mRMR) et d'informations mutuelles conjointes (JMI).
Pour expliquer les prédictions du classificateur, il existe une implémentation de l'algorithme LIME. L'implémentation de Tribuo permet le mélange de données textuelles et tabulaires, ainsi que l'utilisation de n'importe quel modèle clairsemé comme explicatif (par exemple, arbres de régression, lasso, etc.), mais elle ne prend pas en charge les images.
Les algorithmes de régression de Tribuo sont multidimensionnels par défaut. Les implémentations unidimensionnelles sont encapsulées afin de produire une sortie multidimensionnelle.
Algorithme | Mise en œuvre | Remarques |
---|---|---|
Modèles linéaires | Tribu | Utilise SGD et autorise n'importe quel optimiseur de dégradé |
Machines de factorisation | Tribu | Utilise SGD et autorise n'importe quel optimiseur de dégradé |
PANIER | Tribu | |
Lasso | Tribu | Utilisation de l'algorithme LARS |
Filet élastique | Tribu | Utilisation de l'algorithme de descente de coordonnées |
Modèles linéaires régularisés | LibLinéaire | |
SVM | LibSVM ou LibLinear | LibLinear ne prend en charge que les SVM linéaires |
Arbres de décision améliorés par gradient | XGBoost |
Tribuo inclut une infrastructure pour le clustering et fournit également deux implémentations d'algorithmes de clustering. Nous prévoyons de mettre en œuvre des algorithmes supplémentaires au fil du temps.
Algorithme | Mise en œuvre | Remarques |
---|---|---|
HDBSCAN* | Tribu | Un algorithme basé sur la densité qui découvre les clusters et les valeurs aberrantes |
K-Moyennes | Tribu | Inclut des backends séquentiels et parallèles, ainsi que l'algorithme d'initialisation K-Means++ |
Tribuo propose une infrastructure pour les tâches de détection d'anomalies. Nous prévoyons d'ajouter de nouvelles implémentations au fil du temps.
Algorithme | Mise en œuvre | Remarques |
---|---|---|
SVM à une classe | LibSVM | |
SVM linéaire à une classe | LibLinéaire |
Tribuo propose une infrastructure pour la classification multi-étiquettes, ainsi qu'un wrapper qui convertit n'importe lequel des algorithmes de classification multi-classes de Tribuo en un algorithme de classification multi-étiquettes. Nous prévoyons d'ajouter davantage d'implémentations spécifiques à plusieurs étiquettes au fil du temps.
Algorithme | Mise en œuvre | Remarques |
---|---|---|
Enveloppeuse indépendante | Tribu | Convertit un algorithme de classification multi-classes en un algorithme multi-étiquettes en produisant un classificateur distinct pour chaque étiquette |
Chaînes de classificateur | Tribu | Fournit des chaînes de classificateurs et des ensembles de chaînes de classificateurs aléatoires utilisant l'un des algorithmes de classification multi-classes de Tribuo |
Modèles linéaires | Tribu | Utilise SGD et autorise n'importe quel optimiseur de dégradé |
Machines de factorisation | Tribu | Utilise SGD et autorise n'importe quel optimiseur de dégradé |
En plus de nos propres implémentations d'algorithmes de Machine Learning, Tribuo fournit également une interface commune aux outils ML populaires sur la JVM. Si vous souhaitez contribuer à une nouvelle interface, ouvrez un problème GitHub et nous pourrons discuter de la façon dont elle s'intégrerait dans Tribuo.
Actuellement, nous disposons d'interfaces pour :
Les binaires sont disponibles sur Maven Central, en utilisant groupId org.tribuo
. Pour extraire tous les composants compatibles Java 8 de Tribuo, y compris les liaisons pour TensorFlow, ONNX Runtime et XGBoost (qui sont des bibliothèques natives), utilisez :
Maven :
< dependency >
< groupId >org.tribuo</ groupId >
< artifactId >tribuo-all</ artifactId >
< version >4.3.1</ version >
< type >pom</ type >
</ dependency >
ou de 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)
}
La dépendance tribuo-all
est un pom qui dépend de tous les sous-projets Tribuo à l'exception des projets de carte modèle et de reproductibilité qui nécessitent Java 17.
La plupart de Tribuo est purement Java et donc multiplateforme, cependant certaines interfaces sont liées à des bibliothèques qui utilisent du code natif. Ces interfaces (TensorFlow, ONNX Runtime et XGBoost) ne fonctionnent que sur les plates-formes prises en charge pour les binaires publiés respectifs, et Tribuo n'a aucun contrôle sur les binaires fournis. Si vous avez besoin d'assistance pour une plate-forme spécifique, contactez les responsables de ces projets. Depuis la version 4.1, ces packages natifs fournissent tous des binaires x86_64 pour Windows, macOS et Linux. Il est également possible de compiler chaque package pour macOS ARM64 (c'est-à-dire Apple Silicon), bien qu'aucun binaire ne soit disponible sur Maven Central pour cette plate-forme pour TensorFlow ou XGBoost. Depuis la version 4.3, Tribuo dépend désormais d'une version d'ONNX Runtime qui inclut la prise en charge des plates-formes macOS ARM64 et Linux aarch64. Lors du développement sur une plate-forme ARM, vous pouvez sélectionner le profil arm
dans pom.xml
de Tribuo pour désactiver les tests de la bibliothèque native.
Des pots individuels sont publiés pour chaque module Tribuo. Il est préférable de dépendre uniquement des modules nécessaires au projet spécifique. Cela empêche votre code d'extraire inutilement de grandes dépendances comme TensorFlow.
Tribuo utilise Apache Maven v3.5 ou supérieur pour construire. Tribuo est compatible avec Java 8+ et nous testons sur les versions LTS de Java ainsi que sur la dernière version. Pour construire, exécutez simplement mvn clean package
. Toutes les dépendances de Tribuo devraient être disponibles sur Maven Central. Veuillez signaler un problème pour les problèmes liés à la construction si vous rencontrez des problèmes (mais vérifiez d'abord s'il vous manque des paramètres de proxy pour Maven, car c'est une cause fréquente d'échecs de construction et hors de notre contrôle). Notez que si vous construisez en utilisant Java 16 ou une version antérieure, les packages de carte de modèle et de reproductibilité seront désactivés.
Le développement s'effectue sur la branche main
, qui porte le numéro de version de la prochaine version de Tribuo avec "-SNAPSHOT" ajouté. Les versions majeures et mineures de Tribuo seront étiquetées sur la branche main
, puis auront une branche nommée vA.BX-release-branch
(pour la version vA.B.0
) dérivée de la validation de version étiquetée pour toutes les versions ponctuelles (c'est-à-dire vA.B.1
, vA.B.2
, etc.) suite à cette version majeure/mineure. Ces versions ponctuelles sont étiquetées sur la branche de version spécifique, par exemple, v4.0.2
est étiquetée sur la v4.0.X-release-branch
.
Nous apprécions les contributions ! Consultez nos directives de contribution.
Nous avons une liste de diffusion de discussion [email protected], archivée ici. Nous étudions différentes options pour le chat en temps réel, revenez plus tard. Pour les rapports de bugs, les demandes de fonctionnalités ou d'autres problèmes, veuillez déposer un problème Github.
Veuillez consulter le guide de sécurité pour connaître notre processus responsable de divulgation des vulnérabilités de sécurité.
Tribuo est sous licence Apache 2.0.