Tribuo adalah perpustakaan pembelajaran mesin di Java yang menyediakan klasifikasi kelas jamak, regresi, pengelompokan, deteksi anomali, dan klasifikasi multi-label. Tribuo menyediakan implementasi algoritma ML populer dan juga menggabungkan perpustakaan lain untuk menyediakan antarmuka terpadu. Tribuo berisi semua kode yang diperlukan untuk memuat, menampilkan, dan mengubah data. Selain itu, ini mencakup kelas evaluasi untuk semua jenis prediksi yang didukung. Pengembangan dipimpin oleh Kelompok Riset Pembelajaran Mesin Oracle Labs; kami menyambut kontribusi komunitas.
Semua pelatih dapat dikonfigurasi menggunakan sistem konfigurasi OLCUT. Hal ini memungkinkan pengguna untuk menentukan pelatih dalam file xml atau json dan membuat model secara berulang. Contoh konfigurasi untuk masing-masing Trainer yang disediakan dapat ditemukan di folder config setiap paket. File konfigurasi ini juga dapat ditulis dalam json atau edn dengan menggunakan ketergantungan konfigurasi OLCUT yang sesuai. Model dan kumpulan data dapat diserialkan menggunakan serialisasi Java.
Semua model dan evaluasi menyertakan objek asal yang dapat diserialkan yang mencatat waktu pembuatan model atau evaluasi, identitas data dan transformasi apa pun yang diterapkan padanya, serta hyperparameter pelatih. Dalam hal evaluasi, informasi asal ini juga mencakup model spesifik yang digunakan. Informasi asal dapat diekstraksi sebagai JSON, atau diserialkan secara langsung menggunakan serialisasi Java. Untuk penerapan produksi, informasi asal dapat disunting dan diganti dengan hash untuk menyediakan pelacakan model melalui sistem eksternal. Banyak model Tribuo dapat diekspor dalam format ONNX untuk diterapkan dalam bahasa, platform, atau layanan cloud lain.
Tribuo berjalan pada Java 8+, dan kami menguji pada Java versi LTS bersama dengan rilis terbaru. Tribuo sendiri adalah perpustakaan Java murni dan didukung di semua platform Java; namun, beberapa antarmuka kami memerlukan kode asli dan oleh karena itu hanya didukung jika terdapat dukungan perpustakaan asli. Kami menguji arsitektur x86_64 di Windows 10, macOS dan Linux (RHEL/OL/CentOS 7+), karena ini adalah platform yang didukung untuk perpustakaan asli yang kami gunakan sebagai antarmuka. Jika Anda tertarik dengan platform lain dan ingin menggunakan salah satu antarmuka perpustakaan asli (ONNX Runtime, TensorFlow, dan XGBoost), sebaiknya hubungi pengembang perpustakaan tersebut. Perhatikan bahwa kartu model dan paket reproduktifitas memerlukan Java 17, dan karena itu bukan bagian dari penerapan tribuo-all
Maven Central.
Buku catatan tutorial, termasuk contoh Klasifikasi, Pengelompokan, Regresi, Deteksi Anomali, TensorFlow, klasifikasi dokumen, pemuatan data kolom, bekerja dengan model yang dilatih secara eksternal, dan sistem konfigurasi, dapat ditemukan dalam tutorial. Ini menggunakan kernel notebook IJava Jupyter, dan bekerja dengan Java 10+, kecuali kartu model & tutorial reproduktifitas yang memerlukan Java 17. Untuk mengonversi kode tutorial kembali ke Java 8, dalam banyak kasus cukup ganti kata kunci var
dengan tipe yang sesuai .
Tribuo mencakup implementasi beberapa algoritma yang cocok untuk berbagai tugas prediksi:
Algoritma | Pelaksanaan | Catatan |
---|---|---|
Mengantongi | Tribuo | Dapat menggunakan pelatih Tribuo mana pun sebagai pembelajar dasar |
Hutan Acak | Tribuo | Untuk klasifikasi dan regresi |
Pohon Ekstra | Tribuo | Untuk klasifikasi dan regresi |
K-NN | Tribuo | Termasuk opsi untuk beberapa backend paralel, serta satu backend berulir |
Jaringan Syaraf | Aliran Tensor | Latih jaringan neural di TensorFlow melalui wrapper Tribuo. Model dapat diterapkan menggunakan antarmuka ONNX atau antarmuka TF |
Ensembel dan K-NN menggunakan fungsi kombinasi untuk menghasilkan keluarannya. Penggabung ini bersifat khusus untuk tugas prediksi, tetapi implementasi ansambel & K-NN tidak bersifat tugas. Kami menyediakan penggabung pemungutan suara dan rata-rata untuk klasifikasi kelas jamak, klasifikasi multi-label, dan tugas regresi.
Tribuo memiliki implementasi atau antarmuka untuk:
Algoritma | Pelaksanaan | Catatan |
---|---|---|
Model linier | Tribuo | Menggunakan SGD dan mengizinkan pengoptimal gradien apa pun |
Mesin Faktorisasi | Tribuo | Menggunakan SGD dan mengizinkan pengoptimal gradien apa pun |
KERANJANG | Tribuo | |
SVM-SGD | Tribuo | Implementasi dari algoritma Pegasos |
Adaboost.SAMME | Tribuo | Dapat menggunakan pelatih klasifikasi Tribuo mana pun sebagai pembelajar dasar |
Bayes Naif Multinomial | Tribuo | |
Model Linier Teratur | LibLinear | |
SVM | LibSVM atau LibLinear | LibLinear hanya mendukung SVM linier |
Pohon Keputusan yang Ditingkatkan Gradien | XGBoost |
Tribuo juga memasok CRF rantai linier untuk tugas klasifikasi urutan. CRF ini dilatih melalui SGD menggunakan pengoptimal gradien Tribuo mana pun.
Tribuo memiliki seperangkat algoritma pemilihan fitur teoretis informasi yang dapat diterapkan pada tugas klasifikasi. Masukan fitur secara otomatis didiskritisasi ke dalam nampan dengan lebar yang sama. Saat ini hal tersebut mencakup penerapan mutual information maximization (MIM), Conditional Mutual Information Maximization (CMIM), minimum Redundancy Maximum Relevancy (mRMR) dan Joint Mutual Information (JMI).
Untuk menjelaskan prediksi classifier terdapat implementasi algoritma LIME. Implementasi Tribuo memungkinkan pencampuran data teks dan tabel, bersama dengan penggunaan model renggang apa pun sebagai penjelasan (misalnya, pohon regresi, laso, dll), namun tidak mendukung gambar.
Algoritma regresi Tribuo bersifat multidimensi secara default. Implementasi satu dimensi dibungkus untuk menghasilkan keluaran multidimensi.
Algoritma | Pelaksanaan | Catatan |
---|---|---|
Model linier | Tribuo | Menggunakan SGD dan mengizinkan pengoptimal gradien apa pun |
Mesin Faktorisasi | Tribuo | Menggunakan SGD dan mengizinkan pengoptimal gradien apa pun |
KERANJANG | Tribuo | |
Laso | Tribuo | Menggunakan algoritma LARS |
Jaring elastis | Tribuo | Menggunakan algoritma penurunan koordinat |
Model Linier Teratur | LibLinear | |
SVM | LibSVM atau LibLinear | LibLinear hanya mendukung SVM linier |
Pohon Keputusan yang Ditingkatkan Gradien | XGBoost |
Tribuo menyertakan infrastruktur untuk pengelompokan dan juga menyediakan dua implementasi algoritma pengelompokan. Kami berharap dapat menerapkan algoritme tambahan seiring berjalannya waktu.
Algoritma | Pelaksanaan | Catatan |
---|---|---|
HDBSCAN* | Tribuo | Algoritme berbasis kepadatan yang menemukan cluster dan outlier |
K-Berarti | Tribuo | Menyertakan backend sekuensial dan paralel, serta algoritma inisialisasi K-Means++ |
Tribuo menawarkan infrastruktur untuk tugas deteksi anomali. Kami berharap dapat menambahkan implementasi baru seiring berjalannya waktu.
Algoritma | Pelaksanaan | Catatan |
---|---|---|
SVM satu kelas | LibSVM | |
SVM linier satu kelas | LibLinear |
Tribuo menawarkan infrastruktur untuk klasifikasi multi-label, bersama dengan pembungkus yang mengubah algoritma klasifikasi multi-kelas Tribuo menjadi algoritma klasifikasi multi-label. Kami berharap dapat menambahkan lebih banyak penerapan spesifik multi-label seiring berjalannya waktu.
Algoritma | Pelaksanaan | Catatan |
---|---|---|
Pembungkus independen | Tribuo | Mengubah algoritme klasifikasi kelas jamak menjadi algoritme multi-label dengan membuat pengklasifikasi terpisah untuk setiap label |
Rantai Pengklasifikasi | Tribuo | Menyediakan rantai pengklasifikasi dan ansambel rantai pengklasifikasi acak menggunakan algoritma klasifikasi kelas jamak Tribuo |
Model linier | Tribuo | Menggunakan SGD dan mengizinkan pengoptimal gradien apa pun |
Mesin Faktorisasi | Tribuo | Menggunakan SGD dan mengizinkan pengoptimal gradien apa pun |
Selain implementasi algoritme Pembelajaran Mesin kami sendiri, Tribuo juga menyediakan antarmuka umum ke alat ML populer di JVM. Jika Anda tertarik untuk menyumbangkan antarmuka baru, buka Masalah GitHub, dan kita bisa mendiskusikan bagaimana hal itu akan cocok dengan Tribuo.
Saat ini kami memiliki antarmuka untuk:
Biner tersedia di Maven Central, menggunakan groupId org.tribuo
. Untuk menarik semua komponen Tribuo yang kompatibel dengan Java 8, termasuk binding untuk TensorFlow, ONNX Runtime, dan XGBoost (yang merupakan pustaka asli), gunakan:
Pakar:
< dependency >
< groupId >org.tribuo</ groupId >
< artifactId >tribuo-all</ artifactId >
< version >4.3.1</ version >
< type >pom</ type >
</ dependency >
atau dari 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)
}
Ketergantungan tribuo-all
adalah pom yang bergantung pada semua subproyek Tribuo kecuali kartu model dan proyek reproduktifitas yang memerlukan Java 17.
Sebagian besar Tribuo adalah Java murni dan bersifat lintas platform, namun beberapa antarmuka tertaut ke perpustakaan yang menggunakan kode asli. Antarmuka tersebut (TensorFlow, ONNX Runtime, dan XGBoost) hanya berjalan pada platform yang didukung untuk masing-masing biner yang diterbitkan, dan Tribuo tidak memiliki kendali atas biner mana yang disediakan. Jika Anda memerlukan dukungan untuk platform tertentu, hubungi pengelola proyek tersebut. Pada rilis 4.1, semua paket asli ini menyediakan biner x86_64 untuk Windows, macOS, dan Linux. Dimungkinkan juga untuk mengkompilasi setiap paket untuk macOS ARM64 (yaitu, Apple Silicon), meskipun tidak ada biner yang tersedia di Maven Central untuk platform tersebut untuk TensorFlow atau XGBoost. Pada rilis 4.3, Tribuo sekarang bergantung pada versi ONNX Runtime yang mencakup dukungan untuk platform macOS ARM64 dan Linux aarch64. Saat mengembangkan pada platform ARM, Anda dapat memilih profil arm
di pom.xml
Tribuo untuk menonaktifkan pengujian perpustakaan asli.
Masing-masing toples diterbitkan untuk setiap modul Tribuo. Lebih baik jika hanya bergantung pada modul yang diperlukan untuk proyek tertentu. Hal ini mencegah kode Anda menarik dependensi besar seperti TensorFlow secara tidak perlu.
Tribuo menggunakan Apache Maven v3.5 atau lebih tinggi untuk membangun. Tribuo kompatibel dengan Java 8+, dan kami menguji pada Java versi LTS bersama dengan rilis terbaru. Untuk membangun, cukup jalankan mvn clean package
. Semua dependensi Tribuo harus tersedia di Maven Central. Silakan ajukan masalah untuk masalah terkait build jika Anda mengalami masalah (meskipun periksa terlebih dahulu apakah Anda kehilangan pengaturan proxy untuk Maven, karena itu adalah penyebab umum kegagalan build, dan di luar kendali kami). Perhatikan jika Anda membangun menggunakan Java 16 atau versi lebih lama, kartu model dan paket reproduktifitas akan dinonaktifkan.
Pengembangan terjadi di cabang main
, yang memiliki nomor versi rilis Tribuo berikutnya dengan tambahan "-SNAPSHOT". Rilisan mayor dan minor Tribuo akan diberi tag pada cabang main
, dan kemudian memiliki cabang bernama vA.BX-release-branch
(untuk rilis vA.B.0
) yang bercabang dari komit rilis yang diberi tag untuk rilis titik mana pun (yaitu, vA.B.1
, vA.B.2
dll) setelah rilis mayor/minor tersebut. Rilis titik tersebut diberi tag pada cabang rilis tertentu, misalnya v4.0.2
diberi tag pada v4.0.X-release-branch
.
Kami menyambut kontribusi! Lihat pedoman kontribusi kami.
Kami memiliki milis diskusi [email protected], yang diarsipkan di sini. Kami sedang menyelidiki berbagai opsi untuk obrolan waktu nyata, periksa kembali di masa mendatang. Untuk laporan bug, permintaan fitur, atau masalah lainnya, silakan ajukan Masalah Github.
Silakan baca panduan keamanan untuk proses pengungkapan kerentanan keamanan kami yang bertanggung jawab.
Tribuo dilisensikan di bawah Lisensi Apache 2.0.