在An Introduction to Statistical Learning with Applications in R中,作者写道,拟合决策树非常快,但这对我来说没有意义。该算法必须遍历每个特征并以各种可能的方式对其进行分区,以找到最佳分割。对于具有 观察值的数字特征,这可能会导致每个特征都有 分区。
我是否误解了二进制拆分的工作原理?或者有没有理由让这个算法不会花很长时间?
在An Introduction to Statistical Learning with Applications in R中,作者写道,拟合决策树非常快,但这对我来说没有意义。该算法必须遍历每个特征并以各种可能的方式对其进行分区,以找到最佳分割。对于具有 观察值的数字特征,这可能会导致每个特征都有 分区。
我是否误解了二进制拆分的工作原理?或者有没有理由让这个算法不会花很长时间?
决策树算法在适合一棵树时不会计算所有可能的树。如果他们这样做了,他们将解决一个NP 难题问题。决策树拟合算法通常在拟合过程中做出贪婪决策——在每个阶段,它们优化子问题以找到与给定节点中的数据的最佳分割,并在拟合过程中继续前进。此外,随着您深入决策树,您将拥有一组较小的数据,这些数据已进入给定节点,因此您将针对较小的数据子集优化拆分规则。所有这些选择都是对给定节点中数据的线性扫描。这并不复杂,但如果您有大量的观测值或大量的协变量要拆分,则计算上可能会变得有些昂贵。但是,很多工作可以拆分并发送到不同的机器上进行处理,因此有多种方法可以构建您的计算架构以扩大规模。
用于构建决策树的 CART 和 C4.5 算法之间存在一些差异。例如,CART 使用 Gini Impurity 来挑选特征,而 C.4.5 使用 Shannon Entropy。我认为这些差异与答案无关,所以我不会区分它们。
使决策树比您想象的更快的原因是:
and
会产生更好的树。这意味着您在进行特征工程时应该非常小心/聪明。例如,假设您试图预测人们喝了多少酒,您可能想要对诸如new_feature = hour > 22 & hour < 4 & (friday_night | saturday_night)
. 决策树可能会遗漏这些规则,或者赋予它们应有的重要性。X <= 1
X <= 1.5
X <= 2
. Secondly, when you compute X <= 1
X <= 1.5
, and I give you another value , you can cheaply update your average doing, . 被计算为总和的一部分,可以很容易地对样本进行增量计算。xgboost
如此之快的原因。梯度提升是顺序的,不能并行化,但树本身可以。只是为了丰富答案,
分层轴平行决策树速度很快(CART,C4.5),但还有其他替代方案,例如非分层决策树或执行不倾斜分区的决策树,尽管它们可能更准确。如果您有兴趣,请查看以下参考资料(它们不是详尽的选择)。
非分层:
Grubinger, T.、Zeileis, A. 和 Pfeiffer, K.-.,2014。Evtree:RJStat.Software 中全局最优分类和回归树的进化学习 61 (1), 1-29。
斜劈:
Murthy, SK, Kasif, S. 和 Salzberg, S., 1994。倾斜决策树的归纳系统。J.人工。英特尔。水库。2(1),1-32。http://dx.doi.org/doi:10.1613/jair.63。Cantú-Paz, E. 和 Kamath, C., 2003。用进化算法诱导倾斜决策树。IEEE Trans。进化。计算。7(1),54-68。http://dx.doi.org/10.1109/TEVC.2002.806857。Heath, D.、Kasif, S. 和 Salzberg, S.,1993 年。倾斜决策树的归纳。J.人工。英特尔。水库。2 (2), 1002-1007。
祝你好运!