使用决策树的目的是什么?

机器算法验证 机器学习
2022-03-05 03:10:48

我不明白决策树的目的是什么?在我看来,它是一系列 if-else。为什么我不只使用 if-else 而不是使用决策树?是因为它降低了我的代码的复杂性?

我仍然没有计算熵和信息增益,因为我只需插入规则就可以为它们预建算法,对吗?(如 ID3)

为什么我们现在将它与机器学习一起使用?因为我们甚至不必在需要之前制定规则?机器从训练数据中学习,并根据它可以预测结果的属性?

在我的代码中实现 ML 是否会更多地减少开销,并使我的代码更简单、更有效、更快?

3个回答

在我看来,它是一系列 if-else。为什么我不只使用 if-else 而不是使用决策树?

你是绝对正确的。决策树只不过是一系列 if-else 语句。然而,正是我们将这些语句解释为树的方式让我们能够自动构建这些规则......即给定一些输入示例集(X1,是的1),...,(Xñ,是的ñ)...描述什么价值的最佳规则是什么是的给出了新的输入X? ID3 等让我们自动创建这些规则。这不是关于树一旦建成的问题,而是关于我们如何创建它的。

除此之外,很少有人单独使用决策树,原因正是您所说的:它是一个非常简单的模型,缺乏表现力。但是,与其他模型相比,它有一个很大的优势:可以非常快速地计算单个决策树。这意味着我们可以提出在大数据集上训练许多决策树(增强,又名 AdaBoost 和 GradientBoosting)的算法。这些简单模型(称为森林)的集合(通常超过 500 个)然后可以表达更复杂的形状。

你也可以这样想象:给定一个“不错”(即连续)但复杂的函数F[一种,b]R我们可以尝试使用线条来近似这个函数。如果函数很复杂(比如s一世n(X)左右)然后我们会产生一个很大的错误。但是,我们可以按照划分区间的方式组合线[一种,b]分成更小的部分一种=一种0<一种1<...<一种=b并且在每个一种一世,一种一世+1我们试图近似F|(一种一世,一种一世+1)(那是,F限制在这个区间)由一行。通过基本数学(分析),如果我们采用足够多的行,我们就可以任意逼近函数(即产生任意小的误差)。因此,我们从非常简单的模型构建了一个复杂但准确的模型。这与(例如) GradientBoosting 使用的想法完全相同:它从非常“愚蠢”的单个决策树构建森林。

只是添加到@Fabian Werner 的答案-您还记得在集成介绍中使用 Riemann Sums 规则吗?好吧,这也是一组均匀划分的 if 语句,用于计算函数下的面积。

如果你画一个一维函数并均匀地绘制分区,你会发现在函数梯度很小的区域,相邻的分区可以合并在一起,而不会造成很大的精度损失。同样,在具有高梯度的分区中,添加更多分区将显着提高近似值。

任何一组分区都会逼近该函数,但有些分区显然比其他分区要好。

现在,转向 CART 模型——我们从这个函数中看到噪声点形式的数据,我们被要求对这个函数进行近似。通过添加太多的分区,我们可以过拟合并基本上执行最近邻类型的模型。为了避免这种情况,我们限制了模型可以使用的分区数量(通常以最大深度和每次分割的最小样本的形式)。那么现在我们应该把这些分割放在哪里呢?这就是拆分标准所要解决的问题。作为经验法则,具有较高“复杂性”的区域应该得到更多的分裂,这就是基尼系数、熵等努力做的事情。

做出预测只是 if-else 语句,但在机器学习的背景下,这并不是模型的力量所在。力量来自模型以可扩展的方式权衡过度和不足的能力,并且可以在具有数据限制的理论保证的一致概率框架中推导出来。最后,如果我们对 ML 模型采取类似的抽象观点,我们可以说神经网络、核方法、蒙特卡洛方法等等都是简单的加法和乘法。不幸的是,这不是一个非常有用的文献观点。

决策树是通过条件将问题域划分为子集。它通常被实现为级联的 if-then-elses。您可以将其视为描述复杂决策逻辑的术语。

与逻辑测试相比,决策树对机器学习的效率和“支持性”都不高。它们逻辑测试。

还要记住,任何算法只不过是算术计算和测试的组合,即(通常是巨大的)决策树。


为了完整起见,让我们提一下,在某些情况下,例如机器学习,复杂的决策树是由算法自动构建的。但这并没有改变他们的本性。