我一直在使用catboost算法,我很难看到使用对称树的重点。在这方面,我发现他们的github:
算法的一个重要部分是它使用对称树并逐级构建它们。 对称树是一个树,每个级别的节点使用相同的分割。这允许使用idex将路径编码为叶子。 例如,存在深度为2的树。第一级的分割是f1 <2,第二级的分割是f2 <4。 然后f1 = 5,f2 = 0的对象将具有数字01b的叶子。
他们说,它有助于减少过度拟合,并且有更快的推理,但直观地说,就像你需要两倍的深度才能探索相同数量的分裂。
那么,任何人都可以解释使用这种树的实际优势吗?
非常感谢。
答案 0 :(得分:0)
由于这是 Google 搜索中的第一个结果,我将提供答案。
典型的决策树是一系列 if/else 决策。假设您可以在每个处理器周期做出 1 个这样的决定——这会很快,但 100% 是连续的。要做出决定,您需要 O(m)
次决定,其中 m
是树的最大高度。
在 CatBoost 的对称树中,每个分割都在同一个属性上。要确定向左还是向右,您只需要知道树的当前级别,它对应于一个特征及其值。该阈值对于该级别上的所有分组都是相同的。通过这种方式,您可以向量化您的决策——创建一个阈值向量,一个您当前用于预测的值向量,并按元素进行比较。如果你有一个向量处理器,即它可以并行执行多个整数比较(这在现在很常见),你需要 1 个处理器周期来做出决定。
区别,如您所见,归结为向量化,能够在向量元素比较的 1 步中直接从根到叶,而不是 if/其他决定。