常见问题¶
关于 YDF¶
什么是决策森林?¶
决策森林是易于训练的机器学习模型,在表格数据方面表现出色。要深入了解其背后的数学原理,请查看Google 的决策森林在线课程。
我想使用 YDF。从哪里开始?¶
从 Notebook 或 Colab 中的 YDF Python API 入手。Python API 是使用 YDF 最全面(与 C++ API 并列)且用户友好的方式。
使用一种 API 训练的模型可以与其他 API 一起使用。例如,使用 Python API 训练的模型可以导出到 C++、Go 或 JavaScript 以进行服务。
YDF 是由谁何时创建的?¶
YDF 由 Google 在瑞士的工程师创建并持续开发。
YDF 发展的一些里程碑
- 2017 年:作为 Google 研究部门的实验性库创建
- 2018 年:作为 C++ API 和 CLI 接口投入生产。YDF 模型每秒被调用数千万次。
- 2019 年:发布适用于 TensorFlow 1 的 Tensorflow Decision Forests
- 2020 年:发布适用于 TensorFlow 2 的 Tensorflow Decision Forests (Keras API)
- 2021 年:开源并在 Google I/O 上展示
- 2023 年:在 KDD23 上进行展示。
- 2023 年:开发独立 Python API。
YDF 与 TF-DF¶
我应该使用 YDF 还是 TensorFlow Decision Forests (TF-DF)?¶
在几乎所有情况下,您都应该优先选择 YDF 而非 TF-DF。
YDF 的 Python API 和 TF-DF 共用同一个 C++ 后端,因此,它们的许多功能和生成的模型都是相同的。然而,TF-DF 在实现 Keras 2 API 和内部使用 TensorFlow 方面受到更多限制。因此,TF-DF 比 YDF 的 Python API 更慢、更大且灵活性较差。
TF-DF 的现状如何?我还能使用 TF-DF 吗?¶
TF-DF 是一个生产级库,在许多产品中得到支持和部署。它仍然可以使用,并且由 YDF 团队积极维护。然而,我们认为 YDF Python API 更适合大多数新的使用场景(请参阅下面的比较)。
Python API 的现状如何?¶
YDF 的 Python API 已达到与 TF-DF 的功能对等,并且正在积极开发更多功能。
YDF 和 TF-DF 有何不同?¶
这两个库由同一个团队开发并使用相同的训练代码,这意味着由任一库训练的模型将是相同的。YDF 是 TF-DF 的继任者,它比 TF-DF 功能更丰富、效率更高且更易于使用。
Yggdrasil Decision Forests | TensorFlow Decision Forests | |
---|---|---|
模型描述 | model.describe() 生成丰富的 HTML 或文本模型描述报告。 |
model.describe() 生成简单的文本报告。model.describe() 不适用于从磁盘加载的模型。 |
模型评估 | model.evaluate(ds) 评估模型并返回包含准确率、AUC、ROC 图、置信区间等内容的丰富模型评估报告。 |
每个评估指标都需要在调用 model.evalute() 之前使用 model.compile() 进行配置。无法生成 ROC 或置信区间。无法评估排名和提升模型。 |
模型分析 | model.analyze(ds) 生成包含变量重要性、PDP 和 CEP 的丰富模型分析 HTML 报告。 |
不可用 |
模型基准测试 | model.benchmark(ds) 衡量模型推理速度。 |
不可用 |
交叉验证 | learner.cross_validation(ds) 执行交叉验证并返回丰富的模型评估报告。 |
不可用 |
异常检测 | Isolation Forests 及其扩展可用。 | 不可用 |
Python 模型服务 | model.predict(ds) 进行预测。支持多种数据集格式(文件路径、pandas dataframe、numpy 数组字典、TensorFlow Dataset)。 |
对 TensorFlow 数据集使用 model.predict(ds) 。当对从磁盘加载的模型调用 model.predict(ds) 时,您可能需要调整特征数据类型(dtype)。 |
TensorFlow Serving / Vertex AI | model.to_tensorflow_saved_model(path) 创建有效的 SavedModel。SavedModel 签名是自动构建的。 |
model.save(path, signature) 。模型签名应手动编写。 |
其他模型服务 | 模型直接在 C++、Python、CLI、Go 和 Javascript 中可用。您还可以使用实用程序生成服务代码:例如,调用 model.to_cpp() 生成 C++ 服务代码。 |
调用 model.save(path, signature) 生成 TensorFlow SaveModel,并使用 TensorFlow C++ API 在 C++ 中运行模型。或者,将模型导出到 YDF。 |
训练速度 | 在小型数据集上,训练速度比 TensorFlow Decision Forests 快 5 倍。在所有数据集大小上,模型推理速度比 TensorFlow Decision Forests 快 1000 倍。 | 在小型数据集上,大部分时间花费在 TensorFlow 数据集读取上。 |
库加载速度 | YDF 库约为 9MB。 | TF-DF 库约为 12MB,但它需要 TensorFlow,后者约为 600MB。 |
错误消息 | 简短、高级且可操作的错误消息。 | 冗长且难以理解的错误消息,通常与张量形状有关。 |
常见建模问题¶
在我的模型中添加一个空列会改变其质量。为什么?¶
YDF 训练是确定性的,受编译器优化和随机数生成器实现的影响。这意味着对于给定版本的 YDF,在相同数据上训练两次模型将产生相同的结果。
部分训练是随机的。例如,使用 attribute_sampling_ratio 参数随机选择特征。此随机选择使用伪随机数生成器执行,该生成器使用训练种子进行初始化。添加空列或打乱列顺序将改变随机生成结果,从而改变输出模型。此更改类似于改变随机种子。
杂项¶
YDF 支持哪些架构?¶
YDF 支持以下架构
- Manylinux2014 x86_64(将在后续版本中更新到更新的 manylinux 版本)。
- MaxOS Arm64
我们也发布 Windows 二进制文件,通常会在发布后稍有延迟。
以下架构可能可行,但目前我们不会发布其二进制文件
- Manylinux2014 aarch64(将在后续版本中更新到更新的 manylinux 版本)。
- MacOS Intel。
我的模型表现比使用库 XYZ 差/好,为什么?¶
虽然决策森林库实现了相似的算法,但它们通常会产生不同的结果。这些差异的主要原因通常是不同库中默认超参数值不同。例如,YDF 默认使用分治学习算法训练最大深度为 6 的 GBT。其他库可能使用其他默认超参数。
YDF 凭借其大量的可用技术和特征而引人注目。请参阅我们在 KDD 2023 上发表的题为《Yggdrasil Decision Forests: A Fast and Extensible Decision Forests Library》的论文,了解使用不同库训练的模型性能比较。
我可以使用 ydf.experimental 吗?¶
ydf.experimental
下的任何 API 都不应在生产环境中使用,并且可能发生故障、不稳定或速度慢。
是 PYDF 还是 YDF?¶
该库的名称就是 ydf
,相应的 Pip 包名称也是如此。在内部,团队有时会使用名称 PYDF,因为它非常贴切。
PYDF 如何发音?¶
首选发音是 "Py-dee-eff" / ˈpaɪˈdiˈɛf (IPA)。但由于它是一个内部名称,您完全不必发音。
我有一个本 FAQ 没有解答的重要问题!¶
您可以在 Github 上提出与 YDF 相关的问题。您也可以通过 decision-forests-contact@google.com 联系核心开发团队。