4

我一直在研究 catboost 算法,我很难看出使用对称树的意义。在这方面,我在他们的 github 中发现:

该算法的一个重要部分是它使用对称树并逐级构建它们。对称树是一棵树,其中每个级别的节点使用相同的拆分。这允许使用 idex 对叶子的路径进行编码。例如,有一棵深度为 2 的树。第一层的拆分是 f1<2,第二层的拆分是 f2<4。那么 f1=5, f2=0 的对象将有编号为 01b 的叶子。

他们说这有助于减少过度拟合并进行更快的推理,但对我来说,直觉上,这就像你需要两倍的深度来探索相同数量的分割。

那么,任何人都可以解释使用这种类型的树的实际优势是什么?

非常感谢。

4

1 回答 1

1

由于这是谷歌搜索的第一个结果,我将提供答案。

典型的决策树是一系列 if/else 决策。假设您可以在每个处理器周期做出 1 个这样的决定——这将很快,但 100% 是连续的。要做出决定,您需要做出决定,树的最大高度在O(m)哪里。m

在 CatBoost 的对称树中,每个拆分都在同一个属性上。要确定你是向左还是向右,你只需要知道树的当前级别,它对应于一个特征及其值。该阈值对于该级别上的所有拆分都是相同的。这样,您可以向量化您的决策 - 创建一个阈值向量,一个您当前用于预测的值向量,并逐个元素地比较它们。如果你有一个向量处理器,即它可以并行执行多个整数比较(这在现在很常见),你需要 1 个处理器周期来做出决定。

如您所见,差异归结为向量化,能够在向量元素比较的 1 步中直接从根到叶,而不是 if/else 决策的顺序。

于 2021-04-09T19:00:23.133 回答