全部版块 我的主页
论坛 数据科学与人工智能 人工智能 机器学习
786 0
2020-09-18
决策树是最古老,使用最广泛的机器学习模型之一,这是因为决策树可以很好地处理嘈杂或丢失的数据,可以很容易地组合起来形成更强大的预测器,并且在运行时非常快。而且,您可以直接可视化模型学习到的逻辑,这意味着对于模型可解释性很重要的领域,它是一个非常受欢迎的模型。

决策树很容易直观地理解,让我们看一个例子
下载.png
注意:根据定义的逻辑,决策树的使用是从顶部开始,然后逐级下降。这称为递归二进制拆分。

对于那些想知道的人–是的,我在深夜写这篇文章时正在喝茶。现在让我们开始吧!

分类
让我们看一下二维特征集,看看如何从数据构造决策树。目的是构建一个决策边界,以便我们可以区别于当前的各个类。

Screen-Shot-2017-03-11-at-9.51.20-PM.png
关于如何制作决策树将新数据点分类为“ x”或“ o”的任何想法?这就是我所做的。
Screen-Shot-2017-03-11-at-10.15.37-PM.png
运行一些方案,看看是否同意。看起来不错?凉。现在,我们为该数据集创建了一个决策树。唯一的问题是我创建了拆分逻辑。如果我们能有一台机器为我们做到这一点,那就更好了。但是如何?

如果您从抽象的角度分析我们正在做的事情,那么我们将获取数据的一个子集,并确定进一步拆分该子集的最佳方式。我们最初的子集是整个数据集,我们根据规则将其拆分\[x1<3.5\]。然后,对于每个子集,我们执行额外的拆分,直到能够正确分类每个数据点。

信息增益与熵
我们如何判断分割数据的最佳方式?简而言之,我们希望以一种能够为我们提供最多信息量的方式来分割数据,换句话说,就是最大化信息增益。回到前面的例子,我们可以在\[x1<10\]。但是,这本质上将是无用的拆分并提供零信息增益。为了数学上量化信息增益,我们引入了熵的概念。
\[−∑ipilog2(pi)\]
熵可以计算为所有类别的总和,其中 \[pi\]是类中数据点的分数 i。这本质上表示给定数据子集的杂质或噪声。同质的数据集的熵为零,而完全随机的数据集的最大熵为1。利用这一知识,我们可以简单地将信息增益等同为噪声的减少。

信息增益

=

(parent)−[

加权平均

]

(children)

在这里,我们正在比较拆分数据之前(父级)和拆分之后(子级)的数据噪声。如果熵由于数据集中的分裂而减少,它将产生信息增益。决策树分类器将根据产生最高信息增益的功能进行拆分。这是一个递归过程;此过程的停止标准包括继续拆分数据,直到(1)树能够正确分类每个数据点;(2)通过进一步拆分下降到给定阈值以下的信息增益;(3)节点的样本数少于一些特定的阈值,(4)树已达到最大深度,或(5)类似地,另一个参数要求结束分割。
避免过度拟合的技术
通常,您可能会发现自己对数据过度拟合了模型,这在引入新数据时通常不利于模型的性能。为防止这种过度拟合,您可以做的一件事就是定义一些参数,以结束递归拆分过程。如前所述,这可能是一个参数,例如最大树深或split中所需的最小样本数。控制这些模型超参数是抵消过度拟合的最简单方法。

当考虑数据中的新拆分时,您也可以简单地执行显着性检验,并且如果该拆分不提供统计上重要的信息(通过显着性检验获得),那么您将不会在给定节点上执行任何进一步的拆分。

另一种技术被称为修剪。在这里,我们将在您的训练数据集上完全生长一个决策树,然后返回并在新的验证数据集上评估其性能。对于每个节点,我们评估它的拆分是否对验证数据集的性能有用或有害。然后,我们删除那些对决策树性能造成最大损害的节点。

退化拆分
使用信息增益评估拆分有时会带来问题。特别地,它倾向于支持具有大量可能值的特征。假设我有一个数据集,该数据集根据温度,风速,阴天和当月日期等特征来确定是否选择6月航行。如果我创建了一个包含30个子节点的决策树(第1天,第2天,...,第30天),则可以轻松构建一棵准确地对数据进行分区的树。但是,这是一项无用的功能,因为在我输入7月份(在训练数据集之外)的第二秒,我的决策树不知道我是否可能会航行。避免这种情况的一种方法是分配成本函数(在这种情况下,为收益率),以防止我们的算法选择提供大量子集的属性。

范例程式码
这是一个决策树分类器的示例实现,用于对我们之前研究的花卉物种数据集进行分类。
复制代码
没有任何参数调整,我们看到的准确性为94.9%,还不错!sklearn中的决策树分类器具有一组详尽的参数,可以最大程度地控制分类器。这些参数包括:评估分割的标准(此博客文章讨论了使用熵来计算信息增益,但是,您也可以使用称为Gini杂质的东西),最大树深度,在叶节点处所需的最小样本数以及还有很多。

回归
一般而言,回归模型能够获取可变输入并从连续范围预测输出。但是,决策树回归不能产生连续的输出。相反,这些模型是根据一组示例进行训练的,这些示例的输出处于连续范围内。这些训练示例在决策树中进行分区,以给定节点结尾的新示例将采用驻留在同一节点中的训练示例值的平均值。

看起来像这样。
download--1-.png
好吧,但是我们怎么到达那里呢?如前所述,一般过程与决策树分类器非常相似,但有一些小的变化。

确定最佳分割
我们仍将以递归方式构建树,以便在进行数据拆分时使用,但是我们需要一种确定最佳拆分的新方法。对于分类,我们使用信息熵(也可以使用基尼系数或卡方方法)来确定哪个拆分为有关新示例的类的信息提供了最大的收益。对于回归,我们并不是要预测一个类,而是希望在给定输入条件的情况下生成一个输出。因此,我们需要一种确定最佳拟合的新方法。

一种方法是测量拆分是否会导致数据中方差的减少。如果拆分有用,则子节点的合并加权方差将小于父节点的原始方差。我们可以继续对数据集进行递归拆分,直到有效地将总体方差减小到某个阈值以下,或者达到另一个停止参数(例如达到定义的最大深度)为止。请注意,当您遍历决策树时,均方误差将如何减小。

避免过度拟合
防止过度拟合的技术与决策树分类器大致相同。但是,似乎实际上没有多少人花时间修剪决策树以进行回归,而是选择使用随机森林回归器(决策树的集合),后者比单一优化的森林更不适合过度拟合并具有更好的性能树。在随机森林上使用决策树的常见论点是决策树更易于解释,您只需查看决策树逻辑即可。但是,在随机森林中,您将不需要研究500种不同树的决策树逻辑。对我们来说幸运的是,仍然有一些方法可以保持随机森林中的可解释性,而无需手动研究每棵树。

实作
这是我用来生成上面图形的代码。
复制代码






二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群