Tribuo 是 Java 中的機器學習庫,提供多類別分類、迴歸、聚類、異常檢測和多標籤分類。 Tribuo 提供流行的 ML 演算法的實現,並包裝其他庫以提供統一的介面。 Tribuo 包含載入、特徵化和轉換資料所需的所有程式碼。此外,它還包括所有支援的預測類型的評估類別。開發由 Oracle 實驗室的機器學習研究小組領導;我們歡迎社區貢獻。
所有培訓器均可使用 OLCUT 配置系統進行設定。這允許使用者在 xml 或 json 檔案中定義訓練器並可重複建立模型。每個提供的 Trainer 的範例配置可以在每個套件的 config 資料夾中找到。這些設定檔也可以透過使用適當的 OLCUT 配置依賴項以 json 或 edn 形式編寫。模型和資料集可使用 Java 序列化進行序列化。
所有模型和評估都包含一個可序列化的來源對象,該對象記錄模型或評估的創建時間、資料的身份和應用於資料的任何轉換,以及訓練器的超參數。在評估的情況下,此出處資訊也包括所使用的特定模型。出處資訊可以提取為 JSON,或直接使用 Java 序列化進行序列化。對於生產部署,可以對來源資訊進行編輯並用哈希值替換,以透過外部系統提供模型追蹤。許多 Tribuo 模型可以以 ONNX 格式匯出,以便部署在其他語言、平台或雲端服務。
Tribuo 在 Java 8+ 上運行,我們在 Java 的 LTS 版本以及最新版本上進行測試。 Tribuo本身就是純Java函式庫,支援所有Java平台;然而,我們的一些介面需要本機程式碼,因此只有在有本機庫支援的情況下才受支援。我們在 Windows 10、macOS 和 Linux (RHEL/OL/CentOS 7+) 上的 x86_64 架構上進行測試,因為這些是我們與之互動的本機程式庫的支援平台。如果您對其他平台感興趣並希望使用其中一個本機程式庫介面(ONNX Runtime、TensorFlow 和 XGBoost),我們建議您聯絡這些程式庫的開發人員。請注意,模型卡和重現性套件需要 Java 17,因此不是tribuo-all
Maven Central 部署的一部分。
教程筆記本,包括分類、聚類、回歸、異常檢測、TensorFlow、文件分類、列式資料載入、使用外部訓練模型和配置系統的範例,可以在教程中找到。它們使用 IJava Jupyter 筆記本內核,並可與 Java 10+ 配合使用,但模型卡和重現var
教程需要 Java 17。為適當的類型。
Tribuo 包含多種適用於各種預測任務的演算法的實作:
演算法 | 執行 | 筆記 |
---|---|---|
套袋 | 特里布奧 | 可以使用任何 Tribuo 訓練器作為基礎學習器 |
隨機森林 | 特里布奧 | 對於分類和回歸 |
額外的樹 | 特里布奧 | 對於分類和回歸 |
K-NN | 特里布奧 | 包括多個並行後端以及單線程後端的選項 |
神經網路 | TensorFlow | 透過 Tribuo 包裝器在 TensorFlow 中訓練神經網路。可以使用 ONNX 介面或 TF 介面部署模型 |
整合和 K-NN 使用組合函數來產生輸出。這些組合器是特定於預測任務的,但整合和 K-NN 實作與任務無關。我們為多類別分類、多標籤分類和回歸任務提供投票和平均組合器。
Tribuo 具有以下實作或介面:
演算法 | 執行 | 筆記 |
---|---|---|
線性模型 | 特里布奧 | 使用 SGD 並允許任何梯度優化器 |
因式分解機 | 特里布奧 | 使用 SGD 並允許任何梯度優化器 |
大車 | 特里布奧 | |
支援向量機SGD | 特里布奧 | Pegasos 演算法的實現 |
Adaboost.SAMME | 特里布奧 | 可以使用任何 Tribuo 分類訓練器作為基礎學習器 |
多項式樸素貝葉斯 | 特里布奧 | |
正規化線性模型 | 線性庫 | |
支援向量機 | LibSVM 或 LibLinear | LibLinear 僅支援線性 SVM |
梯度提升決策樹 | XGBoost |
Tribuo 也為序列分類任務提供線性鏈 CRF。此 CRF 是使用 Tribuo 的任何梯度優化器透過 SGD 進行訓練的。
Tribuo 有一套資訊理論特徵選擇演算法,可以應用於分類任務。特徵輸入會自動離散到等寬的箱子。目前,這包括互資訊最大化 (MIM)、條件互資訊最大化 (CMIM)、最小冗餘最大相關性 (mRMR) 和聯合互資訊 (JMI) 的實現。
為了解釋分類器預測,有一個 LIME 演算法的實作。 Tribuo 的實作允許混合文字和表格數據,並使用任何稀疏模型作為解釋器(例如回歸樹、套索等),但它不支援圖像。
Tribuo 的迴歸演算法預設是多維的。包裝單維實作是為了產生多維輸出。
演算法 | 執行 | 筆記 |
---|---|---|
線性模型 | 特里布奧 | 使用 SGD 並允許任何梯度優化器 |
因式分解機 | 特里布奧 | 使用 SGD 並允許任何梯度優化器 |
大車 | 特里布奧 | |
套索 | 特里布奧 | 使用 LARS 演算法 |
彈性網 | 特里布奧 | 使用坐標下降演算法 |
正規化線性模型 | 線性庫 | |
支援向量機 | LibSVM 或 LibLinear | LibLinear 僅支援線性 SVM |
梯度提升決策樹 | XGBoost |
Tribuo 包括叢集基礎設施,還提供兩種叢集演算法實作。我們希望隨著時間的推移實現更多的演算法。
演算法 | 執行 | 筆記 |
---|---|---|
HDBSCAN* | 特里布奧 | 一種基於密度的演算法,可發現聚類和異常值 |
K-均值 | 特里布奧 | 包括順序和平行後端,以及 K-Means++ 初始化演算法 |
Tribuo 提供異常偵測任務的基礎設施。我們希望隨著時間的推移添加新的實作。
演算法 | 執行 | 筆記 |
---|---|---|
一類支援向量機 | 庫支援向量機 | |
一類線性 SVM | 線性庫 |
Tribuo 提供多標籤分類的基礎設施,以及將 Tribuo 的任何多類別分類演算法轉換為多標籤分類演算法的包裝器。我們希望隨著時間的推移添加更多的多標籤特定實作。
演算法 | 執行 | 筆記 |
---|---|---|
獨立包裝機 | 特里布奧 | 透過為每個標籤產生一個單獨的分類器,將多類分類演算法轉換為多標籤演算法 |
分類器鏈 | 特里布奧 | 使用 Tribuo 的任何多類分類演算法提供分類器鍊和隨機分類器鏈集成 |
線性模型 | 特里布奧 | 使用 SGD 並允許任何梯度優化器 |
因式分解機 | 特里布奧 | 使用 SGD 並允許任何梯度優化器 |
除了我們自己的機器學習演算法實作之外,Tribuo 還為 JVM 上的流行 ML 工具提供了通用介面。如果您有興趣貢獻新介面,請打開 GitHub 問題,我們可以討論它將如何融入 Tribuo。
目前我們有接口:
二進位檔案可在 Maven Central 上使用 groupId org.tribuo
取得。若要擷取 Tribuo 的所有 Java 8 相容元件,包括 TensorFlow、ONNX Runtime 和 XGBoost(它們是本機程式庫)的綁定,請使用:
行家:
< dependency >
< groupId >org.tribuo</ groupId >
< artifactId >tribuo-all</ artifactId >
< version >4.3.1</ version >
< type >pom</ type >
</ dependency >
或來自 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)
}
tribuo-all
依賴項是一個 pom,它依賴於除需要 Java 17 的模型卡和再現性專案之外的所有 Tribuo 子專案。
大多數 Tribuo 是純 Java 的,因此是跨平台的,但是一些介面連結到使用本機程式碼的程式庫。這些介面(TensorFlow、ONNX Runtime 和 XGBoost)僅在相應已發布二進位檔案的支援平台上運行,Tribuo 無法控制提供哪些二進位檔案。如果您需要特定平台的支持,請聯絡這些項目的維修人員。從 4.1 版本開始,這些本機軟體包都提供適用於 Windows、macOS 和 Linux 的 x86_64 二進位。也可以為 macOS ARM64(即 Apple Silicon)編譯每個包,儘管 Maven Central 上沒有適用於該平台的 TensorFlow 或 XGBoost 二進位。從 4.3 版本開始,Tribuo 現在依賴 ONNX Runtime 版本,其中包括對 macOS ARM64 和 Linux aarch64 平台的支援。在 ARM 平台上進行開發時,您可以在 Tribuo 的pom.xml
中選擇arm
設定檔來停用本機程式庫測試。
每個 Tribuo 模組都會發佈單獨的 jar。最好只依賴特定項目所需的模組。這可以防止您的程式碼不必要地引入 TensorFlow 等大型依賴項。
Tribuo 使用 Apache Maven v3.5 或更高版本來建置。 Tribuo 與 Java 8+ 相容,我們在 Java 的 LTS 版本以及最新版本上進行測試。要構建,只需運行mvn clean package
。所有 Tribuo 的依賴項都應該在 Maven Central 上可用。如果您遇到問題,請針對與建置相關的問題提出問題(不過,請先檢查您是否缺少 Maven 的代理設置,因為這是建置失敗的常見原因,並且超出了我們的控制範圍)。請注意,如果您使用 Java 16 或更早版本進行構建,則模型卡和再現性套件將被停用。
開發發生在main
分支上,該分支具有下一個 Tribuo 版本的版本號,並附加「-SNAPSHOT」。 Tribuo 主要和次要版本將在main
分支上標記,然後有一個名為vA.BX-release-branch
(對於版本vA.B.0
)的分支,從任何點版本(即vA.B.1
、 vA.B.2
等)緊接著該主要/次要版本。這些點版本被標記在特定的版本分支上,例如, v4.0.2
被標記在v4.0.X-release-branch
上。
我們歡迎貢獻!請參閱我們的貢獻指南。
我們有一個討論郵件清單 [email protected],存檔於此處。我們正在研究即時聊天的不同選項,請稍後再回來查看。對於錯誤回報、功能請求或其他問題,請提交 Github 問題。
請參閱安全指南,以了解我們負責任的安全漏洞揭露流程。
Tribuo 根據 Apache 2.0 許可證獲得許可。