[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-oracle--tribuo":3,"tool-oracle--tribuo":61},[4,18,26,36,44,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",160411,2,"2026-04-18T23:33:24",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":32,"last_commit_at":42,"category_tags":43,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",109154,"2026-04-18T11:18:24",[14,15,13],{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":32,"last_commit_at":50,"category_tags":51,"status":17},6121,"gemini-cli","google-gemini\u002Fgemini-cli","gemini-cli 是一款由谷歌推出的开源 AI 命令行工具，它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言，它提供了一条从输入提示词到获取模型响应的最短路径，无需切换窗口即可享受智能辅助。\n\n这款工具主要解决了开发过程中频繁上下文切换的痛点，让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用，还是执行复杂的 Git 操作，gemini-cli 都能通过自然语言指令高效处理。\n\n它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口，具备出色的逻辑推理能力；内置 Google 搜索、文件操作及 Shell 命令执行等实用工具；更独特的是，它支持 MCP（模型上下文协议），允许用户灵活扩展自定义集成，连接如图像生成等外部能力。此外，个人谷歌账号即可享受免费的额度支持，且项目基于 Apache 2.0 协议完全开源，是提升终端工作效率的理想助手。",100752,"2026-04-10T01:20:03",[52,13,15,14],"插件",{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":32,"last_commit_at":59,"category_tags":60,"status":17},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[52,14],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":66,"readme_en":67,"readme_zh":68,"quickstart_zh":69,"use_case_zh":70,"hero_image_url":71,"owner_login":72,"owner_name":73,"owner_avatar_url":74,"owner_bio":75,"owner_company":76,"owner_location":76,"owner_email":77,"owner_twitter":78,"owner_website":79,"owner_url":80,"languages":81,"stars":98,"forks":99,"last_commit_at":100,"license":101,"difficulty_score":32,"env_os":102,"env_gpu":103,"env_ram":104,"env_deps":105,"category_tags":117,"github_topics":118,"view_count":32,"oss_zip_url":76,"oss_zip_packed_at":76,"status":17,"created_at":127,"updated_at":128,"faqs":129,"releases":166},9395,"oracle\u002Ftribuo","tribuo","Tribuo - A Java machine learning library","Tribuo 是一款专为 Java 开发者打造的开源机器学习库，由 Oracle 实验室主导研发。它旨在解决 Java 生态中缺乏统一、高效且功能全面的机器学习工具的痛点，让开发者无需切换语言即可在项目中轻松实现多分类、回归、聚类、异常检测及多标签分类等核心任务。\n\nTribuo 不仅内置了多种主流算法的实现，还巧妙封装了 TensorFlow、XGBoost 等外部库，提供了一致的调用接口。其独特亮点在于强大的可复现性设计：所有模型和评估结果都自带“溯源”信息，详细记录数据变换、超参数及创建时间，确保实验过程透明可控。此外，Tribuo 支持通过 XML 或 JSON 配置文件灵活定义训练流程，并可将模型导出为 ONNX 格式，便于跨平台部署。\n\n这款工具非常适合需要构建高可靠性预测系统的 Java 工程师、企业级应用开发者以及关注模型审计的研究人员。如果你希望在纯 Java 环境中完成从数据加载、特征工程到模型训练与评估的全流程，同时追求生产级的稳定性与可追踪性，Tribuo 将是一个专业且友好的选择。","\u003Cp align=\"center\">\u003Cimg width=\"50%\" alt=\"Tribuo Logo\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Foracle_tribuo_readme_36aa4aaa474a.png\" \u002F>\u003C\u002Fp>\n\n# Tribuo - A Java prediction library (v4.3)\n\n[Tribuo](https:\u002F\u002Ftribuo.org) is a machine learning library in Java that\nprovides multi-class classification, regression, clustering, anomaly detection\nand multi-label classification. Tribuo provides implementations of popular ML\nalgorithms and also wraps other libraries to provide a unified interface.\nTribuo contains all the code necessary to load, featurise and transform data.\nAdditionally, it includes the evaluation classes for all supported prediction\ntypes. Development is led by [Oracle Labs](https:\u002F\u002Flabs.oracle.com)' Machine\nLearning Research Group;  we welcome community contributions.\n\nAll trainers are configurable using the\n[OLCUT](https:\u002F\u002Fgithub.com\u002Foracle\u002Folcut) configuration system. This allows a\nuser to define a trainer in an xml or json file and repeatably build models.\nExample configurations for each of the supplied Trainers can be found in the\nconfig folder of each package. These configuration files can also be written in\njson or edn by using the appropriate OLCUT configuration dependency. Models and\ndatasets are serializable using Java serialization. \n\nAll models and evaluations include a serializable provenance object which\nrecords the creation time of the model or evaluation, the identity of the data\nand any transformations applied to it, as well as the hyperparameters of the\ntrainer. In the case of evaluations, this provenance information also includes\nthe specific model used. Provenance information can be extracted as JSON, or\nserialised directly using Java serialisation. For production deployments,\nprovenance information can be redacted and replaced with a hash to provide\nmodel tracking through an external system.  Many Tribuo models can be exported\nin ONNX format for deployment in other languages, platforms or cloud services.\n\nTribuo runs on Java 8+, and we test on LTS versions of Java along with the\nlatest release.  Tribuo itself is a pure Java library and is supported on all\nJava platforms;  however, some of our interfaces require native code and are\nthus supported only where there is native library support. We test on x86\\_64\narchitectures on Windows 10, macOS and Linux (RHEL\u002FOL\u002FCentOS 7+), as these are\nsupported platforms for the native libraries with which we interface. If you're\ninterested in another platform and wish to use one of the native library\ninterfaces (ONNX Runtime, TensorFlow, and XGBoost), we recommend reaching out\nto the developers of those libraries. Note the model card and reproducibility\npackages require Java 17, and as such are not part of the `tribuo-all` Maven\nCentral deployment.\n\n## Documentation\n\n* [Library Architecture](docs\u002FArchitecture.md)\n* [Package Overview](docs\u002FPackageOverview.md)\n* Javadoc [4.3](https:\u002F\u002Ftribuo.org\u002Flearn\u002F4.3\u002Fjavadoc), [4.2](https:\u002F\u002Ftribuo.org\u002Flearn\u002F4.2\u002Fjavadoc), [4.1](https:\u002F\u002Ftribuo.org\u002Flearn\u002F4.1\u002Fjavadoc\u002F), [4.0](https:\u002F\u002Ftribuo.org\u002Flearn\u002F4.0\u002Fjavadoc\u002F)\n* [Helper Programs](docs\u002FHelperPrograms.md)\n* [Developer Documentation](docs\u002FInternals.md)\n* [Roadmap](docs\u002FRoadmap.md)\n* [Frequently Asked Questions](docs\u002FFAQs.md)\n\n## Tutorials\n\nTutorial notebooks, including examples of Classification, Clustering,\nRegression, Anomaly Detection, TensorFlow, document classification, columnar\ndata loading, working with externally trained models, and the configuration\nsystem, can be found in the [tutorials](tutorials). These use the\n[IJava](https:\u002F\u002Fgithub.com\u002FSpencerPark\u002FIJava) Jupyter notebook kernel, and work\nwith Java 10+, except the model card & reproducibility tutorials which require\nJava 17.  To convert the tutorials' code back to Java 8, in most cases simply\nreplace the `var` keyword with the appropriate types.\n\n## Algorithms\n\n### General predictors\n\nTribuo includes implementations of several algorithms suitable for a wide range \nof prediction tasks:\n\n|Algorithm|Implementation|Notes|\n|---|---|---|\n|Bagging|Tribuo|Can use any Tribuo trainer as the base learner|\n|Random Forest|Tribuo|For both classification and regression|\n|Extra Trees|Tribuo|For both classification and regression|\n|K-NN|Tribuo|Includes options for several parallel backends, as well as a single threaded backend|\n|Neural Networks|TensorFlow|Train a neural network in TensorFlow via the Tribuo wrapper. Models can be deployed using the ONNX interface or the TF interface|\n\nThe ensembles and K-NN use a combination function to produce their output.\nThese combiners are prediction task specific, but the ensemble & K-NN \nimplementations are task agnostic. We provide voting and averaging combiners\nfor multi-class classification, multi-label classification and regression tasks.\n\n### Classification\n\nTribuo has implementations or interfaces for:\n\n|Algorithm|Implementation|Notes|\n|---|---|---|\n|Linear models|Tribuo|Uses SGD and allows any gradient optimizer|\n|Factorization Machines|Tribuo|Uses SGD and allows any gradient optimizer|\n|CART|Tribuo||\n|SVM-SGD|Tribuo|An implementation of the Pegasos algorithm|\n|Adaboost.SAMME|Tribuo|Can use any Tribuo classification trainer as the base learner|\n|Multinomial Naive Bayes|Tribuo||\n|Regularised Linear Models|LibLinear||\n|SVM|LibSVM or LibLinear|LibLinear only supports linear SVMs|\n|Gradient Boosted Decision Trees|XGBoost||\n\nTribuo also supplies a linear chain CRF for sequence classification tasks. This\nCRF is trained via SGD using any of Tribuo's gradient optimizers.\n\nTribuo has a set of information theoretic feature selection algorithms which\ncan be applied to classification tasks. Feature inputs are automatically\ndiscretised into equal width bins. At the moment this includes implementations\nof mutual information maximisation (MIM), Conditional Mutual Information\nMaximisation (CMIM), minimum Redundancy Maximum Relevancy (mRMR) and Joint\nMutual Information (JMI).\n\nTo explain classifier predictions there is an implementation of the LIME\nalgorithm. Tribuo's implementation allows the mixing of text and tabular data,\nalong with the use of any sparse model as an explainer (e.g., regression trees,\nlasso etc.), however it does not support images.\n\n### Regression\n\nTribuo's regression algorithms are multidimensional by default. Single \ndimensional implementations are wrapped in order to produce multidimensional\noutput.\n\n|Algorithm|Implementation|Notes|\n|---|---|---|\n|Linear models|Tribuo|Uses SGD and allows any gradient optimizer|\n|Factorization Machines|Tribuo|Uses SGD and allows any gradient optimizer|\n|CART|Tribuo||\n|Lasso|Tribuo|Using the LARS algorithm|\n|Elastic Net|Tribuo|Using the co-ordinate descent algorithm|\n|Regularised Linear Models|LibLinear||\n|SVM|LibSVM or LibLinear|LibLinear only supports linear SVMs|\n|Gradient Boosted Decision Trees|XGBoost||\n\n### Clustering\n\nTribuo includes infrastructure for clustering and also supplies two \nclustering algorithm implementations. We expect to implement additional\nalgorithms over time.\n\n|Algorithm|Implementation|Notes|\n|---|---|---|\n|HDBSCAN\\*|Tribuo|A density-based algorithm which discovers clusters and outliers|\n|K-Means|Tribuo|Includes both sequential and parallel backends, and the K-Means++ initialisation algorithm|\n\n### Anomaly Detection\n\nTribuo offers infrastructure for anomaly detection tasks. \nWe expect to add new implementations over time.\n\n|Algorithm|Implementation|Notes|\n|---|---|---|\n|One-class SVM|LibSVM||\n|One-class linear SVM|LibLinear||\n\n### Multi-label classification\n\nTribuo offers infrastructure for multi-label classification, along\nwith a wrapper which converts any of Tribuo's multi-class classification\nalgorithms into a multi-label classification algorithm. We expect to add \nmore multi-label specific implementations over time.\n\n|Algorithm|Implementation|Notes|\n|---|---|---|\n|Independent wrapper|Tribuo|Converts a multi-class classification algorithm into a multi-label one by producing a separate classifier for each label|\n|Classifier Chains|Tribuo|Provides classifier chains and randomized classifier chain ensembles using any of Tribuo's multi-class classification algorithms|\n|Linear models|Tribuo|Uses SGD and allows any gradient optimizer|\n|Factorization Machines|Tribuo|Uses SGD and allows any gradient optimizer|\n\n### Interfaces\n\nIn addition to our own implementations of Machine Learning algorithms, Tribuo\nalso provides a common interface to popular ML tools on the JVM. If you're\ninterested in contributing a new interface, open a GitHub Issue, and we can\ndiscuss how it would fit into Tribuo.\n\nCurrently, we have interfaces to:\n\n* [LibLinear](https:\u002F\u002Fgithub.com\u002Fbwaldvogel\u002Fliblinear-java) - via the LibLinear-java port of the original [LibLinear](https:\u002F\u002Fwww.csie.ntu.edu.tw\u002F~cjlin\u002Fliblinear\u002F) (v2.44).\n* [LibSVM](https:\u002F\u002Fwww.csie.ntu.edu.tw\u002F~cjlin\u002Flibsvm\u002F) - using the pure Java transformed version of the C++ implementation (v3.25).\n* [ONNX Runtime](https:\u002F\u002Fonnxruntime.ai) - via the Java API contributed by our group (v1.12.1).\n* [TensorFlow](https:\u002F\u002Ftensorflow.org) - Using [TensorFlow Java](https:\u002F\u002Fgithub.com\u002Ftensorflow\u002Fjava) v0.4.2 (based on TensorFlow v2.7.4). This allows the training and deployment of TensorFlow models entirely in Java.\n* [XGBoost](https:\u002F\u002Fxgboost.ai) - via the built in XGBoost4J API (v1.6.2).\n\n## Binaries\n\nBinaries are available on Maven Central, using groupId `org.tribuo`. To pull\nall the Java 8 compatible components of Tribuo, including the bindings for\nTensorFlow, ONNX Runtime and XGBoost (which are native libraries), use:\n\nMaven:\n```xml\n\u003Cdependency>\n    \u003CgroupId>org.tribuo\u003C\u002FgroupId>\n    \u003CartifactId>tribuo-all\u003C\u002FartifactId>\n    \u003Cversion>4.3.2\u003C\u002Fversion>\n    \u003Ctype>pom\u003C\u002Ftype>\n\u003C\u002Fdependency>\n```\nor from Gradle:\n```groovy\nimplementation (\"org.tribuo:tribuo-all:4.3.2@pom\") {\n    transitive = true \u002F\u002F for build.gradle (i.e., Groovy)\n    \u002F\u002F isTransitive = true \u002F\u002F for build.gradle.kts (i.e., Kotlin)\n}\n```\n\nThe `tribuo-all` dependency is a pom which depends on all the Tribuo\nsubprojects except for the model card and reproducibility projects which\nrequire Java 17.\n\nMost of Tribuo is pure Java and thus cross-platform, however some of the\ninterfaces link to libraries which use native code. Those interfaces\n(TensorFlow, ONNX Runtime and XGBoost) only run on supported platforms for the\nrespective published binaries, and Tribuo has no control over which binaries\nare supplied. If you need support for a specific platform, reach out to the\nmaintainers of those projects. As of the 4.1 release these native packages all\nprovide x86\\_64 binaries for Windows, macOS and Linux. It is also possible to\ncompile each package for macOS ARM64 (i.e., Apple Silicon), though there are no\nbinaries available on Maven Central for that platform for TensorFlow or\nXGBoost. As of the 4.3 release Tribuo now depends on a version of ONNX Runtime\nwhich includes support for macOS ARM64 and Linux aarch64 platforms.  When\ndeveloping on an ARM platform you can select the `arm` profile in Tribuo's\n`pom.xml` to disable the native library tests.\n\nIndividual jars are published for each Tribuo module. It is preferable to\ndepend only on the modules necessary for the specific project. This prevents\nyour code from unnecessarily pulling in large dependencies like TensorFlow.\n\n## Compiling from source\n\nTribuo uses [Apache Maven](https:\u002F\u002Fmaven.apache.org\u002F) v3.5 or higher to build.\nTribuo is compatible with Java 8+, and we test on LTS versions of Java along\nwith the latest release. To build, simply run `mvn clean package`. All Tribuo's\ndependencies should be available on Maven Central. Please file an issue for\nbuild-related issues if you're having trouble (though do check if you're\nmissing proxy settings for Maven first, as that's a common cause of build\nfailures, and out of our control). Note if you're building using Java 16 or\nearlier the model card and reproducibility packages will be disabled.\n\n## Repository Layout\n\nDevelopment happens on the `main` branch, which has the version number of the\nnext Tribuo release with \"-SNAPSHOT\" appended to it. Tribuo major and minor\nreleases will be tagged on the `main` branch, and then have a branch named\n`vA.B.X-release-branch` (for release `vA.B.0`) branched from the tagged release\ncommit for any point releases (i.e., `vA.B.1`, `vA.B.2` etc.) following from\nthat major\u002Fminor release. Those point releases are tagged on the specific\nrelease branch e.g., `v4.0.2` is tagged on the `v4.0.X-release-branch`.\n\n## Contributing\n\nWe welcome contributions! See our [contribution guidelines](.\u002FCONTRIBUTING.md).\n\nWe have a discussion mailing list\n[tribuo-devel@oss.oracle.com](mailto:tribuo-devel@oss.oracle.com), archived\n[here](https:\u002F\u002Foss.oracle.com\u002Fpipermail\u002Ftribuo-devel\u002F). We're investigating\ndifferent options for real time chat, check back in the future. For bug\nreports, feature requests or other issues, please file a [GitHub\nIssue](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fissues).\n\n## Security\n\nPlease consult the [security guide](.\u002FSECURITY.md) for our responsible security vulnerability disclosure process.\n\n## License\n\nTribuo is licensed under the [Apache 2.0 License](.\u002FLICENSE.txt).\n\n## Release Notes:\n\n- [v4.3.2](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fblob\u002Fmain\u002Fdocs\u002Frelease-notes\u002Ftribuo-v4-3-2-release-notes.md) - Small bug fixes, notably to protobuf serialization and trees, bumps dependencies.\n- [v4.3.1](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fblob\u002Fmain\u002Fdocs\u002Frelease-notes\u002Ftribuo-v4-3-1-release-notes.md) - Small bug fixes, notably to CART trees and Example.densify, bumps dependencies to more secure versions.\n- [v4.3.0](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fblob\u002Fmain\u002Fdocs\u002Frelease-notes\u002Ftribuo-v4-3-release-notes.md) - Model card support, feature selection for classification, protobuf serialization format, kd-tree for distance computations, speed improvements for sparse linear models. Version bumps for most dependencies, and various other small fixes and improvements.\n- [v4.2.2](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fblob\u002Fmain\u002Fdocs\u002Frelease-notes\u002Ftribuo-v4-2-2-release-notes.md) - Small bug fixes, bump TF-Java to 0.4.2, jackson to 2.13.4, protobuf-java to 3.19.6, OpenCSV to 5.7.1.\n- [v4.2.1](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fblob\u002Fmain\u002Fdocs\u002Frelease-notes\u002Ftribuo-v4-2-1-release-notes.md) - Bug fixes for KMeans' multithreading, nondeterministic iteration orders affecting ONNX export and K-Means initialization, and upgraded TF-Java to 0.4.1.\n- [v4.2.0](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fblob\u002Fmain\u002Fdocs\u002Frelease-notes\u002Ftribuo-v4-2-release-notes.md) - Added factorization machines, classifier chains, HDBSCAN. Added ONNX export and OCI Data Science integration. Added reproducibility framework. Various other small fixes and improvements, including the regression fixes from v4.1.1. Filled out the remaining javadoc, added 4 new tutorials (onnx export, multi-label classification, reproducibility, hdbscan), expanded existing tutorials.\n- [v4.1.1](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fblob\u002Fmain\u002Fdocs\u002Frelease-notes\u002Ftribuo-v4-1-1-release-notes.md) - Bug fixes for multi-output regression, multi-label evaluation, KMeans & KNN with SecurityManager, and update TF-Java 0.4.0.\n- [v4.1.0](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fblob\u002Fmain\u002Fdocs\u002Frelease-notes\u002Ftribuo-v4-1-release-notes.md) - Added TensorFlow training support, a BERT feature extractor, ExtraTrees, K-Means++, many linear model & CRF performance improvements, new tutorials on TF and document classification. Many bug fixes & documentation improvements.\n- [v4.0.2](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fblob\u002Fmain\u002Fdocs\u002Frelease-notes\u002Ftribuo-v4-0-2-release-notes.md) - Many bug fixes (CSVDataSource, JsonDataSource, RowProcessor, LibSVMTrainer, Evaluations, Regressor serialization). Improved javadoc and documentation. Added two new tutorials (columnar data and external models).\n- [v4.0.1](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fblob\u002Fmain\u002Fdocs\u002Frelease-notes\u002Ftribuo-v4-0-1-release-notes.md) - Bugfix for CSVReader to cope with blank lines, added IDXDataSource to allow loading of native MNIST format data.\n- [v4.0.0](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fblob\u002Fmain\u002Fdocs\u002Frelease-notes\u002Ftribuo-v4-0-release-notes.md) - Initial public release.\n- v3 - Added provenance system, the external model support and onnx integrations.\n- v2 - Expanded beyond a classification system, to support regression, clustering and multi-label classification.\n- v1 - Initial internal release. This release only supported multi-class classification.\n","\u003Cp align=\"center\">\u003Cimg width=\"50%\" alt=\"Tribuo Logo\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Foracle_tribuo_readme_36aa4aaa474a.png\" \u002F>\u003C\u002Fp>\n\n# Tribuo - 一个 Java 预测库（v4.3）\n\n[Tribuo](https:\u002F\u002Ftribuo.org) 是一个基于 Java 的机器学习库，提供了多分类、回归、聚类、异常检测以及多标签分类等功能。Tribuo 不仅实现了多种流行的机器学习算法，还封装了其他库以提供统一的接口。Tribuo 包含加载、特征提取和数据转换所需的所有代码，并且为所有支持的预测类型提供了评估类。该项目由 [Oracle Labs](https:\u002F\u002Flabs.oracle.com) 的机器学习研究团队主导开发，我们欢迎社区贡献。\n\n所有训练器都可以通过 [OLCUT](https:\u002F\u002Fgithub.com\u002Foracle\u002Folcut) 配置系统进行配置。这使得用户能够在一个 XML 或 JSON 文件中定义训练器，并可重复地构建模型。每个包的 config 文件夹中都包含所提供训练器的示例配置文件。这些配置文件也可以使用相应的 OLCUT 配置依赖项以 JSON 或 EDN 格式编写。模型和数据集可以通过 Java 序列化进行序列化。\n\n所有模型和评估都包含一个可序列化的溯源对象，该对象记录了模型或评估的创建时间、数据的身份及其所应用的任何转换，以及训练器的超参数。对于评估而言，此溯源信息还包括所使用的具体模型。溯源信息可以提取为 JSON，或者直接使用 Java 序列化进行序列化。在生产部署中，溯源信息可以被删除并替换为哈希值，以便通过外部系统跟踪模型。许多 Tribuo 模型可以导出为 ONNX 格式，以便在其他语言、平台或云服务中部署。\n\nTribuo 支持 Java 8 及以上版本，并且我们在 Java 的长期支持版本以及最新版本上进行测试。Tribuo 本身是一个纯 Java 库，支持所有 Java 平台；然而，我们的一些接口需要本地代码，因此仅在有本地库支持的情况下才受支持。我们主要在 Windows 10、macOS 和 Linux（RHEL\u002FOL\u002FCentOS 7+）的 x86_64 架构上进行测试，因为这些是与我们交互的本地库所支持的平台。如果您对其他平台感兴趣，并希望使用本地库接口（ONNX Runtime、TensorFlow 和 XGBoost），我们建议您联系这些库的开发者。请注意，模型卡片和可复现性包需要 Java 17，因此它们并不包含在 `tribuo-all` Maven Central 发布中。\n\n## 文档\n\n* [库架构](docs\u002FArchitecture.md)\n* [包概览](docs\u002FPackageOverview.md)\n* Javadoc [4.3](https:\u002F\u002Ftribuo.org\u002Flearn\u002F4.3\u002Fjavadoc)、[4.2](https:\u002F\u002Ftribuo.org\u002Flearn\u002F4.2\u002Fjavadoc)、[4.1](https:\u002F\u002Ftribuo.org\u002Flearn\u002F4.1\u002Fjavadoc\u002F)、[4.0](https:\u002F\u002Ftribuo.org\u002Flearn\u002F4.0\u002Fjavadoc\u002F)\n* [辅助程序](docs\u002FHelperPrograms.md)\n* [开发者文档](docs\u002FInternals.md)\n* [路线图](docs\u002FRoadmap.md)\n* [常见问题解答](docs\u002FFAQs.md)\n\n## 教程\n\n教程笔记本包括分类、聚类、回归、异常检测、TensorFlow、文档分类、列式数据加载、使用外部训练模型以及配置系统的示例，可以在 [tutorials](tutorials) 中找到。这些教程使用 [IJava](https:\u002F\u002Fgithub.com\u002FSpencerPark\u002FIJava) Jupyter 笔记本内核，并支持 Java 10 及以上版本，但模型卡片和可复现性教程需要 Java 17。要将教程中的代码转换回 Java 8，在大多数情况下只需将 `var` 关键字替换为相应类型即可。\n\n## 算法\n\n### 通用预测器\n\nTribuo 包含多个适用于广泛预测任务的算法实现：\n\n|算法|实现|备注|\n|---|---|---|\n|Bagging|Tribuo|可使用任何 Tribuo 训练器作为基学习器|\n|随机森林|Tribuo|适用于分类和回归任务|\n|Extra Trees|Tribuo|适用于分类和回归任务|\n|K-NN|Tribuo|包含多种并行后端选项，以及单线程后端|\n|神经网络|TensorFlow|通过 Tribuo 封装器在 TensorFlow 中训练神经网络。模型可以使用 ONNX 接口或 TF 接口进行部署|\n\n集成方法和 K-NN 使用组合函数来生成其输出。这些组合器针对特定的预测任务，但集成方法和 K-NN 的实现则与任务无关。我们为多分类、多标签分类和回归任务提供了投票和平均组合器。\n\n### 分类\n\nTribuo 提供以下算法的实现或接口：\n\n|算法|实现|备注|\n|---|---|---|\n|线性模型|Tribuo|使用 SGD，并允许使用任何梯度优化器|\n|因子分解机|Tribuo|使用 SGD，并允许使用任何梯度优化器|\n|CART|Tribuo||\n|SVM-SGD|Tribuo|Pegasos 算法的实现|\n|Adaboost.SAMME|Tribuo|可使用任何 Tribuo 分类训练器作为基学习器|\n|多项式朴素贝叶斯|Tribuo||\n|正则化线性模型|LibLinear||\n|SVM|LibSVM 或 LibLinear|LibLinear 仅支持线性 SVM|\n|梯度提升决策树|XGBoost||\n\nTribuo 还提供用于序列分类任务的线性链 CRF。该 CRF 使用 Tribuo 的任意梯度优化器通过 SGD 进行训练。\n\nTribuo 拥有一组信息论特征选择算法，可用于分类任务。特征输入会自动离散化为等宽区间。目前包括互信息最大化 (MIM)、条件互信息最大化 (CMIM)、最小冗余最大相关性 (mRMR) 和联合互信息 (JMI) 的实现。\n\n为了解释分类器的预测结果，Tribuo 实现了 LIME 算法。该实现允许混合文本和表格数据，并可使用任何稀疏模型作为解释器（例如回归树、Lasso 等），但不支持图像。\n\n### 回归\n\nTribuo 的回归算法默认是多维的。一维实现会被封装以产生多维输出。\n\n|算法|实现|备注|\n|---|---|---|\n|线性模型|Tribuo|使用 SGD，并允许使用任何梯度优化器|\n|因子分解机|Tribuo|使用 SGD，并允许使用任何梯度优化器|\n|CART|Tribuo||\n|Lasso|Tribuo|使用 LARS 算法|\n|弹性网|Tribuo|使用坐标下降算法|\n|正则化线性模型|LibLinear||\n|SVM|LibSVM 或 LibLinear|LibLinear 仅支持线性 SVM|\n|梯度提升决策树|XGBoost||\n\n### 聚类\n\nTribuo 提供了聚类的基础设施，并内置了两种聚类算法实现。我们计划在未来逐步增加更多算法。\n\n|算法|实现|备注|\n|---|---|---|\n|HDBSCAN\\*|Tribuo|一种基于密度的算法，用于发现聚类和异常点|\n|K-Means|Tribuo|包含顺序和并行后端，以及 K-Means++ 初始化算法|\n\n### 异常检测\n\nTribuo 提供了异常检测任务的基础设施。我们计划在未来添加新的实现。\n\n|算法|实现|备注|\n|---|---|---|\n|一类支持向量机|LibSVM||\n|一类线性支持向量机|LibLinear||\n\n### 多标签分类\n\nTribuo 提供了多标签分类的基础设施，并附带一个包装器，可以将 Tribuo 的任何多分类算法转换为多标签分类算法。我们预计未来会增加更多专门针对多标签分类的实现。\n\n|算法|实现|备注|\n|---|---|---|\n|独立包装器|Tribuo|通过为每个标签单独训练一个分类器，将多分类算法转换为多标签分类算法|\n|分类器链|Tribuo|利用 Tribuo 的任意多分类算法构建分类器链及随机化分类器链集成|\n|线性模型|Tribuo|使用随机梯度下降法，并支持任意梯度优化器|\n|因子分解机|Tribuo|使用随机梯度下降法，并支持任意梯度优化器|\n\n### 接口\n\n除了我们自己实现的机器学习算法之外，Tribuo 还为 JVM 上流行的机器学习工具提供了通用接口。如果您有兴趣贡献一个新的接口，请在 GitHub 上提交一个问题，我们将讨论它如何融入 Tribuo。\n\n目前，我们已有的接口包括：\n\n* [LibLinear](https:\u002F\u002Fgithub.com\u002Fbwaldvogel\u002Fliblinear-java) - 通过原生 [LibLinear](https:\u002F\u002Fwww.csie.ntu.edu.tw\u002F~cjlin\u002Fliblinear\u002F)（v2.44）的 LibLinear-java 移植版本。\n* [LibSVM](https:\u002F\u002Fwww.csie.ntu.edu.tw\u002F~cjlin\u002Flibsvm\u002F) - 使用 C++ 实现的纯 Java 转换版本（v3.25）。\n* [ONNX Runtime](https:\u002F\u002Fonnxruntime.ai) - 通过我们团队贡献的 Java API（v1.12.1）。\n* [TensorFlow](https:\u002F\u002Ftensorflow.org) - 使用 [TensorFlow Java](https:\u002F\u002Fgithub.com\u002Ftensorflow\u002Fjava) v0.4.2（基于 TensorFlow v2.7.4）。这使得完全在 Java 中训练和部署 TensorFlow 模型成为可能。\n* [XGBoost](https:\u002F\u002Fxgboost.ai) - 通过内置的 XGBoost4J API（v1.6.2）。\n\n## 二进制文件\n\nTribuo 的二进制文件已在 Maven Central 发布，其 groupId 为 `org.tribuo`。要获取所有兼容 Java 8 的 Tribuo 组件，包括 TensorFlow、ONNX Runtime 和 XGBoost 的绑定（这些是本地库），请使用以下依赖：\n\nMaven:\n```xml\n\u003Cdependency>\n    \u003CgroupId>org.tribuo\u003C\u002FgroupId>\n    \u003CartifactId>tribuo-all\u003C\u002FartifactId>\n    \u003Cversion>4.3.2\u003C\u002Fversion>\n    \u003Ctype>pom\u003C\u002Ftype>\n\u003C\u002Fdependency>\n```\n或 Gradle:\n```groovy\nimplementation (\"org.tribuo:tribuo-all:4.3.2@pom\") {\n    transitive = true \u002F\u002F 对于 build.gradle（即 Groovy）\n    \u002F\u002F isTransitive = true \u002F\u002F 对于 build.gradle.kts（即 Kotlin）\n}\n```\n\n`tribuo-all` 依赖是一个 pom 文件，它依赖于所有的 Tribuo 子项目，但不包括需要 Java 17 的模型卡片和可复现性项目。\n\nTribuo 的大部分代码是纯 Java，因此具有跨平台特性，然而部分接口会链接到使用本地代码的库。这些接口（TensorFlow、ONNX Runtime 和 XGBoost）仅能在各自发布二进制文件的支持平台上运行，而 Tribuo 并不能控制具体提供哪些二进制文件。如果您需要特定平台的支持，请联系这些项目的维护者。截至 4.1 版本，这些本地包都提供了适用于 Windows、macOS 和 Linux 的 x86_64 二进制文件。此外，也可以为 macOS ARM64（即 Apple Silicon）编译每个包，不过目前 Maven Central 尚未提供适用于该平台的 TensorFlow 或 XGBoost 二进制文件。从 4.3 版本开始，Tribuo 现在依赖于一个支持 macOS ARM64 和 Linux aarch64 平台的 ONNX Runtime 版本。在 ARM 平台上开发时，您可以在 Tribuo 的 `pom.xml` 中选择 `arm` 配置文件来禁用本地库测试。\n\nTribuo 的各个模块也分别发布了单独的 jar 文件。建议仅依赖于项目所需的模块，这样可以避免您的代码不必要地引入像 TensorFlow 这样的大型依赖项。\n\n## 从源码编译\n\nTribuo 使用 Apache Maven v3.5 或更高版本进行构建。Tribuo 兼容 Java 8 及以上版本，并且我们在 LTS 版本的 Java 以及最新版本上进行测试。要构建，只需运行 `mvn clean package` 即可。Tribuo 的所有依赖项应可在 Maven Central 获取。如果您在构建过程中遇到问题，请提交一个问题（但在提交之前，请先检查是否缺少 Maven 的代理设置，因为这通常是构建失败的常见原因，且不在我们的控制范围内）。请注意，如果您使用 Java 16 或更早版本进行构建，模型卡片和可复现性相关的包将会被禁用。\n\n## 仓库布局\n\n开发工作在 `main` 分支上进行，该分支的版本号为下一个 Tribuo 发布版本，并附加了 `-SNAPSHOT` 后缀。Tribuo 的主要和次要版本将在 `main` 分支上打标签，然后从标记的提交中分支出名为 `vA.B.X-release-branch` 的分支，用于后续的点版本发布（例如 `vA.B.1`、`vA.B.2` 等）。这些点版本会在相应的发布分支上打标签，比如 `v4.0.2` 就会在 `v4.0.X-release-branch` 分支上打标签。\n\n## 贡献\n\n我们欢迎各种贡献！请参阅我们的[贡献指南](.\u002FCONTRIBUTING.md)。\n\n我们有一个讨论邮件列表 [tribuo-devel@oss.oracle.com](mailto:tribuo-devel@oss.oracle.com)，存档在此处：[这里](https:\u002F\u002Foss.oracle.com\u002Fpipermail\u002Ftribuo-devel\u002F)。我们正在探索不同的实时聊天方式，敬请期待。对于错误报告、功能请求或其他问题，请在 [GitHub](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fissues) 上提交一个问题。\n\n## 安全\n\n请参阅[安全指南](.\u002FSECURITY.md)，了解我们负责任的安全漏洞披露流程。\n\n## 许可证\n\nTribuo 根据 [Apache 2.0 许可证](.\u002FLICENSE.txt)授权。\n\n## 发布说明：\n\n- [v4.3.2](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fblob\u002Fmain\u002Fdocs\u002Frelease-notes\u002Ftribuo-v4-3-2-release-notes.md) - 修复了一些小 bug，特别是在 Protocol Buffers 序列化和树模型方面，并升级了依赖项。\n- [v4.3.1](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fblob\u002Fmain\u002Fdocs\u002Frelease-notes\u002Ftribuo-v4-3-1-release-notes.md) - 修复了一些小 bug，特别是在 CART 树和 Example.densify 方法中，并将依赖项升级到更安全的版本。\n- [v4.3.0](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fblob\u002Fmain\u002Fdocs\u002Frelease-notes\u002Ftribuo-v4-3-release-notes.md) - 增加了模型卡片支持、分类任务中的特征选择功能、Protocol Buffers 序列化格式、用于距离计算的 kd 树，以及稀疏线性模型的速度优化。同时更新了大多数依赖项的版本，并进行了其他多项小修复和改进。\n- [v4.2.2](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fblob\u002Fmain\u002Fdocs\u002Frelease-notes\u002Ftribuo-v4-2-2-release-notes.md) - 修复了一些小 bug，将 TF-Java 升级至 0.4.2，Jackson 升级至 2.13.4，protobuf-java 升级至 3.19.6，OpenCSV 升级至 5.7.1。\n- [v4.2.1](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fblob\u002Fmain\u002Fdocs\u002Frelease-notes\u002Ftribuo-v4-2-1-release-notes.md) - 修复了 KMeans 的多线程问题、影响 ONNX 导出和 K-Means 初始化的非确定性迭代顺序等问题，并将 TF-Java 升级至 0.4.1。\n- [v4.2.0](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fblob\u002Fmain\u002Fdocs\u002Frelease-notes\u002Ftribuo-v4-2-release-notes.md) - 新增了因子分解机、分类器链和 HDBSCAN 聚类算法。增加了 ONNX 导出和 OCI 数据科学集成功能，并引入了可复现性框架。此外还进行了多项小修复和改进，包括 v4.1.1 中的回归问题修复。补充了剩余的 Javadoc 文档，新增了 4 个教程（ONNX 导出、多标签分类、可复现性、HDBSCAN），并扩展了现有教程。\n- [v4.1.1](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fblob\u002Fmain\u002Fdocs\u002Frelease-notes\u002Ftribuo-v4-1-1-release-notes.md) - 修复了多输出回归、多标签评估、在 SecurityManager 环境下使用 KMeans 和 KNN 时的问题，并将 TF-Java 更新至 0.4.0。\n- [v4.1.0](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fblob\u002Fmain\u002Fdocs\u002Frelease-notes\u002Ftribuo-v4-1-release-notes.md) - 新增了 TensorFlow 训练支持、BERT 特征提取器、ExtraTrees 随机森林、K-Means++ 算法，以及多项线性模型和 CRF 模型的性能优化。同时新增了关于 TensorFlow 和文档分类的教程，并修复了大量 bug 和文档问题。\n- [v4.0.2](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fblob\u002Fmain\u002Fdocs\u002Frelease-notes\u002Ftribuo-v4-0-2-release-notes.md) - 修复了许多 bug（CSVDataSource、JsonDataSource、RowProcessor、LibSVMTrainer、Evaluations、Regressor 序列化等）。改进了 Javadoc 和文档，并新增了两个教程（列式数据和外部模型）。\n- [v4.0.1](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fblob\u002Fmain\u002Fdocs\u002Frelease-notes\u002Ftribuo-v4-0-1-release-notes.md) - 修复了 CSVReader 在处理空行时的问题，并新增了 IDXDataSource，以支持加载原生 MNIST 格式的数据。\n- [v4.0.0](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fblob\u002Fmain\u002Fdocs\u002Frelease-notes\u002Ftribuo-v4-0-release-notes.md) - 初次公开发布。\n- v3 - 新增了溯源系统、外部模型支持和 ONNX 集成。\n- v2 - 功能从单纯的分类系统扩展到支持回归、聚类和多标签分类。\n- v1 - 初始内部版本。该版本仅支持多分类任务。","# Tribuo 快速上手指南\n\nTribuo 是由 Oracle Labs 开发的 Java 机器学习库，支持多类分类、回归、聚类、异常检测和多标签分类。它提供了统一的接口，既包含原生算法实现，也封装了 LibSVM、XGBoost、TensorFlow 等流行工具。\n\n## 环境准备\n\n*   **操作系统**：Windows 10, macOS, Linux (RHEL\u002FOL\u002FCentOS 7+)。\n    *   *注意*：若使用 TensorFlow、ONNX Runtime 或 XGBoost 等涉及本地代码的接口，主要支持 x86_64 架构。macOS ARM64 (Apple Silicon) 和 Linux aarch64 在部分组件（如 ONNX Runtime）上已获支持。\n*   **JDK 版本**：Java 8 或更高版本。\n    *   核心库兼容 Java 8+。\n    *   若需使用“模型卡片 (Model Card)\"和“可复现性 (Reproducibility)\"功能，必须使用 **Java 17**。\n*   **构建工具**：Apache Maven 3.5+ 或 Gradle。\n\n## 安装步骤\n\nTribuo 发布在 Maven Central 仓库。推荐根据项目需求引入依赖，避免打包过大的非必要组件（如 TensorFlow）。\n\n### 方案 A：引入完整包（推荐新手）\n此方式会引入除需要 Java 17 的模块外的所有 Tribuo 子项目（包括 TensorFlow, ONNX, XGBoost 绑定）。\n\n**Maven (`pom.xml`):**\n```xml\n\u003Cdependency>\n    \u003CgroupId>org.tribuo\u003C\u002FgroupId>\n    \u003CartifactId>tribuo-all\u003C\u002FartifactId>\n    \u003Cversion>4.3.2\u003C\u002Fversion>\n    \u003Ctype>pom\u003C\u002Ftype>\n\u003C\u002Fdependency>\n```\n\n**Gradle (`build.gradle`):**\n```groovy\nimplementation (\"org.tribuo:tribuo-all:4.3.2@pom\") {\n    transitive = true\n}\n```\n\n### 方案 B：按需引入模块（生产环境推荐）\n仅引入需要的算法模块，减小打包体积。例如，仅使用原生随机森林算法：\n\n**Maven:**\n```xml\n\u003Cdependency>\n    \u003CgroupId>org.tribuo\u003C\u002FgroupId>\n    \u003CartifactId>tribuo-ensemble\u003C\u002FartifactId>\n    \u003Cversion>4.3.2\u003C\u002Fversion>\n\u003C\u002Fdependency>\n\u003Cdependency>\n    \u003CgroupId>org.tribuo\u003C\u002FgroupId>\n    \u003CartifactId>tribuo-core\u003C\u002FartifactId>\n    \u003Cversion>4.3.2\u003C\u002Fversion>\n\u003C\u002Fdependency>\n```\n\n> **国内加速提示**：如果下载依赖缓慢，请在 Maven `settings.xml` 或 Gradle `build.gradle` 中配置阿里云镜像源：\n> *   Maven 镜像 URL: `https:\u002F\u002Fmaven.aliyun.com\u002Frepository\u002Fpublic`\n> *   Gradle 镜像 URL: `https:\u002F\u002Fmaven.aliyun.com\u002Frepository\u002Fpublic`\n\n## 基本使用\n\n以下示例展示如何使用 Tribuo 原生的**随机森林 (Random Forest)** 算法进行简单的多类分类任务。\n\n### 1. 准备数据与训练模型\n\n```java\nimport org.tribuo.MutableDataset;\nimport org.tribuo.data.columnar.ColumnarDataLoader;\nimport org.tribuo.data.columnar.ResponseProcessor;\nimport org.tribuo.data.columnar.FieldProcessor;\nimport org.tribuo.data.columnar.joiners.JoinedDataLoader;\nimport org.tribuo.classification.example.IrisUtil;\nimport org.tribuo.classification.RandomForestTrainer;\nimport org.tribuo.classification.ensemble.BaggingTrainer;\nimport org.tribuo.classification.dtree.CARTTrainer;\nimport org.tribuo.Model;\nimport org.tribuo.evaluation.Evaluator;\nimport org.tribuo.classification.evaluation.ClassificationEvaluator;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic class QuickStart {\n    public static void main(String[] args) {\n        \u002F\u002F 1. 加载数据 (此处使用内置的鸢尾花数据集示例)\n        \u002F\u002F 实际项目中可使用 ColumnarDataLoader 加载 CSV 等文件\n        MutableDataset\u003CString> dataset = IrisUtil.loadTrainData();\n\n        \u002F\u002F 2. 配置基础学习器 (CART 决策树)\n        CARTTrainer cartTrainer = new CARTTrainer();\n\n        \u002F\u002F 3. 配置集成学习器 (随机森林 = Bagging + CART)\n        \u002F\u002F 设置树的数量为 100\n        RandomForestTrainer rfTrainer = new RandomForestTrainer(cartTrainer, 100);\n\n        \u002F\u002F 4. 训练模型\n        System.out.println(\"开始训练...\");\n        Model\u003CString> model = rfTrainer.train(dataset);\n        System.out.println(\"训练完成：\" + model.toString());\n\n        \u002F\u002F 5. 评估模型\n        Evaluator\u003C?> evaluator = new ClassificationEvaluator\u003C>();\n        var output = evaluator.evaluate(model, dataset);\n        System.out.println(output.confusionString());\n        \n        \u002F\u002F 6. 进行预测\n        \u002F\u002F 获取第一条数据作为测试样本\n        var example = dataset.getExample(0);\n        var prediction = model.predict(example);\n        System.out.println(\"预测结果: \" + prediction.getOutput());\n        System.out.println(\"置信度: \" + prediction.getScore());\n    }\n}\n```\n\n### 2. 模型持久化与溯源\n\nTribuo 内置了完整的溯源（Provenance）系统，模型可直接通过 Java 序列化保存，其中包含了训练时间、数据指纹、超参数等信息。\n\n```java\nimport java.io.FileOutputStream;\nimport java.io.ObjectOutputStream;\n\n\u002F\u002F 保存模型\ntry (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(\"rf_model.ser\"))) {\n    oos.writeObject(model);\n    System.out.println(\"模型已保存至 rf_model.ser\");\n} catch (Exception e) {\n    e.printStackTrace();\n}\n\n\u002F\u002F 加载模型\ntry (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(\"rf_model.ser\"))) {\n    Model\u003CString> loadedModel = (Model\u003CString>) ois.readObject();\n    \u002F\u002F 使用 loadedModel 进行预测...\n} catch (Exception e) {\n    e.printStackTrace();\n}\n```\n\n### 关键特性提示\n*   **配置系统**：所有训练器均可通过 XML 或 JSON 文件配置（基于 OLCUT），便于复现实验。\n*   **ONNX 导出**：许多 Tribuo 模型支持导出为 ONNX 格式，以便在其他语言或云平台部署。\n*   **解释性**：内置 LIME 算法实现，可用于解释分类器的预测结果（支持文本和表格数据）。","某金融科技公司数据团队需要在纯 Java 后端系统中构建实时的信用卡欺诈检测模型，并满足严格的审计合规要求。\n\n### 没有 tribuo 时\n- **技术栈割裂**：算法团队使用 Python 训练模型，工程团队需通过复杂的 RPC 接口调用外部服务，导致系统延迟高且运维成本巨大。\n- **审计溯源困难**：模型上线后难以追溯具体的训练数据版本、特征变换逻辑及超参数配置，无法满足金融监管对模型“可解释性”和“血缘记录”的硬性指标。\n- **部署格式受限**：训练好的模型无法直接导出为通用格式，难以在不同语言环境或云端服务中灵活复用，造成资源浪费。\n- **配置管理混乱**：每次调整算法参数都需要修改代码并重新编译，缺乏统一的配置文件管理机制，实验复现极其耗时。\n\n### 使用 tribuo 后\n- **原生无缝集成**：直接在 Java 项目中调用 tribuo 实现异常检测算法，消除了跨语言调用开销，显著降低推理延迟并简化架构。\n- **自动合规溯源**：利用内置的 Provenance 对象自动记录模型创建时间、数据指纹及完整处理链路，一键生成 JSON 格式的审计报告，轻松应对合规检查。\n- **跨平台灵活部署**：支持将训练好的模型导出为 ONNX 格式，既可保留在 Java 环境运行，也能无缝迁移至其他云平台或边缘设备。\n- **配置驱动开发**：基于 OLCUT 系统，仅需修改 XML 或 JSON 配置文件即可调整训练策略，无需重新编译代码，大幅提升了实验迭代效率。\n\ntribuo 通过提供统一的 Java 原生机器学习接口与完整的模型血缘追踪能力，让企业级 AI 应用在保证高性能的同时轻松满足生产环境的合规与运维需求。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Foracle_tribuo_36aa4aaa.png","oracle","Oracle","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Foracle_ef9531bc.png","Open Source at Oracle",null,"opensource_ww_grp@oracle.com","OracleOSS","https:\u002F\u002Fdeveloper.oracle.com\u002Fopen-source.html","https:\u002F\u002Fgithub.com\u002Foracle",[82,86,90,94],{"name":83,"color":84,"percentage":85},"Java","#b07219",91.1,{"name":87,"color":88,"percentage":89},"Jupyter Notebook","#DA5B0B",8.5,{"name":91,"color":92,"percentage":93},"Python","#3572A5",0.3,{"name":95,"color":96,"percentage":97},"Shell","#89e051",0.1,1409,197,"2026-04-13T12:31:37","Apache-2.0","Windows 10, macOS, Linux (RHEL\u002FOL\u002FCentOS 7+)","未说明（纯 Java 库，部分接口如 TensorFlow\u002FXGBoost\u002FONNX Runtime 依赖原生库，具体 GPU 需求取决于所集成的外部库）","未说明",{"notes":106,"python":107,"dependencies":108},"Tribuo 是一个纯 Java 机器学习库。核心功能支持所有 Java 平台，但集成 TensorFlow、XGBoost 和 ONNX Runtime 的接口需要原生代码支持，目前主要测试并支持 x86_64 架构。ONNX Runtime 从 4.3 版本起支持 macOS ARM64 和 Linux aarch64，但 TensorFlow 和 XGBoost 在 Maven Central 上暂无 macOS ARM64 的二进制包。模型卡片和可复现性包需要 Java 17，不包含在默认的 tribuo-all 依赖中。教程笔记本需要 Java 10+（部分需 Java 17）。","不需要（基于 Java 的库）",[109,110,111,112,113,114,115,116],"Java 8+","Apache Maven 3.5+","LibLinear-java v2.44","LibSVM v3.25","ONNX Runtime v1.12.1","TensorFlow Java v0.4.2 (基于 TF v2.7.4)","XGBoost4J v1.6.2","OLCUT (配置系统)",[35,14],[119,120,121,122,123,124,125,126],"machine-learning","java","deep-learning","classification","regression","clustering","nlp","ml","2026-03-27T02:49:30.150509","2026-04-19T09:27:05.075407",[130,135,139,143,148,153,158,162],{"id":131,"question_zh":132,"answer_zh":133,"source_url":134},42156,"如何将真实世界的数据（如 CSV 文件）加载到 K-Means 聚类算法中，而不是使用自动生成的数据？","您可以使用标准的 DataSource 加载器来导入聚类数据。对于没有真实标签（ground truth）的聚类或异常检测任务，Tribuo 提供了空的响应处理器（empty response processor）实现。此外，`KMeansModel` 现在包含一个 `getCentroids` 方法，可以返回质心的特征名称和值，便于在下游任务中使用。具体步骤可参考更新后的聚类教程。","https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fissues\u002F72",{"id":136,"question_zh":137,"answer_zh":138,"source_url":134},42157,"在稀疏数据训练过程中，如何处理缺失元素？是否有内置的修剪或加权功能？","当某些元素缺失时，距离的定义比较困难，因此 Tribuo 隐式地将缺失元素设置为零。如果不这样做，可能会导致退化情况（例如两个数据点没有任何重叠特征，导致距离未定义）。目前没有在训练过程中对稀疏数据进行修剪或加权的内置方法，`sparsify()` 方法仅用于在聚类选择后清理结果。",{"id":140,"question_zh":141,"answer_zh":142,"source_url":134},42158,"Tribuo 的特征 ID 与我传入数据的 ID 编号有关联吗？","Tribuo 的内部特征 ID 与您传入数据时的 ID 编号是完全断开连接的。Tribuo 将您传入的 ID 视为独立的标识符，并在内部建立自己的映射关系，因此不要假设两者之间存在直接的数值对应关系。",{"id":144,"question_zh":145,"answer_zh":146,"source_url":147},42159,"为什么在 Java 11 或更高版本中，配合 SecurityManager 使用 KMeansTrainer 时会抛出 AccessControlException？","从 Java 11 开始，如果存在 SecurityManager，安全策略不会传播到 ForkJoinPool 的工作线程中，而 KMeans 依赖 ForkJoinPool 运行训练任务，从而导致权限错误。该问题已在 Tribuo 4.1.1 和 4.2.0 版本中修复。请升级到这些版本以解决此兼容性问题。","https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fissues\u002F158",{"id":149,"question_zh":150,"answer_zh":151,"source_url":152},42160,"为什么我无法导入 LogisticRegressionTrainer 或其他评估包？是否支持网格搜索（Grid Search）？","确保已正确添加所有 Maven 依赖。关于网格搜索，Tribuo 的配置系统（Configuration System）支持定义实验参数（如数据源、变换、超参数等），您可以利用它构建网格搜索。相关示例可在 `HelperPrograms.md` 文档和配置教程笔记本中找到。虽然官方曾实现过网格搜索代码，但因依赖过时的聚类技术尚未公开发布，建议参考配置系统自行实现。","https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fissues\u002F54",{"id":154,"question_zh":155,"answer_zh":156,"source_url":157},42161,"在哪里可以找到使用 SQLDataSource 进行 HDBSCAN 聚类的示例代码？","目前文档中可能缺乏具体的 SQLDataSource 示例。通常，您需要配置 JDBC 连接字符串、查询语句以及列映射来创建 SQLDataSource。对于聚类任务，同样需要配合空的响应处理器使用。建议参考其他 DataSource 的用法模式，并查看异常检测或聚类教程中关于数据加载的部分，或者在 GitHub Issues 中搜索相关讨论获取社区提供的片段。","https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fissues\u002F366",{"id":159,"question_zh":160,"answer_zh":161,"source_url":152},42162,"Tribuo 是否支持在 Java 中直接绘制图表（如 ROC 曲线）？","可以在 Java 中绘图，但不像 Python 的 matplotlib 那样简单，因为 Java 缺乏普遍接受的 ndarray 类型，导致绘图库与数据输出之间需要额外的适配代码（glue code）。Tribuo 团队尚未决定依赖哪个绘图库并编写相应的适配层。目前建议导出数据并使用其他工具绘图，或者寻找现有的 Java 绘图库自行集成。",{"id":163,"question_zh":164,"answer_zh":165,"source_url":157},42163,"异常检测算法对训练数据有什么特殊要求？","Tribuo 目前实现的异常检测算法（如 LibSVM 和 LibLinear）通常假设训练数据不包含异常点（即训练数据应为正常数据）。这是基于主要使用场景的需求决定的。如果需要处理训练数据中混合了正常和异常样本的情况，目前可能需要寻找其他算法实现或等待未来更新。",[167,172,177,182,187,192,197,202,207,212,217],{"id":168,"version":169,"summary_zh":170,"released_at":171},334244,"v4.3.2","补丁版本将许多依赖项升级到最新版本，并整合了各种小修复。此版本为所有主要类添加了 Protocol Buffers 支持（早期 4.3 版本中不慎遗漏了两个类），同时还包含了 Protocol Buffers 序列化测试。Tribuo v5 将移除对 `java.io.Serializable` 的支持，并要求使用 Protocol Buffers 序列化。\n\n## 更新内容\n* 将 OCI Java SDK 升级至 3.48.0，JUnit 升级至 5.11.3，Jackson 升级至 2.18.0，OpenCSV 升级至 5.9，由 @craigacp 在 https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F380 中完成。\n* 升级至 protobuf-java 3.25.6 并重新生成所有 Protocol Buffers 文件，由 @craigacp 分别在 https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F381 和 https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F395 中完成。\n* 切换到 TF-Java 1.0.0，由 @craigacp 在 https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F367 中完成。请注意，TF-Java 1.0.0 需要 Java 11，因此我们的绑定也要求 Java 11 及以上版本。\n* 切换到 OLCUT 5.3.1，由 @craigacp 在 https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F387 中完成。\n* 切换到 ONNX Runtime 1.20.0，由 @craigacp 在 https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F368 中完成。\n\n## 错误修复\n* 由 @geoffreydstewart 在 https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F356 中改进聚类示例点的确定方式。\n* 由 @craigacp 在 https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F364 中修复 DatasetView\u002FTransformTrainer 的 Dataset.createTransformers 方法。\n* 由 @JackSullivan 在 https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F376 中修复 `SQLDataSource` 连接泄漏问题。\n* 由 @craigacp 在 https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F382 中修复 WordpieceTokenizer 中的多线程 bug。\n* 由 @craigacp 在 https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F384 中修复 IntArrayContainer.merge 方法中的 bug，并添加相关测试。\n* 由 @craigacp 从 https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F369 中引入矩阵分解行列式计算及 SparseVector.subtract 方法的修复。\n* 由 @craigacp 在 https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F393 中为 TensorFlowSavedModelExternalModel 添加标签支持。\n\n## Protocol Buffers 序列化修复与测试\n* 由 @craigacp 在 https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F318 中为异常检测、聚类和多标签分类模块的 4.3 版本 Protocol Buffers 添加反序列化测试。\n* 由 @craigacp 在 https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F321 中为 TransformedModel 和 IndependentSequenceModel 添加 Protocol Buffers 序列化支持。\n* 由 @craigacp 在 https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F322 中为回归模块的 4.3 版本 Protocol Buffers 添加反序列化测试。\n* 由 @craigacp 在 https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F323 中修复若干类中 Protocol Buffers 的生成问题。\n* 由 @craigacp 在 https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F345 中为分类模块的 4.3 版本 Protocol Buffers 添加反序列化测试。\n* 由 @craigacp 和 @pogren 在 https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F346 中为数学模块的 4.3 版本 Protocol Buffers 添加反序列化测试。\n* 由 @craigacp 在 https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F386 中为核心模块的 4.3 版本 Protocol Buffers 添加反序列化测试。\n\n## 贡献者\n\n- Adam Pocock（[@Craigacp](https:\u002F\u002Fgithub.com\u002FCraigacp)）\n- Jeffrey Alexander（[@jhalexand](https:\u002F\u002Fgithub.com\u002Fjhalexand)）\n- Jack Sullivan（[@JackSullivan](https:\u002F\u002Fgithub.com\u002FJackSullivan)）","2025-04-04T17:37:29",{"id":173,"version":174,"summary_zh":175,"released_at":176},334245,"v4.3.1","一个小补丁版本，用于更新部分依赖项并引入一些小修复。其中最值得注意的修复是允许 CART 树生成纯节点，而此前它们一直被禁止这样做。这很可能会提升分类树的性能，无论是单棵树还是在随机森林等集成方法中使用时。\n\n- FeatureHasher 应当提供一个不对值进行哈希的选项，同时 TokenPipeline 默认应设置为不哈希值（[#309](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F309)）。\n- 改进了 CSVLoader 加载多标签数据的文档说明（[#306](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F306)）。\n- 允许 Example.densify 方法添加任意特征（[#304](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F304)）。\n- 为 ClassifierChainModel 和 IndependentMultiLabelModel 添加访问器方法，以便可以访问其中的各个子模型（[#302](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F302)）。\n- 允许 CART 树创建纯叶节点（[#303](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F303)）。\n- 将 jackson-core 升级至 2.14.1，jackson-databind 升级至 2.14.1，OpenCSV 升级至 5.7.1，并引入已修复的 commons-text 1.10.0。\n\n## 贡献者\n\n- Adam Pocock（[@Craigacp](https:\u002F\u002Fgithub.com\u002FCraigacp)）\n- Jeffrey Alexander（[@jhalexand](https:\u002F\u002Fgithub.com\u002Fjhalexand)）\n- Jack Sullivan（[@JackSullivan](https:\u002F\u002Fgithub.com\u002FJackSullivan)）\n- Philip Ogren（[@pogren](https:\u002F\u002Fgithub.com\u002Fpogren)）","2022-12-23T19:58:59",{"id":178,"version":179,"summary_zh":180,"released_at":181},334246,"v4.2.2","一个小补丁版本，用于升级部分依赖并引入一些小修复：\n\n- 在对象创建时验证哈希盐值（[#237](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F237)）。\n- 修复 XGBoost 参数被覆盖的问题（[#239](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F239)）。\n- 为 TransformedModel 添加一些必要的访问器方法（[#244](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F244)）。\n- 将 TF-Java 升级至 v0.4.2（[#281](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F281)）。\n- 修复在包含空格的路径下运行测试时出现的失败问题（[#287](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F287)）。\n- 修正指向 OCA 的文档链接。\n- 将 jackson-core 升级至 2.13.4，jackson-databind 升级至 2.13.4.2，protobuf-java 升级至 3.19.6，OpenCSV 升级至 5.7.1，并引入已修复的 commons-text 1.10.0。\n\n## 贡献者\n\n- Adam Pocock（[@Craigacp](https:\u002F\u002Fgithub.com\u002FCraigacp)）\n- Geoff Stewart（[@geoffreydstewart](https:\u002F\u002Fgithub.com\u002Fgeoffreydstewart)）\n- Jeffrey Alexander（[@jhalexand](https:\u002F\u002Fgithub.com\u002Fjhalexand)）\n- Jack Sullivan（[@JackSullivan](https:\u002F\u002Fgithub.com\u002FJackSullivan)）\n- Philip Ogren（[@pogren](https:\u002F\u002Fgithub.com\u002Fpogren)）","2022-10-25T15:56:42",{"id":183,"version":184,"summary_zh":185,"released_at":186},334247,"v4.3.0","Tribuo v4.3 新增了用于分类问题的特征选择功能、对模型卡片的引导式生成支持，以及所有可序列化类的 Protocol Buffers 序列化。此外，还引入了一个基于距离计算的新接口，该接口现在可以使用 kd 树或暴力比较方法；稀疏线性模型包已被重写，以利用 Tribuo 的线性代数系统，从而提升速度并降低内存消耗；同时，我们也增加了一些新的教程。\n\n请注意，这很可能是 Tribuo 最后一个支持 Java 8 的功能版本。Tribuo 的下一个主要版本将要求使用 Java 17。另外，在下一个主要版本中，将移除对 `java.io.Serializable` 序列化的支持，Tribuo 将完全采用基于 Protocol Buffers 的序列化方式。\n\n## 特征选择\n\n在本次发布中，我们为数据集和溯源系统添加了特征选择算法的支持，并实现了四种信息论特征选择算法，适用于分类问题。这些算法（MIM、CMIM、mRMR 和 JMI）在该 [综述论文](https:\u002F\u002Fjmlr.org\u002Fpapers\u002Fv13\u002Fbrown12a.html) 中有详细介绍。在计算互信息之前，连续型输入会被离散化为固定数量的等宽区间。这些算法是很有用的特征选择基准，我们也欢迎贡献者扩展支持的算法集合。\n\n- 特征选择算法 [#254](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F254)。\n\n## 模型卡片支持\n\n[模型卡片](https:\u002F\u002Fdl.acm.org\u002Fdoi\u002F10.1145\u002F3287560.3287596) 是一种流行的方式来描述模型、其训练数据、预期应用以及应避免的使用场景。在本次发布中，我们增加了模型卡片的引导式生成功能，其中许多字段会根据每个 Tribuo 模型内部的溯源信息自动生成。需要用户输入的字段（例如模型的预期用途或许可证信息）可以通过命令行工具添加，最终生成的模型卡片可以保存为 JSON 格式。\n\n目前，自动数据提取功能在某些未使用 Tribuo `Trainer` 类生成的嵌套集成模型上会失败。未来我们将进一步改进针对此类情况的数据提取能力。\n\n- 模型卡片基础设施 ([#243](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F243)、[#250](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F250)、[#253](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F253))。\n\n## Protocol Buffers 序列化\n\n在本次发布中，我们为 Tribuo 的所有可序列化类型添加了 Protocol Buffers 定义，并编写了与这些定义交互所需的代码，从而实现序列化。这项工作提升了序列化数据的验证能力，并使 Tribuo 模型能够在不同主要版本之间保持向上兼容。任何来自 Tribuo v4.2 或更早版本的已序列化模型或数据集都可以加载并保存为新格式，这将确保 co","2022-10-07T18:32:17",{"id":188,"version":189,"summary_zh":190,"released_at":191},334248,"v4.2.1","针对三个问题的小补丁发布：\n\n- 确保 K-Means 线程池在训练完成后关闭（[#224](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F224)）\n- 修复 ONNX 导出中集成模型、K-Means 初始化以及若干测试依赖于 HashSet 迭代顺序的问题（[#220](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F220), [#225](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F225)）\n- 升级至 TF-Java 0.4.1，其中包含对 TensorFlow 2.7.1 的升级，该版本引入了多项修复，可防止在处理格式错误或恶意模型时发生原生崩溃（[#228](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F227)）\n\nOLCUT 已更新至 5.2.1，以引入 jackson 和 protobuf 的最新版本（[#234](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F234)）。此外，还包括一些文档更新以及对 K-Means 的 `toString` 方法的小幅改进（[#209](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F209), [#211](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F211), [#212](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F212)）。\n\n## 贡献者\n\n- Adam Pocock ([@Craigacp](https:\u002F\u002Fgithub.com\u002FCraigacp))\n- Geoff Stewart ([@geoffreydstewart](https:\u002F\u002Fgithub.com\u002Fgeoffreydstewart))\n- Yaliang Wu ([@ylwu-amzn](https:\u002F\u002Fgithub.com\u002Fylwu-amzn))\n- Kaiyao Ke ([@kaiyaok2](https:\u002F\u002Fgithub.com\u002Fkaiyaok2))","2022-05-04T16:19:59",{"id":193,"version":194,"summary_zh":195,"released_at":196},334249,"v4.2.0","Tribuo 4.2 新增了多种模型，支持将若干类型模型导出为 ONNX 格式，并引入了一个用于重现 Tribuo 模型的可复现性框架，同时实现了在 Oracle Cloud 上轻松部署 Tribuo 模型的功能。此外，还包含多项小改进和错误修复。我们新增了更多涵盖新功能及多标签分类的教程，并进一步扩展了 Javadoc 文档，以覆盖所有公共方法。\n\n在 Tribuo 4.1.0 及更早版本中，多维回归模型（即具有多个输出维度的回归任务）存在严重缺陷。除 `LinearSGDModel` 和 `SparseLinearModel` 外，其他模型（除非使用 `ElasticNetCDTrainer`）在构建输出维度索引时存在错误，可能导致所有维度的输出均不正确（因为实际输出会对应于与 `Regressor` 对象中指定维度不同的另一个维度）。此问题现已修复；加载在早期版本 Tribuo 中训练的模型时，系统会自动修补模型，以正确重新排列维度顺序。然而，这一修复无法应用于基于树的模型，因此所有多输出回归的基于树的模型都应使用 Tribuo 4.2 重新训练，否则将无法恢复。此外，在多输出回归中使用标准化时，LibSVM 模型中除第一个维度外的其他维度也会出现存储不当的问题，同样需要使用 Tribuo 4.2 重新训练。有关详细信息，请参阅 [#177](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F177)。\n\n请注意，KMeans 实现进行了多项内部更改，以支持在 `java.lang.SecurityManager` 环境下运行，这会导致所有 `KMeansTrainer` 的子类失效。在大多数情况下，只需将任何重写的 `mStep` 方法签名调整为与新签名一致，并允许单线程执行时 `fjp` 参数为 null，即可修复子类问题。\n\n## 新增模型\n\n在本版本中，我们新增了 [因子分解机](https:\u002F\u002Fwww.computer.org\u002Fcsdl\u002Fproceedings-article\u002Ficdm\u002F2010\u002F4256a995\u002F12OmNwMFMfl)、[分类器链](https:\u002F\u002Flink.springer.com\u002Fcontent\u002Fpdf\u002F10.1007\u002Fs10994-011-5256-5.pdf) 和 [HDBSCAN\\*](https:\u002F\u002Flink.springer.com\u002Fchapter\u002F10.1007\u002F978-3-642-37456-2_14)。因子分解机是一种强大的非线性预测器，它通过因子化近似来学习每个输出的特征间交互项，同时结合线性模型进行预测。我们为多分类、多标签分类和回归任务分别实现了因子分解机。分类器链是一种用于多标签分类的集成方法：给定标签的具体顺序，它会学习一系列分类器，其中每个分类器不仅接收特征，还会接收来自链中先前分类器的预测标签。此外，我们还添加了随机排序的分类器链集成方法，该方法在真实标签顺序未知的情况下表现良好（即大多数情况下）。HDBSCAN 是一种基于密度的层次聚类算法，它会根据数据本身的特性自动确定聚类数量，而非…","2021-12-20T22:09:20",{"id":198,"version":199,"summary_zh":200,"released_at":201},334250,"v4.1.1","这是 Tribuo v4.1 的首个补丁版本。本次发布的主要修复包括多维输出回归的支持，以及在受限的 `SecurityManager` 环境下使用 KMeans 和 KNN 模型的功能支持。此外，该版本引入了 TensorFlow-Java 0.4.0，将 TensorFlow 原生库升级至 2.7.0，从而修复了多个 CVE 漏洞。需要注意的是，这些 CVE 漏洞可能并不适用于 TensorFlow-Java，因为其中许多与 Python 路径相关，而这些路径并未包含在 TensorFlow-Java 中。同时，TensorFlow 的升级对 Tribuo 的 TF API 是一项破坏性变更：在此版本中，图的初始化方式发生了变化，因此不可避免地带来了接口上的改动。\n\n## 多维回归修复\n\n在 Tribuo 4.1.0 及更早版本中，多维回归模型（即具有多个输出维度的回归任务）存在一个严重缺陷。除 `LinearSGDModel` 和 `SparseLinearModel` 外，其他模型（除非使用 `ElasticNetCDTrainer`）在构建输出维度索引时存在错误，可能导致所有维度的输出均不正确（因为实际输出会对应于与 `Regressor` 对象中指定维度不同的另一个维度）。此问题现已修复；加载在早期版本 Tribuo 中训练的模型时，系统会自动为模型重新排列维度以确保正确性。然而，这一修复无法应用于基于树的模型，因此所有多输出回归的树模型都应使用 Tribuo 4.1.1 或更高版本重新训练，否则将无法恢复。此外，在多输出回归中使用标准化时，LibSVM 模型中第一个维度之后的维度会被错误存储，同样需要使用 Tribuo 4.1.1 或更高版本重新训练。更多详情请参阅 [#177](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F177)。\n\n## 错误修复\n\n- 修复了 LIME 解释中针对不支持每类权重的模型出现的 NPE 问题（[#157](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F157)）。\n- 修复了多标签评估中将 FP 误判为 FN 的错误（[#167](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F167)）。\n- 使 LibSVM 和 LibLinear 具备可复现的行为（[#172](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F172)）。\n- 修复了 TransformTrainer 的溯源信息，并为 XGBoostExternalModel 添加了一个额外的工厂方法，以便可以直接从内存中的 booster 构建模型（[#176](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F176)）。\n- 修复多维回归问题（[#177](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F177)，包括修复回归 ID、修正 LibSVM 以生成正确的标准化模型，以及为 XGBoostRegressionModel 添加按维度特征权重的支持）。\n- 在溯源信息中统一规范 LibSVMDataSource 路径（[#181](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F181)）。\n- KMeans 和 KNN 现在可以在使用 OpenSearch 的 SecurityManager 时正常运行（[#197](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F197)）。\n- 引入 TensorFlow-Java 0.4.0（[#195](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F195)）。\n\n## 贡献者\n\n- Adam","2021-12-10T18:22:26",{"id":203,"version":204,"summary_zh":205,"released_at":206},334251,"v4.1.0","# Tribuo v4.1 发行说明\n\nTribuo 4.1 是首次开源发布后的首个功能版本。我们新增了多种模型、部分模型的新参数，改进了数据加载、文档、转换以及 CRF 和线性模型的性能，并对 TensorFlow 接口进行了大规模更新。此外，我们还修订了教程，并新增了两篇分别介绍 TensorFlow 和文档分类的教程。\n\n## TensorFlow 支持\n\n已迁移到 TensorFlow Java 0.3.1，支持在 Java 中定义和训练模型（[#134](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F134)）。TensorFlow 模型可以保存为两种格式：TensorFlow 的检查点格式或 Tribuo 的原生模型序列化格式。同时，这些模型也可以导出为 TensorFlow Saved Model 格式，以便与其他 TensorFlow 平台互操作。Tribuo 现在能够加载 TF v2 Saved Model，并通过其外部模型加载器与 TF v1 冻结图一起使用。\n\n我们还新增了一个 TensorFlow 教程，该教程逐步演示如何创建一个简单的回归 MLP、一个分类 MLP 和一个分类 CNN，最后将模型导出为 TensorFlow Saved Model，并将其重新导入到 Tribuo 中。\n\n## 新增模型\n\n- 添加了极端随机树，即 ExtraTrees（[#51](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F51)）。\n- 添加了基于 SGD 的多标签分类线性模型（[#106](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F106)）。\n- 添加了 liblinear 的线性 SVM 异常检测器（[#114](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F114)）。\n- 添加了从现有模型中任意创建集成模型的功能（[#129](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F129)）。\n\n## 新特性\n\n- 添加了 K-Means++（[#34](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F34)）。\n- 添加了 XGBoost 特征重要性指标（[#52](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F52)）。\n- 在列式数据包中添加了 OffsetDateTimeExtractor（[#66](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F66)）。\n- 添加了用于聚类数据集的空响应处理器（[#99](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F99)）。\n- 添加了 IDFTransformation，用于生成 TF-IDF 特征（[#104](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F104)）。\n- 向 XGBoost 模型暴露了更多参数（[#107](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F107)）。\n- 添加了 Wordpiece 分词器（[#111](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F111)）。\n- 为 LibSVM 回归器添加了可选的输出标准化功能（[#113](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F113)）。\n- 添加了用于文本数据的 BERT 特征提取器（[#116](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F116)）。该提取器可以加载 HuggingFace Transformers 提供的 ONNX 格式的 BERT（及 BERT 风格）模型，并将其用作 Tribuo 文本特征提取包的一部分。\n- 添加了可配置版本的 AggregateDataSource，并为两种形式的 AggregateDataSource 增加了迭代顺序参数（[#125](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Fpull\u002F125)）。\n- 为 RowProcessor 添加了一个可传递换行符的选项（[#137](https:\u002F\u002Fg","2021-05-26T18:40:40",{"id":208,"version":209,"summary_zh":210,"released_at":211},334252,"v4.0.2","这是 Tribuo 在首次公开发布后的首个点版本更新。本次更新修复了早期用户发现的诸多问题，并针对用户反馈的重点领域改进了文档。此外，我们在修复 bug 的过程中还新增了几种小型方法，并推出了两篇新的教程：一篇介绍列式数据加载，另一篇介绍外部模型加载（即 XGBoost 和 ONNX 模型）。\n\n已修复的 bug：\n- 修复了评估测试中的区域设置问题。\n- 修复了 RowProcessor 的相关问题（正则表达式展开未被调用、溯源信息捕获不正确）。\n- `IDXDataSource` 在无法找到文件时，现在会抛出 `FileNotFoundException`，而非神秘的 `NullPointerException`。\n- 修复了 `JsonDataSource` 中的问题（异常抛出更加一致，在多种情况下能够正确终止读取）。\n- 修复了一个因不可序列化的 lambda 表达式而导致回归模型无法序列化的问题。\n- 修复了 CSV 加载中的 UTF-8 BOM 问题。\n- 修复了 `LibSVMTrainer` 在多次调用训练时未能正确跟踪状态的问题。\n- 修复了评估器中的问题，确保在遇到未标记或未知的真实标签输出时，能够一致地抛出异常。\n- 修复了 ONNX `LabelTransformer` 无法正确读取 PyTorch 输出的 bug。\n- 升级到 OLCUT 5.1.5，以修复溯源信息到配置的转换问题。\n\n新增内容：\n- 新增了一个方法，可将 Jackson 的 `ObjectNode` 转换为适合 `RowProcessor` 使用的 `Map`。\n- 为所有模型补充了缺失的序列化测试。\n- 为 `LibSVMModel`、`LibLinearModel` 和 `XGBoostModel` 添加了 `getInnerModels` 方法，允许用户访问内部模型的副本。\n- 更多文档更新。\n- 列式数据加载教程。\n- 外部模型（XGBoost 和 ONNX）教程。\n\n依赖库更新：\n- OLCUT 5.1.5（引入 jline 3.16.0 和 jackson 2.11.3）。","2020-11-05T17:45:43",{"id":213,"version":214,"summary_zh":215,"released_at":216},334253,"v4.0.1","- 修复了 CSVReader 无法读取文件末尾包含多余换行符的问题。\n- 添加了 IDXDataSource，以便我们能够读取 [IDX](http:\u002F\u002Fyann.lecun.com\u002Fexdb\u002Fmnist\u002F) 格式的数据集（即 MNIST 数据集）。\n- 更新了配置教程，改为从 IDX 文件而非 libsvm 文件中读取 MNIST 数据。","2020-09-01T00:45:31",{"id":218,"version":219,"summary_zh":220,"released_at":221},334254,"v4.0.0","This is the first public release of the Tribuo Java Machine Learning library. Tribuo provides classification, regression, clustering and anomaly detection algorithms along with data loading, transformation and model evaluation code. Tribuo also provides support for loading external ONNX models and scoring them in Java as well as support for training and evaluating deep learning models using TensorFlow.\r\n\r\nTribuo's development started in 2016 led by [Oracle Labs](https:\u002F\u002Flabs.oracle.com)' [Machine Learning Research Group](https:\u002F\u002Flabs.oracle.com\u002Fpls\u002Fapex\u002Ff?p=LABS:project_details:0:7), and has been in production inside Oracle since 2017. It's now available under an Apache 2.0 license, and we'll continue to develop it in the open, including accepting community PRs under the Oracle Contributor Agreement.\r\n\r\nSee [tribuo.org](https:\u002F\u002Ftribuo.org) for a project overview, or explore the [docs](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Ftree\u002Fmain\u002Fdocs) here on Github for more details. We have jupyter notebook based [tutorials](https:\u002F\u002Fgithub.com\u002Foracle\u002Ftribuo\u002Ftree\u002Fmain\u002Ftutorials) demonstrating various features of the library.","2020-08-13T15:59:41"]