跳到正文

常见问题

关于 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 联系核心开发团队。