当前位置:   article > 正文

Python 中的决策树_python决策树

python决策树

决策树

决策树是用于分类和回归任务的监督学习算法,我们将在决策树教程的第一部分集中讨论分类。
决策树被分配给基于信息的学习算法,这些算法使用不同的信息增益度量进行学习。我们可以将决策树用于我们有连续但也有分类输入和目标特征的问题。决策树的主要思想是找到那些包含关于目标特征的最多“信息”的描述性特征,然后沿着这些特征的值分割数据集,使得生成的 sub_datasets 的目标特征值尽可能纯 - -> 最纯粹地留下目标特征的描述性特征被认为是信息量最大的特征。这个寻找“信息量最大”特征的过程一直完成,直到我们完成一个停止标准,然后我们最终在所谓的叶节点中结束. 叶节点包含我们将对呈现给我们训练模型的新查询实例进行的预测。这是可能的,因为模型已经学习了训练数据的底层结构,因此可以在给定一些假设的情况下对未见过的查询实例的目标特征值(类)进行预测。
决策树主要由根节点内部节点叶节点组成,这些节点通过分支连接。

决策树的结构

决策树被进一步细分,无论目标特征是像房价这样连续缩放还是像动物物种那样分类缩放。

连续和分类缩放的数据

简单来说,训练决策树和预测查询实例的目标特征的过程如下:

1. 呈现一个包含多个训练实例的数据集,这些实例具有多个描述性特征和一个目标特征

2. 通过在训练过程中使用信息增益的度量,沿着描述性特征的值连续分割目标特征来训练决策树模型

3. 生长树直到我们完成一个停止条件 --> 创建代表我们想要对新查询实例进行的预测的叶节点

4. 向树显示查询实例并沿着树向下运行,直到我们到达叶节点

5. 完成 - 恭喜您找到问题的答案

决策树训练和预测程序

那么在知道之前我们知道什么?

原则上,决策树可用于通过基于已知目标特征值的现有数据构建模型(监督学习)来预测未知查询实例的目标特征。此外,我们知道该模型可以对未知查询实例进行预测,因为它对已知描述特征和已知目标特征之间的关系进行建模。在我们的以下示例中,树模型分别学习“特定动物物种的样子”以及动物物种特有的描述性特征值的组合。
此外,我们知道要训练决策树模型,我们需要一个由许多训练示例组成的数据集,这些示例具有许多描述性特征和一个目标特征。

在知道之前我们不知道的是:我们如何构建树模型。

为了回答这个问题,我们应该概括一下我们尝试使用决策树模型实现的目标。我们希望,给定一个数据集,训练一个模型,该模型学习描述性特征和目标特征之间的关系,以便我们可以向模型呈现一组新的、未见过的查询实例,并预测这些查询实例的目标特征值。让我们进一步概括一下决策树的一般形状。我们知道我们在树叶节点的底部有包含(在最佳情况下)目标特征值。为了使这更具有说明性,我们使用 UCI 机器学习动物园动物分类数据集的简化版本作为实际示例,其中包括作为描述特征的动物属性以及作为目标特征。在我们的示例中,根据动物是否有齿、有腿和呼吸,将动物分类为哺乳动物或爬行动物。数据集如下所示:

 熊猫 导入 pd

数据 =  pd 数据帧({ “齿” :[ “真” “真” “真” “假” “真” “真” “真” “真” “真” “假” ],
                     “头发” :[ “真” “真” “假” “真” “真” “真” “假”
                     :[ “真” “真” “真” “真” “真” “真” “假” “真” “真” “真” ],
                     “腿” :[ “真” " "真" "假" "真" "真" "真" "假" "假" "真" "真"], 
                     "物种" :[ "哺乳动物" , "哺乳动物" , "爬行动物" ,“哺乳动物” “哺乳动物” “哺乳动物” “爬行动物” “爬行动物” “哺乳动物” “爬行动物” ]}, 
                    列= [ “牙齿” “头发” “呼吸” “腿” “物种" ])

特征 = 数据[[ “牙齿” “头发” “呼吸” “腿” ]]
目标 = 数据[ “物种” ]

数据

因此,回到我们最初的问题,每个叶节点(在最好的情况下)应该只包含“哺乳动物”或“爬行动物”。我们现在的任务是找到拆分数据集的最佳“方式”,以便实现这一目标。当我说split时我是什么意思?考虑上面的数据集,并考虑必须做什么才能将数据集拆分为仅包含哺乳动物作为目标特征值(物种)的数据集 1 和仅包含爬行动物的数据集 2。为了实现这一点,在这个简化的示例中,我们只需要描述性特征hair,因为如果 hair 为 TRUE,则相关物种始终是 Mammal。因此,在这种情况下,我们的树模型将如下所示:

决策树分裂过程

也就是说,我们通过询问动物是否有头发的问题来分割我们的数据集。而正是这种询问和分裂是决策树模型的关键。现在在这种情况下,拆分非常容易,因为我们只有少量的描述性特征,并且数据集完全可以根据一个描述性特征的值进行分离。然而,大多数时候数据集并不是那么容易分离,我们必须多次拆分数据集(“多问一个问题”)。这里,直接出现下一个问题:鉴于我们必须多次拆分数据集,即提出多个问题来分离数据集,我们应该从哪个描述性特征(根节点)开始,以及我们应该以什么顺序提出问题(构建内部节点),也就是说,使用描述性特征来分割数据集?好吧,我们已经看到使用头发描述特征似乎占据了关于目标特征的最多信息,因为我们只需要这个特征来完美地分割数据集。因此,测量特征的“信息量”并使用“信息量最大”的特征作为应该用于分割数据的特征将是有用的。从现在开始,我们使用术语信息增益作为特征的“信息量”的度量。在下一节中,我们将介绍一些数学术语并推导如何计算信息增益以及如何基于此构建树模型。

决策树背后的数学

在上一节中,我们介绍了信息增益作为描述性特征适合拆分数据集的程度的衡量标准。为了能够计算信息增益,我们必须首先引入数据集的。数据集的熵用于衡量数据集的杂质,我们将在计算中使用这种信息量度量。还有其他类型的度量可用于计算信息增益。最突出的是:基尼指数、卡方、信息增益比、方差. 术语熵(在信息论中)可以追溯到 Claude E. Shannon。熵背后的想法,简而言之,如下:想象你有一个包含 100 个绿球的彩票轮盘。彩票轮内的一组球可以说是完全纯净的,因为只包括绿色球。用熵的术语来表达这一点,这组球的熵为 0(我们也可以说零杂质)。现在考虑,其中 30 个球被红色球取代,20 个球被蓝色球取代。

纯数据集和不纯数据集

如果您现在从彩票轮中抽取另一个球,则收到绿球的概率已从 1.0 下降到 0.5。由于杂质增加,纯度降低,因此熵也增加。因此我们可以说,数据集越“不纯”,熵就越高,而数据集越不“不纯”,熵越低。香农的熵模型使用对数函数 (升○G2(磷(X))) 来测量数据集的熵和杂质,因为获得特定结果的概率越高 == P(x)(随机绘制一个绿球),越接近二元对数 1。

导入 numpy 作为 np
导入 matplotlib.pyplot 作为 plt

无花果= plt 图() 
ax =. add_subplot ( 111 )

斧头绘图( np . linspace ( 0.01 , 1 ), np . log2 ( np . linspace ( 0.01 , 1 ))) 
ax . set_xlabel ( "P(x)" ) 
ax set_ylabel ( "log2(P(x))" )

PLT 显示()

一旦数据集包含多于一种“类型”的元素,特别是多于一个目标特征值,杂质将大于零。因此,数据集的熵也将大于零。因此,假设我们将从目标特征值空间中随机抽取值,将每个可能的目标特征值的熵相加并通过获得这些值的概率对其加权是有用的(仅通过机会?正好是 0.5,因此我们必须用 0.5 对为绿色球计算的熵进行加权)。这最终导致作为信息增益计算基线的香农熵的正式定义:

H(X)=-∑F○r 克 ∈吨一个rG电子吨(磷(X=克)*升○G2(磷(X=克)))

其中我们说 P(x=k) 是概率,即目标特征采用特定值 k。因此,将这个公式应用到我们得到的三个彩色球的例子中:

绿球: H(X=Gr电子电子n)=0.5*升○G2(0.5)=-0.5
蓝色球: H(X=乙升你电子)=0.2*升○G2(0.2)=-0.464
红球: H(X=r电子d)=0.3*升○G2(0.3)=-0.521

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/330894
推荐阅读
相关标签
  

闽ICP备14008679号