好玩的人工智能
快乐的深度学习

决策树:一种像人脑一样工作的算法

“太阳光穿过绿叶树”,杰里米·毕晓普在  Unsplash上

决策树是机器学习中最常用的算法之一,主要用于分类,也用于回归问题。每当我们在做出决定之前问自己一个问题时,我们的大脑就像决策树一样工作。例如:外面是阴天吗?如果是的话,我会带一把雨伞。

在训练数据集以对变量进行分类时,决策树的想法是基于特定特征值将数据划分为较小的数据集,直到目标变量全部属于一个类别。当人脑决定基于经验(即多云天空)选择“分裂特征”时,计算机基于最大信息增益分割数据集。让我们定义一个简单的问题并跳转到一些计算中,看看这意味着什么!


猫和狗数据集

假设我们想要建立一个决策树来确定宠物是基于体重和身高的猫还是狗。我们可以根据两个特征之一的某些值来划分这些数据点,例如:对于大于15磅的重量,我确信宠物是狗,至少基于这个非常简单的数据集。但是如果重量小于那个,我的子集将包含两只猫和一只狗,所以我需要再次拆分子集,直到只剩下一个类。换句话说,直到我所有的子集都是纯粹的。我实际上为这些数据值绘制了一个决策树,这是它的样子:

决策树示例。

每棵树都以一个根节点开始,即第一个分割。在不考虑太多的情况下,我们可以轻松地提出不同类型的根节点,以便在相同数量的步骤中将数据分成一个解决方案。但是计算机如何决定如何定义节点?当然,它将寻找最有效的方式,为了理解这是什么,我们需要引入基尼:“最常用的不等式测量”。该不等式是指节点后的每个子集中的目标类。因此,可以在每次拆分后计算,并且根据节点之后不等式的变化,我们也可以定义“信息增益”。

基尼的定义

为了计算基尼,我们考虑在节点之后找到每个类的概率,我们将这些值的平方加起来,然后从1中减去这个数量。因此,当一个子集是纯的(即它中只有一个类) ,基尼将为0,因为找到该等级的概率确实是1!在那种情况下,我们说我们已经达到了一片水平,因为在我们实现目标时不再需要分裂。但是如果我们看一下上面的图片,在False情况下的根节点之后,我们有一个包含3个观察的子集,其中2个是猫,1个是狗。如果我们想要计算该子集的基尼,我们有:

结果数据集的基尼系数,重量大于或等于15磅

可以用来计算类不等式的另一个度量标准是Entopy,而不是Gini。它们具有相同的目的,但熵的变化幅度略有不同; 但是,为此我们只会使用基尼。

根据我们选择的拆分策略,我们将为每个子集提供不同的Gini值,并且根据节点后的Gini值,我们可以定义信息增益:

信息增益的定义

这被定义为父母的基尼系数与儿童基尼系数的加权平均数之间的差异。如果我们参考上面的例子,通过简单地应用定义知道初始数据集的基尼系数等于0.48,我们可以计算根节点之后的信息增益(以15磅的重量值分割):

根节点后的信息增益

然后,决策树将考虑所有可能的分裂并选择具有最高信息增益的分裂。事实上,让我们做一些编码,看看根据Python的决策树是什么!


通过运行下面的代码,我们从头开始构建数据框,并仅在几行中拟合模型。

注意:在训练模型之前训练/测试分裂是很好的做法,以防止过度拟合并且还要仔细检查这种模型对看不见的数据的执行情况。在这种情况下,我跳过了这一步,因为数据帧只包含少量观察。

重要的是要指出,在实例化时

1
DecisionTreeClassifier

,我没有在括号中指定任何参数。在处理非常大的数据集时,为了防止Tree失去控制和过度拟合,查看

1
max_depth

指定树的最大分割级别数非常有用。此外,设置

1
max_features

一个参数可以限制在搜索最佳拆分时要查看的预测变量的数量。此外,如果您希望树基于Entropy而不是Gini进行优化,则只需

1
criterion = 'entropy'

在实例化对象时进行编写。如果要进一步探索如何调整模型,请参阅决策树文档

太棒了,我们建造了我们的模型 但那究竟是什么意思呢?决策树的美妙之处在于它易于解释,所以让我们绘制它!要运行下面的代码段,您可能需要先

1
!pip install pydotplus pydot2

在笔记本中运行  。

这段代码的输出将是下图。

很酷,对吗?在我上面的“手工制作”决策树中,我选择了15磅的重量作为我的根节点,算法决定拆分相同的变量,但是值为12.这就创造了一只只有狗的叶子(重量大于事实上,我们有gini = 0)。从根节点之后的True条件生成的子集已经在值8.5上的高度变量上进一步分割。最后一次拆分生成了两个带有空gini值的子集。

那么,我们为什么要或不应该使用决策树呢?以下是优缺点的简要列表:

优点

  • 这是非常可以解释的,特别是如果我们需要将我们的发现传达给非技术受众
  • 它可以很好地处理嘈杂或不完整的数据
  • 它可以用于回归和分类问题

缺点

  • 它可能不稳定,这意味着数据的微小变化可能会导致模型发生重大变化
  • 它倾向于过度拟合,这意味着低偏差但是方差很大:即使在列车数据得分很高的情况下,对看不见的数据也可能表现不佳

幸运的是,有许多技术可以处理过度拟合,这是决策树的主要缺点。通过使用套袋增强方法,我们可以从决策树概念开始,通过使用诸如

1
 

RandomForestClassifier

1
 

AdaBoostClassifier仅仅提及一对模型来开发更准确的分析。这些都是ensamble方法,但Random Forest通过boostrapping生成了许多“新数据集” (即用替换方法对原始数据帧进行采样); 它适合每个新数据帧的树,并通过平均森林中的所有树来预测。相反,Ada Boost是一个自适应树,它通过调整不正确的分类实例同时使用相同的数据帧来自学。

未经允许不得转载:零点智能 » 决策树:一种像人脑一样工作的算法
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

零点智能 人工智能社区,加Q群:469331966

投稿&建议&加Q群