Tribuo ist eine Bibliothek für maschinelles Lernen in Java, die Klassifizierung, Regression, Clustering, Anomalieerkennung und Klassifizierung mehrerer Etiketten in mehreren Klassen bietet. Tribuo bietet Implementierungen beliebter ML-Algorithmen und umschließt auch andere Bibliotheken, um eine einheitliche Schnittstelle bereitzustellen. Tribuo enthält den gesamten Code, der zum Laden, Featureisieren und Transformieren von Daten erforderlich ist. Darüber hinaus sind die Auswertungsklassen für alle unterstützten Vorhersagetypen enthalten. Die Entwicklung wird von der Machine Learning Research Group von Oracle Labs geleitet; Wir freuen uns über Beiträge der Community.
Alle Trainer sind mit dem OLCUT-Konfigurationssystem konfigurierbar. Dadurch kann ein Benutzer einen Trainer in einer XML- oder JSON-Datei definieren und wiederholt Modelle erstellen. Beispielkonfigurationen für jeden der mitgelieferten Trainer finden Sie im Konfigurationsordner jedes Pakets. Diese Konfigurationsdateien können auch in json oder edn geschrieben werden, indem die entsprechende OLCUT-Konfigurationsabhängigkeit verwendet wird. Modelle und Datensätze sind mithilfe der Java-Serialisierung serialisierbar.
Alle Modelle und Bewertungen umfassen ein serialisierbares Herkunftsobjekt, das den Erstellungszeitpunkt des Modells oder der Bewertung, die Identität der Daten und aller darauf angewendeten Transformationen sowie die Hyperparameter des Trainers aufzeichnet. Bei Auswertungen umfassen diese Provenienzangaben auch das konkret verwendete Modell. Herkunftsinformationen können als JSON extrahiert oder direkt mithilfe der Java-Serialisierung serialisiert werden. Für Produktionsbereitstellungen können Herkunftsinformationen geschwärzt und durch einen Hash ersetzt werden, um die Modellverfolgung über ein externes System zu ermöglichen. Viele Tribuo-Modelle können im ONNX-Format exportiert werden, um sie in anderen Sprachen, Plattformen oder Cloud-Diensten bereitzustellen.
Tribuo läuft auf Java 8+ und wir testen auf LTS-Versionen von Java zusammen mit der neuesten Version. Tribuo selbst ist eine reine Java-Bibliothek und wird auf allen Java-Plattformen unterstützt; Einige unserer Schnittstellen erfordern jedoch nativen Code und werden daher nur dort unterstützt, wo native Bibliotheksunterstützung vorhanden ist. Wir testen auf x86_64-Architekturen unter Windows 10, macOS und Linux (RHEL/OL/CentOS 7+), da dies unterstützte Plattformen für die nativen Bibliotheken sind, mit denen wir kommunizieren. Wenn Sie an einer anderen Plattform interessiert sind und eine der nativen Bibliotheksschnittstellen (ONNX Runtime, TensorFlow und XGBoost) verwenden möchten, empfehlen wir Ihnen, sich an die Entwickler dieser Bibliotheken zu wenden. Beachten Sie, dass die Modellkarten- und Reproduzierbarkeitspakete Java 17 erfordern und daher nicht Teil der tribuo-all
Maven Central-Bereitstellung sind.
In den Tutorials finden Sie Tutorial-Notizbücher, darunter Beispiele für Klassifizierung, Clustering, Regression, Anomalieerkennung, TensorFlow, Dokumentklassifizierung, Laden von Spaltendaten, Arbeiten mit extern trainierten Modellen und das Konfigurationssystem. Diese verwenden den IJava Jupyter Notebook-Kernel und funktionieren mit Java 10+, mit Ausnahme der Modellkarten- und Reproduzierbarkeits-Tutorials, die Java 17 erfordern. Um den Code der Tutorials zurück in Java 8 zu konvertieren, ersetzen Sie in den meisten Fällen einfach das Schlüsselwort var
durch die entsprechenden Typen .
Tribuo umfasst Implementierungen mehrerer Algorithmen, die für eine Vielzahl von Vorhersageaufgaben geeignet sind:
Algorithmus | Durchführung | Notizen |
---|---|---|
Absacken | Tribuo | Als Basislerner kann jeder Tribuo-Trainer verwendet werden |
Zufälliger Wald | Tribuo | Sowohl für die Klassifizierung als auch für die Regression |
Zusätzliche Bäume | Tribuo | Sowohl für die Klassifizierung als auch für die Regression |
K-NN | Tribuo | Enthält Optionen für mehrere parallele Backends sowie ein einzelnes Thread-Backend |
Neuronale Netze | TensorFlow | Trainieren Sie ein neuronales Netzwerk in TensorFlow über den Tribuo-Wrapper. Modelle können über die ONNX-Schnittstelle oder die TF-Schnittstelle bereitgestellt werden |
Die Ensembles und K-NN verwenden eine Kombinationsfunktion, um ihre Ausgabe zu erzeugen. Diese Kombinierer sind vorhersageaufgabenspezifisch, aber die Ensemble- und K-NN-Implementierungen sind aufgabenunabhängig. Wir bieten Abstimmungs- und Mittelungskombinierer für Mehrklassenklassifizierung, Mehrfachetikettenklassifizierung und Regressionsaufgaben.
Tribuo verfügt über Implementierungen oder Schnittstellen für:
Algorithmus | Durchführung | Notizen |
---|---|---|
Lineare Modelle | Tribuo | Verwendet SGD und ermöglicht jeden Gradientenoptimierer |
Faktorisierungsmaschinen | Tribuo | Verwendet SGD und ermöglicht jeden Gradientenoptimierer |
WARENKORB | Tribuo | |
SVM-SGD | Tribuo | Eine Implementierung des Pegasos-Algorithmus |
Adaboost.SAMME | Tribuo | Als Basislerner kann jeder Tribuo-Klassifizierungstrainer verwendet werden |
Multinomiale Naive Bayes | Tribuo | |
Regularisierte lineare Modelle | LibLinear | |
SVM | LibSVM oder LibLinear | LibLinear unterstützt nur lineare SVMs |
Gradientenverstärkte Entscheidungsbäume | XGBoost |
Tribuo bietet auch ein lineares Ketten-CRF für Sequenzklassifizierungsaufgaben. Dieses CRF wird über SGD mit einem der Gradientenoptimierer von Tribuo trainiert.
Tribuo verfügt über eine Reihe informationstheoretischer Algorithmen zur Merkmalsauswahl, die auf Klassifizierungsaufgaben angewendet werden können. Feature-Eingaben werden automatisch in Bins gleicher Breite diskretisiert. Derzeit umfasst dies Implementierungen von Mutual Information Maximization (MIM), Conditional Mutual Information Maximization (CMIM), Minimum Redundancy Maximum Relevancy (mRMR) und Joint Mutual Information (JMI).
Um Klassifikatorvorhersagen zu erklären, gibt es eine Implementierung des LIME-Algorithmus. Die Implementierung von Tribuo ermöglicht das Mischen von Text- und Tabellendaten sowie die Verwendung eines beliebigen spärlichen Modells als Erklärung (z. B. Regressionsbäume, Lasso usw.), unterstützt jedoch keine Bilder.
Die Regressionsalgorithmen von Tribuo sind standardmäßig mehrdimensional. Eindimensionale Implementierungen werden umschlossen, um eine mehrdimensionale Ausgabe zu erzeugen.
Algorithmus | Durchführung | Notizen |
---|---|---|
Lineare Modelle | Tribuo | Verwendet SGD und ermöglicht jeden Gradientenoptimierer |
Faktorisierungsmaschinen | Tribuo | Verwendet SGD und ermöglicht jeden Gradientenoptimierer |
WARENKORB | Tribuo | |
Lasso | Tribuo | Verwendung des LARS-Algorithmus |
Elastisches Netz | Tribuo | Verwendung des Koordinatenabstiegsalgorithmus |
Regularisierte lineare Modelle | LibLinear | |
SVM | LibSVM oder LibLinear | LibLinear unterstützt nur lineare SVMs |
Gradientenverstärkte Entscheidungsbäume | XGBoost |
Tribuo umfasst eine Infrastruktur für Clustering und stellt außerdem zwei Implementierungen von Clustering-Algorithmen bereit. Wir gehen davon aus, dass wir im Laufe der Zeit weitere Algorithmen implementieren werden.
Algorithmus | Durchführung | Notizen |
---|---|---|
HDBSCAN* | Tribuo | Ein dichtebasierter Algorithmus, der Cluster und Ausreißer erkennt |
K-Mittel | Tribuo | Enthält sowohl sequentielle als auch parallele Backends und den K-Means++-Initialisierungsalgorithmus |
Tribuo bietet Infrastruktur für Anomalieerkennungsaufgaben. Wir gehen davon aus, dass im Laufe der Zeit neue Implementierungen hinzugefügt werden.
Algorithmus | Durchführung | Notizen |
---|---|---|
SVM einer Klasse | LibSVM | |
Lineare SVM einer Klasse | LibLinear |
Tribuo bietet eine Infrastruktur für die Multi-Label-Klassifizierung sowie einen Wrapper, der jeden der Multi-Class-Klassifizierungsalgorithmen von Tribuo in einen Multi-Label-Klassifizierungsalgorithmus umwandelt. Wir gehen davon aus, dass wir im Laufe der Zeit weitere Multi-Label-spezifische Implementierungen hinzufügen werden.
Algorithmus | Durchführung | Notizen |
---|---|---|
Unabhängiger Wrapper | Tribuo | Konvertiert einen Klassifizierungsalgorithmus mit mehreren Klassen in einen mit mehreren Etiketten, indem für jedes Etikett ein separater Klassifikator erstellt wird |
Klassifikatorketten | Tribuo | Bietet Klassifikatorketten und randomisierte Klassifikatorketten-Ensembles unter Verwendung eines der Mehrklassen-Klassifizierungsalgorithmen von Tribuo |
Lineare Modelle | Tribuo | Verwendet SGD und ermöglicht jeden Gradientenoptimierer |
Faktorisierungsmaschinen | Tribuo | Verwendet SGD und ermöglicht jeden Gradientenoptimierer |
Zusätzlich zu unseren eigenen Implementierungen von Machine-Learning-Algorithmen bietet Tribuo auch eine gemeinsame Schnittstelle zu beliebten ML-Tools auf der JVM. Wenn Sie daran interessiert sind, eine neue Schnittstelle beizusteuern, öffnen Sie ein GitHub-Problem, und wir können besprechen, wie es in Tribuo passen würde.
Derzeit verfügen wir über Schnittstellen zu:
Binärdateien sind auf Maven Central unter der Gruppen-ID org.tribuo
verfügbar. Um alle Java 8-kompatiblen Komponenten von Tribuo abzurufen, einschließlich der Bindungen für TensorFlow, ONNX Runtime und XGBoost (native Bibliotheken), verwenden Sie:
Maven:
< dependency >
< groupId >org.tribuo</ groupId >
< artifactId >tribuo-all</ artifactId >
< version >4.3.1</ version >
< type >pom</ type >
</ dependency >
oder von 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)
}
Die tribuo-all
-Abhängigkeit ist eine POM, die von allen Tribuo-Unterprojekten abhängt, mit Ausnahme der Modellkarten- und Reproduzierbarkeitsprojekte, die Java 17 erfordern.
Der größte Teil von Tribuo ist reines Java und daher plattformübergreifend, einige der Schnittstellen sind jedoch mit Bibliotheken verknüpft, die nativen Code verwenden. Diese Schnittstellen (TensorFlow, ONNX Runtime und XGBoost) laufen nur auf unterstützten Plattformen für die jeweiligen veröffentlichten Binärdateien, und Tribuo hat keine Kontrolle darüber, welche Binärdateien bereitgestellt werden. Wenn Sie Unterstützung für eine bestimmte Plattform benötigen, wenden Sie sich an die Betreuer dieser Projekte. Ab der Version 4.1 stellen diese nativen Pakete alle x86_64-Binärdateien für Windows, macOS und Linux bereit. Es ist auch möglich, jedes Paket für macOS ARM64 (d. h. Apple Silicon) zu kompilieren, obwohl auf Maven Central für diese Plattform keine Binärdateien für TensorFlow oder XGBoost verfügbar sind. Ab der Version 4.3 ist Tribuo nun auf eine Version von ONNX Runtime angewiesen, die Unterstützung für die Plattformen macOS ARM64 und Linux aarch64 bietet. Wenn Sie auf einer ARM-Plattform entwickeln, können Sie das arm
in pom.xml
von Tribuo auswählen, um die nativen Bibliothekstests zu deaktivieren.
Für jedes Tribuo-Modul werden einzelne Gläser veröffentlicht. Verlassen Sie sich vorzugsweise nur auf die Module, die für das konkrete Projekt notwendig sind. Dies verhindert, dass Ihr Code unnötig große Abhängigkeiten wie TensorFlow einbezieht.
Tribuo verwendet zum Erstellen Apache Maven v3.5 oder höher. Tribuo ist mit Java 8+ kompatibel und wir testen auf LTS-Versionen von Java zusammen mit der neuesten Version. Führen Sie zum Erstellen einfach mvn clean package
aus. Alle Abhängigkeiten von Tribuo sollten auf Maven Central verfügbar sein. Bitte melden Sie ein Problem für Build-bezogene Probleme, wenn Sie Probleme haben (überprüfen Sie jedoch zuerst, ob Ihnen Proxy-Einstellungen für Maven fehlen, da dies eine häufige Ursache für Build-Fehler ist und außerhalb unserer Kontrolle liegt). Beachten Sie, dass die Modellkarten- und Reproduzierbarkeitspakete deaktiviert sind, wenn Sie mit Java 16 oder früher erstellen.
Die Entwicklung erfolgt im main
, an den die Versionsnummer der nächsten Tribuo-Version mit dem Zusatz „-SNAPSHOT“ angehängt ist. Haupt- und Nebenversionen von Tribuo werden im main
markiert und haben dann einen Zweig mit dem Namen vA.BX-release-branch
(für Version vA.B.0
), der vom getaggten Release-Commit für alle Punktversionen (d. h. vA.B.1
abgezweigt wird. vA.B.1
, vA.B.2
usw.), die aus dieser Haupt-/Nebenversion folgen. Diese Punktversionen sind mit dem jeweiligen Release-Zweig markiert, z. B. v4.0.2
ist mit dem Tag v4.0.X-release-branch
gekennzeichnet.
Wir freuen uns über Beiträge! Sehen Sie sich unsere Beitragsrichtlinien an.
Wir haben eine Diskussions-Mailingliste [email protected], die hier archiviert ist. Wir prüfen derzeit verschiedene Optionen für Echtzeit-Chat. Schauen Sie in Zukunft noch einmal vorbei. Für Fehlerberichte, Funktionsanfragen oder andere Probleme reichen Sie bitte ein Github-Problem ein.
Bitte konsultieren Sie den Sicherheitsleitfaden für unseren Prozess zur verantwortungsvollen Offenlegung von Sicherheitslücken.
Tribuo ist unter der Apache 2.0-Lizenz lizenziert.