从单个树创建 Tensorflow 决策森林

问题描述 投票:0回答:1

是否可以使用 TensorFlow 从许多单独的决策树构建决策森林?另外,根据某些性能标准删除和添加决策林中的单个树?让我们考虑一下,如果多个工作人员训练他们的树,并在过程结束时将他们的树发送到决策林中进行聚合。我计划在联邦学习中使用这个模型,其中服务器有一个决策林,设备发送它们的树进行聚合。

我觉得有点难以理解这个解决方案是否可行。

tensorflow decision-tree tensorflow-decision-forests
1个回答
0
投票

这里是 TF-DF 开发者。

在 TF-DF 中执行此操作是可能的(但可能非常慢),尽管这有点超出“正常”用例。您需要的关键工具是“模型检查器”(从模型构建器中提取树)和“模型构建器”(将树添加到模型中)。 这里有这些工具的教程。我将尝试概述主要步骤。

TF-DF 树可以用

tfdf.py_tree.tree.Tree
类表示。从现有模型中,您可以像这样提取一棵树:

tree_idx = 4  # Which tree to extract
insp = source_model.make_inspector()  # source_model is a TF-DF model
t = inspector.extract_tree(tree_idx=0)

现在我们使用树构建模型:

# Create some model
builder = tfdf.builder.RandomForestBuilder(
    path="/tmp/manual_model",
    objective=tfdf.py_tree.objective.ClassificationObjective(
        label="color", classes=["red", "blue", "green"]))
builder.add_tree(t)
# ... possibly add more trees
builder.close()

# Now load the model
manual_model = tf_keras.models.load_model("/tmp/manual_model")

您还可以使用 TF-DF 的姊妹库 YDF,它可以更快、更轻松地处理此任务。主要优点是YDF允许您直接在内存中修改模型,而TF-DF仅修改磁盘上的模型文件。 YDF模型可以导出为TF-DF,因此在许多情况下这将是更好的选择。修改模型的文档位于此处

在ydf中,上面的代码将是

import ydf  # Import the library
tree_idx = 4  # Which tree to extract
tree = source_model.get_tree(tree_idx)

现在我们使用树构建一个模型。请注意,这里的数据集仅用于定义输入特征,而不用于训练(因为模型是使用 0 棵树创建的)。

manual_model = model = ydf.RandomForestLearner(label="label", num_trees=0, task=ydf.Task.REGRESSION).train(dataset)
manual_model.add_tree(tree)  # Add the tree.
© www.soinside.com 2019 - 2024. All rights reserved.