Tribuo es una biblioteca de aprendizaje automático en Java que proporciona clasificación de múltiples clases, regresión, agrupamiento, detección de anomalías y clasificación de múltiples etiquetas. Tribuo proporciona implementaciones de algoritmos de aprendizaje automático populares y también incluye otras bibliotecas para proporcionar una interfaz unificada. Tribuo contiene todo el código necesario para cargar, caracterizar y transformar datos. Además, incluye las clases de evaluación para todos los tipos de predicción admitidos. El desarrollo está dirigido por el Grupo de Investigación de Aprendizaje Automático de Oracle Labs; Damos la bienvenida a las contribuciones de la comunidad.
Todos los entrenadores son configurables mediante el sistema de configuración OLCUT. Esto permite al usuario definir un entrenador en un archivo xml o json y construir modelos repetidamente. Se pueden encontrar ejemplos de configuraciones para cada uno de los entrenadores suministrados en la carpeta de configuración de cada paquete. Estos archivos de configuración también se pueden escribir en json o edn utilizando la dependencia de configuración OLCUT adecuada. Los modelos y conjuntos de datos se pueden serializar mediante la serialización de Java.
Todos los modelos y evaluaciones incluyen un objeto de procedencia serializable que registra el tiempo de creación del modelo o evaluación, la identidad de los datos y cualquier transformación aplicada a ellos, así como los hiperparámetros del entrenador. En el caso de evaluaciones, esta información de procedencia también incluye el modelo específico utilizado. La información de procedencia se puede extraer como JSON o serializarse directamente mediante la serialización de Java. Para implementaciones de producción, la información de procedencia se puede redactar y reemplazar con un hash para proporcionar seguimiento del modelo a través de un sistema externo. Muchos modelos de Tribuo se pueden exportar en formato ONNX para implementarlos en otros idiomas, plataformas o servicios en la nube.
Tribuo se ejecuta en Java 8+ y probamos en versiones LTS de Java junto con la última versión. Tribuo en sí es una biblioteca Java pura y es compatible con todas las plataformas Java; sin embargo, algunas de nuestras interfaces requieren código nativo y, por lo tanto, solo se admiten donde existe soporte de biblioteca nativa. Probamos en arquitecturas x86_64 en Windows 10, macOS y Linux (RHEL/OL/CentOS 7+), ya que estas son plataformas compatibles con las bibliotecas nativas con las que interactuamos. Si está interesado en otra plataforma y desea utilizar una de las interfaces de biblioteca nativas (ONNX Runtime, TensorFlow y XGBoost), le recomendamos comunicarse con los desarrolladores de esas bibliotecas. Tenga en cuenta que la tarjeta modelo y los paquetes de reproducibilidad requieren Java 17 y, como tal, no forman parte de la implementación tribuo-all
Maven Central.
En los tutoriales se pueden encontrar cuadernos de tutoriales, que incluyen ejemplos de clasificación, agrupamiento, regresión, detección de anomalías, TensorFlow, clasificación de documentos, carga de datos en columnas, trabajo con modelos entrenados externamente y el sistema de configuración. Estos utilizan el kernel del portátil IJava Jupyter y funcionan con Java 10+, excepto la tarjeta modelo y los tutoriales de reproducibilidad que requieren Java 17. Para convertir el código de los tutoriales nuevamente a Java 8, en la mayoría de los casos simplemente reemplace la palabra clave var
con los tipos apropiados. .
Tribuo incluye implementaciones de varios algoritmos adecuados para una amplia gama de tareas de predicción:
Algoritmo | Implementación | Notas |
---|---|---|
Harpillera | tributo | Puede utilizar cualquier entrenador Tribuo como alumno base. |
Bosque aleatorio | tribuo | Tanto para clasificación como para regresión. |
árboles adicionales | tribuo | Tanto para clasificación como para regresión. |
K-NN | tribuo | Incluye opciones para varios backends paralelos, así como un backend de un solo subproceso |
Redes neuronales | TensorFlow | Entrene una red neuronal en TensorFlow a través del contenedor Tribuo. Los modelos se pueden implementar utilizando la interfaz ONNX o la interfaz TF |
Los conjuntos y K-NN utilizan una función combinada para producir su salida. Estos combinadores son específicos de la tarea de predicción, pero las implementaciones de conjunto y K-NN son independientes de la tarea. Proporcionamos combinadores de votación y promedio para tareas de clasificación de múltiples clases, clasificación de múltiples etiquetas y regresión.
Tribuo dispone de implementaciones o interfaces para:
Algoritmo | Implementación | Notas |
---|---|---|
Modelos lineales | tribuo | Utiliza SGD y permite cualquier optimizador de gradiente. |
Máquinas de factorización | tributo | Utiliza SGD y permite cualquier optimizador de gradiente. |
CARRO | tributo | |
SVM-SGD | tributo | Una implementación del algoritmo Pegasos. |
Adaboost.SAMME | tributo | Puede utilizar cualquier entrenador de clasificación Tribuo como alumno base. |
Bayes ingenuo multinomial | tributo | |
Modelos lineales regularizados | LibLinear | |
SVM | LibSVM o LibLinear | LibLinear solo admite SVM lineales |
Árboles de decisión potenciados por gradiente | XGBoost |
Tribuo también suministra un CRF de cadena lineal para tareas de clasificación de secuencias. Este CRF se entrena mediante SGD utilizando cualquiera de los optimizadores de gradiente de Tribuo.
Tribuo tiene un conjunto de algoritmos de selección de características teóricas de la información que se pueden aplicar a tareas de clasificación. Las entradas de características se discretizan automáticamente en contenedores de igual ancho. Por el momento, esto incluye implementaciones de maximización de información mutua (MIM), maximización de información mutua condicional (CMIM), redundancia mínima, relevancia máxima (mRMR) e información mutua conjunta (JMI).
Para explicar las predicciones del clasificador existe una implementación del algoritmo LIME. La implementación de Tribuo permite la combinación de texto y datos tabulares, junto con el uso de cualquier modelo disperso como explicador (por ejemplo, árboles de regresión, lazo, etc.), sin embargo, no admite imágenes.
Los algoritmos de regresión de Tribuo son multidimensionales por defecto. Las implementaciones unidimensionales se empaquetan para producir resultados multidimensionales.
Algoritmo | Implementación | Notas |
---|---|---|
Modelos lineales | tribuo | Utiliza SGD y permite cualquier optimizador de gradiente. |
Máquinas de factorización | tribuo | Utiliza SGD y permite cualquier optimizador de gradiente. |
CARRO | tributo | |
Lazo | tribuo | Usando el algoritmo LARS |
Red elástica | tribuo | Usando el algoritmo de descenso de coordenadas |
Modelos lineales regularizados | LibLinear | |
SVM | LibSVM o LibLinear | LibLinear solo admite SVM lineales |
Árboles de decisión potenciados por gradiente | XGBoost |
Tribuo incluye infraestructura para agrupación y también proporciona dos implementaciones de algoritmos de agrupación. Esperamos implementar algoritmos adicionales con el tiempo.
Algoritmo | Implementación | Notas |
---|---|---|
HDBSCAN* | tribuo | Un algoritmo basado en densidad que descubre grupos y valores atípicos |
K-medias | tribuo | Incluye backends secuenciales y paralelos, y el algoritmo de inicialización K-Means++. |
Tribuo ofrece infraestructura para tareas de detección de anomalías. Esperamos agregar nuevas implementaciones con el tiempo.
Algoritmo | Implementación | Notas |
---|---|---|
SVM de una clase | LibSVM | |
SVM lineal de una clase | LibLineal |
Tribuo ofrece infraestructura para la clasificación de etiquetas múltiples, junto con un contenedor que convierte cualquiera de los algoritmos de clasificación de clases múltiples de Tribuo en un algoritmo de clasificación de etiquetas múltiples. Esperamos agregar más implementaciones específicas de etiquetas múltiples con el tiempo.
Algoritmo | Implementación | Notas |
---|---|---|
Envoltorio independiente | tribuo | Convierte un algoritmo de clasificación de múltiples clases en uno de múltiples etiquetas produciendo un clasificador separado para cada etiqueta. |
Cadenas clasificadoras | tribuo | Proporciona cadenas de clasificadores y conjuntos de cadenas de clasificadores aleatorios utilizando cualquiera de los algoritmos de clasificación multiclase de Tribuo. |
Modelos lineales | tributo | Utiliza SGD y permite cualquier optimizador de gradiente. |
Máquinas de factorización | tributo | Utiliza SGD y permite cualquier optimizador de gradiente. |
Además de nuestras propias implementaciones de algoritmos de aprendizaje automático, Tribuo también proporciona una interfaz común para herramientas de aprendizaje automático populares en JVM. Si está interesado en contribuir con una nueva interfaz, abra una edición de GitHub y podremos discutir cómo encajaría en Tribuo.
Actualmente contamos con interfaces para:
Los binarios están disponibles en Maven Central, usando groupId org.tribuo
. Para extraer todos los componentes de Tribuo compatibles con Java 8, incluidos los enlaces para TensorFlow, ONNX Runtime y XGBoost (que son bibliotecas nativas), use:
experto:
< dependency >
< groupId >org.tribuo</ groupId >
< artifactId >tribuo-all</ artifactId >
< version >4.3.1</ version >
< type >pom</ type >
</ dependency >
o desde 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 dependencia tribuo-all
es un pom que depende de todos los subproyectos de Tribuo excepto la tarjeta modelo y los proyectos de reproducibilidad que requieren Java 17.
La mayor parte de Tribuo es Java puro y, por tanto, multiplataforma; sin embargo, algunas de las interfaces se vinculan a bibliotecas que utilizan código nativo. Esas interfaces (TensorFlow, ONNX Runtime y XGBoost) solo se ejecutan en plataformas compatibles para los respectivos binarios publicados, y Tribuo no tiene control sobre qué binarios se suministran. Si necesita soporte para una plataforma específica, comuníquese con los mantenedores de esos proyectos. A partir de la versión 4.1, todos estos paquetes nativos proporcionan archivos binarios x86_64 para Windows, macOS y Linux. También es posible compilar cada paquete para macOS ARM64 (es decir, Apple Silicon), aunque no hay archivos binarios disponibles en Maven Central para esa plataforma para TensorFlow o XGBoost. A partir de la versión 4.3, Tribuo ahora depende de una versión de ONNX Runtime que incluye soporte para las plataformas macOS ARM64 y Linux aarch64. Al desarrollar en una plataforma ARM, puede seleccionar el perfil arm
en pom.xml
de Tribuo para deshabilitar las pruebas de la biblioteca nativa.
Se publican frascos individuales para cada módulo de Tribuo. Es preferible depender sólo de los módulos necesarios para el proyecto específico. Esto evita que su código agregue innecesariamente grandes dependencias como TensorFlow.
Tribuo utiliza Apache Maven v3.5 o superior para construir. Tribuo es compatible con Java 8+ y lo probamos en versiones LTS de Java junto con la última versión. Para compilar, simplemente ejecute mvn clean package
. Todas las dependencias de Tribuo deberían estar disponibles en Maven Central. Presente un problema por problemas relacionados con la compilación si tiene problemas (aunque primero verifique si le faltan configuraciones de proxy para Maven, ya que es una causa común de fallas de compilación y está fuera de nuestro control). Tenga en cuenta que si está compilando con Java 16 o una versión anterior, la tarjeta de modelo y los paquetes de reproducibilidad estarán deshabilitados.
El desarrollo ocurre en la rama main
, que tiene el número de versión de la próxima versión de Tribuo con "-SNAPSHOT" adjunto. Las versiones principales y menores de Tribuo se etiquetarán en la rama main
y luego tendrán una rama llamada vA.BX-release-branch
(para la versión vA.B.0
) ramificada desde la confirmación de la versión etiquetada para cualquier versión puntual (es decir, vA.B.1
, vA.B.2
, etc.) a partir de esa versión mayor/menor. Esas versiones puntuales están etiquetadas en la rama de versión específica, por ejemplo, v4.0.2
está etiquetada en v4.0.X-release-branch
.
¡Agradecemos las contribuciones! Consulte nuestras pautas de contribución.
Tenemos una lista de correo de discusión [email protected], archivada aquí. Estamos investigando diferentes opciones para el chat en tiempo real; vuelva a consultarlo en el futuro. Para informes de errores, solicitudes de funciones u otros problemas, presente un problema de Github.
Consulte la guía de seguridad para conocer nuestro proceso de divulgación responsable de vulnerabilidades de seguridad.
Tribuo tiene la licencia Apache 2.0.