数据挖掘决策树算法ID3和C4.5
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
再返回之前的天气数据的树桩:属性outlook将数据集分裂成3个子集,规模 分别为5,4,5,因此不考虑子集中所包含的类别,产生一个内在的信息值: info([5,4,5])=1.577 bit 得到outlook属性的增益率为:(0.940-0.693)/1.577=0.157 类似的可以计算出 其他属性树桩的增益率: temperature属性的增益率为:(0.940-0.911)/info(4,6,4)=0.019 humidity属性的增益率为:(0.940-0.788)/info(7,7)=0.152 wind属性的增益率为:(0.940-0.693)/1.577=0.049
根节点
叶子节点
决策节点
叶子节点
叶子节点
步骤:
1.决策树的生成:由训练样本数据集(根据历史
数据生成、有一定综合程度的用于数据分析处
理的数据集)生成
2.决策树的剪枝:采用新的样本数据集(测试数
据集或者训练数据修剪集)检验决策树生成过
程中产生的初步规则,将影响预测准确性的分
支剪除。
ID3决策树算法描述
yes yes yes no no no no
yes yes yes yes yes yes no
分别计算它们的信息增益为: gain(temperature)=0.029 bit gain(humidity)=0.152 bit gain(wind)=0.048 bit
将这些属性的信息增益的值进行比较,信息增益最大的属性节点将作为 决策树的根节点。所以我们选择outlook属性作为根节点,它是唯一一 个获得了全纯子节点,这就为超越其他所有属性赢得了相当大的优势。 而湿度属性是第二个最佳选择,因为它产生了一个几乎是全纯且较大 的子节点。 根节点确定了,接着继续进行这种递归过程。 下面是outlook属性值为sunny时的节点进一步分支的可能性:
选择属性作为根
产生分支
计算信息增益
选择max增益
是 数据进一步分裂? 否 结束 算法流程图
信息值(熵)、信息增益的概念
熵:
entropy(p1,p2,...,pn)=-p1logp1-p2logp2••••-pnlogpn 使用负号是因为分数p1,p2,...,pn的对数值是负数,而 熵是一个正数。熵是以位bit位单位的,公式里的 p1,p2,...,pn他们的和为1。
多属性是连续的,不能够用一个确定的标准来对其进行划分。C4.5 使用下面的一系列处理过程来对连续的属性划分成离散的属性,进而
达到能够建立决策树的目的。
• C4.5对ID3进行了一系列改进。这些改进包括处理数值属性、残缺值、 后剪枝的方法。(将训练数据分为成长集和修剪集)
C4.5算法做出的改进
• (1)用信息增益率来选择属性 • (2)可以处理连续数值型属性
对标志码属性进行分裂而产生的树桩如下,这个属性值的类别所需的信 息量是: info([0,1])+info([0,1])+info([1,0])+......+info([1,0])+info([0,1])= 0 bit
标志码
标志码属性的信息增益就是在根节点上的信息量 a b 即:gain(标志码)=info([9,5])=0.940 bit它比在 其他任何属性上获得的信息增益值大,毫无疑问 no no 标志码将被选为分裂属性,但是在标志码属性 上的分支对预测未知实例的类别没有任何帮助, 也没能够描述任何有关决策的结构。
yes yes yes yes
因此树桩所获得的信息增益为: gain(outlook)=info([9,5])-info([2,3],[4,0],[3,2]) 在叶子节点上的yes和no类的实例数量 =0.940-0.693=0.247 bit 分别是[2,3]、[4,0]、[3,2],因此,这些 节点上的信息值分别是: info([2,3])=entropy(2/5,3/5)=0.971 bit info([4,0])=entropy(1,0)=0 bit info([3,2])=entropy(3/5,2/5)=0.971 bit
• 1.试探性地选择一个属性放置在根节点,并对该属性的每 个值产生一个分支。 • 2.分裂根节点上的数据集,并移到子女节点,产生一棵局 部树。 • 3.对该划分的信息增益进行计算。 • 4.对其他属性重复该过程。 • 5.每个用于划分的属性产生一棵局部树。 • 6.根据局部树的信息增益值,选择一棵增益最大的属性的 局部树。 • 7.对选定的局部树的每个子女节点重复以上1-6步。 • 8.这是一个递归过程。如果一个节点上的所有实例都具有 相同的类,则停止局部树的生长。
outlook属性的树桩
outlook sunny yes yes no no no rainy overcast yes yes yes no no 然后计算这些叶子节点的平均信息值, 并考虑到达每个分支的实例数量: 有5个实例到达第一和第三个分支; 4个实例到达第二个分支:那么平均信息值 info([2,3],[4,0],[3,2]) =(5/14)*0.971+(4/14)*0+(5/14)*0.971 =0.693 bit 在任何初始树创建之前,处于根节点的 训练样本由9个yes和5个no组成, 与之相对应的信息值:info([9,5])=0.940 bit
entropy(p,q,r)=entropy(p,q+r)+(q+r)*entropy(q/(q+r),r/(q+r))
我们需要一种度量来表示节点的纯度,并需要这种 度量告诉我们根据一个变量的属性值将一个不纯 的节点上的数据划分到其子女后,纯度提高了多 少。最为广泛使用的度量是信息值(熵)。(以天 气数据为例)
• 我们希望从上面的实例中找出者若干条规 则,使得能够对这些实例的类做出判断 (理想情况下)(举例) • if outlook=sunny and =high then play =no • if humidity= normal then play=yes 第二条规则错分了一个实例样本
决策节点: 1.最上面的节点称为根节点,是整个决策树的开始。 2.每个节点子节点的个数与决策树在用的算法有关。 (二叉树、多叉树) 分支:判断过程,要么是新的决策节点,要么是叶子 树叶:树的结尾,每个叶子代表一个类别
标志码 a b c d e f g h i j k l m n outlook sunny sunny overcast rainy rainy rainy overcast sunny sunny rainy sunny overcast overcast rainy temperature hot hot hot mild cool cool cool mild cool mild mild mild hot mild humidity high high high high normal normal normal high normal normal normal high normal high windy FALSE TRUE FALSE FALSE FALSE TRUE TRUE FALSE FALSE FALSE TRUE TRUE FALSE TRUE play no no yes yes yes no yes no yes yes yes yes yes no
数据挖掘
决策树的建立 Decision Tree
学习数据挖掘的工具-weka
• weka是用Java语言编写的完整的软件资源 • Explorer是weka的主要图形用户界面 • weka存储数据的原始方式是ARFF或CSV 文件格式 • ARFF文件是由一组实例组成,并且每组实 例的属性值由逗号分开。(属性的类别)
在选择某节点上的分枝属性时,对于离散型描述属性,C4.5的处理方法与ID3相同,按 照该属性本身的取值个数进行计算;对于某个连续性描述属性Ac,假设在某个结点上
他们的信息增益分别为: gain(temperature)=0.571 bit
gain(humidity)=0.971 bit
gain(wind)=0.4Hale Waihona Puke Baidu3 bit
因此选择湿度属性作为在这一个节点的分裂属性,在随之产生的子节点 上并不需要进一步分裂,因为叶子节点都是全纯子节点,所以这个分 支就结束了。 继续应用这样的思想方法,将产生关于天气数据的决策树,如下图所示。 理想的停止条件是所有叶子节点都是纯的,也就是当叶子节点包含的 实例拥有相同的类别。然而,也许并不可能达到这种理想状态,因为 当训练集里包含2个拥有相同属性值,但是属于不同类别的样本时, 递归过程将不可能停止。所以停止条件应为当数据不能被进一步分裂 时。
temperature、humidity、wind属性的树桩
temperature hot yes yes no no cool mild yes yes yes yes no no yes yes yes no high humidity normal false yes yes yes yes yes yes no no wind true yes yes yes no no no
•
由此可以看出,在上述4个属性中outlook属性的结果依然排在首位,
而humidity属性以一个更为接近的值排在第二位,因为它将数据集分
裂成2个子集而不是3个。在这个例子中,标志码属性的增益率(0.247) 任然是最高的,然而,它的优势已经大大降低了。
ID3算法最初的定义是假设属性值是离散值,但在实际环境中,有很
outlook sunny temperature hot no no mild yes no cool yes sunny sunny humidity high no no no normal yes yes false yes no no outlook outlook
wind
true yes no
c
·· m · yes
n no
yes
由此可见,采用度量信息增益的方法会倾向于选择拥有较多可能 属性值的属性。为了弥补这一缺陷,一个称之为增益率(gain ratio) 的度量修正被广范的采用。
•
上例所有的计数值均为1,因此分裂信后的信息值是: info([1,…,1])=-1/14 x log (1/14 )x 14=logl4(3.807位) 分支越多,该值越大。 具有较高分支的属性,该固有的信息值较高。 增益率,由信息增益除以该固有信息值得到。 例:得到标志码的增益率为 0.940 / 3.807 = 0.247
天气数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14
outlook sunny sunny overcast rainy rainy rainy overcast sunny sunny rainy sunny overcast overcast rainy temperature hot hot hot mild cool cool cool mild cool mild mild mild hot mild humidity high high high high normal normal normal high normal normal normal high normal high windy FALSE TRUE FALSE FALSE FALSE TRUE TRUE FALSE FALSE FALSE TRUE TRUE FALSE TRUE play no no yes yes yes no yes no yes yes yes yes yes no
outlook sunny humidity high no normal yes rainy overcast yes false yes wind true no
天气数据的决策树
ID3算法的不足及改进
当一些属性拥有的可能值得数量很大,从而使分支的路径增加,产生 出很多子节点时,计算信息增益就会出现一个问题。用一个极端的例 子来说明:当数据集的某个属性对于每一个实例存在一个不同属性值 时,比如,一个标志码属性。
根节点
叶子节点
决策节点
叶子节点
叶子节点
步骤:
1.决策树的生成:由训练样本数据集(根据历史
数据生成、有一定综合程度的用于数据分析处
理的数据集)生成
2.决策树的剪枝:采用新的样本数据集(测试数
据集或者训练数据修剪集)检验决策树生成过
程中产生的初步规则,将影响预测准确性的分
支剪除。
ID3决策树算法描述
yes yes yes no no no no
yes yes yes yes yes yes no
分别计算它们的信息增益为: gain(temperature)=0.029 bit gain(humidity)=0.152 bit gain(wind)=0.048 bit
将这些属性的信息增益的值进行比较,信息增益最大的属性节点将作为 决策树的根节点。所以我们选择outlook属性作为根节点,它是唯一一 个获得了全纯子节点,这就为超越其他所有属性赢得了相当大的优势。 而湿度属性是第二个最佳选择,因为它产生了一个几乎是全纯且较大 的子节点。 根节点确定了,接着继续进行这种递归过程。 下面是outlook属性值为sunny时的节点进一步分支的可能性:
选择属性作为根
产生分支
计算信息增益
选择max增益
是 数据进一步分裂? 否 结束 算法流程图
信息值(熵)、信息增益的概念
熵:
entropy(p1,p2,...,pn)=-p1logp1-p2logp2••••-pnlogpn 使用负号是因为分数p1,p2,...,pn的对数值是负数,而 熵是一个正数。熵是以位bit位单位的,公式里的 p1,p2,...,pn他们的和为1。
多属性是连续的,不能够用一个确定的标准来对其进行划分。C4.5 使用下面的一系列处理过程来对连续的属性划分成离散的属性,进而
达到能够建立决策树的目的。
• C4.5对ID3进行了一系列改进。这些改进包括处理数值属性、残缺值、 后剪枝的方法。(将训练数据分为成长集和修剪集)
C4.5算法做出的改进
• (1)用信息增益率来选择属性 • (2)可以处理连续数值型属性
对标志码属性进行分裂而产生的树桩如下,这个属性值的类别所需的信 息量是: info([0,1])+info([0,1])+info([1,0])+......+info([1,0])+info([0,1])= 0 bit
标志码
标志码属性的信息增益就是在根节点上的信息量 a b 即:gain(标志码)=info([9,5])=0.940 bit它比在 其他任何属性上获得的信息增益值大,毫无疑问 no no 标志码将被选为分裂属性,但是在标志码属性 上的分支对预测未知实例的类别没有任何帮助, 也没能够描述任何有关决策的结构。
yes yes yes yes
因此树桩所获得的信息增益为: gain(outlook)=info([9,5])-info([2,3],[4,0],[3,2]) 在叶子节点上的yes和no类的实例数量 =0.940-0.693=0.247 bit 分别是[2,3]、[4,0]、[3,2],因此,这些 节点上的信息值分别是: info([2,3])=entropy(2/5,3/5)=0.971 bit info([4,0])=entropy(1,0)=0 bit info([3,2])=entropy(3/5,2/5)=0.971 bit
• 1.试探性地选择一个属性放置在根节点,并对该属性的每 个值产生一个分支。 • 2.分裂根节点上的数据集,并移到子女节点,产生一棵局 部树。 • 3.对该划分的信息增益进行计算。 • 4.对其他属性重复该过程。 • 5.每个用于划分的属性产生一棵局部树。 • 6.根据局部树的信息增益值,选择一棵增益最大的属性的 局部树。 • 7.对选定的局部树的每个子女节点重复以上1-6步。 • 8.这是一个递归过程。如果一个节点上的所有实例都具有 相同的类,则停止局部树的生长。
outlook属性的树桩
outlook sunny yes yes no no no rainy overcast yes yes yes no no 然后计算这些叶子节点的平均信息值, 并考虑到达每个分支的实例数量: 有5个实例到达第一和第三个分支; 4个实例到达第二个分支:那么平均信息值 info([2,3],[4,0],[3,2]) =(5/14)*0.971+(4/14)*0+(5/14)*0.971 =0.693 bit 在任何初始树创建之前,处于根节点的 训练样本由9个yes和5个no组成, 与之相对应的信息值:info([9,5])=0.940 bit
entropy(p,q,r)=entropy(p,q+r)+(q+r)*entropy(q/(q+r),r/(q+r))
我们需要一种度量来表示节点的纯度,并需要这种 度量告诉我们根据一个变量的属性值将一个不纯 的节点上的数据划分到其子女后,纯度提高了多 少。最为广泛使用的度量是信息值(熵)。(以天 气数据为例)
• 我们希望从上面的实例中找出者若干条规 则,使得能够对这些实例的类做出判断 (理想情况下)(举例) • if outlook=sunny and =high then play =no • if humidity= normal then play=yes 第二条规则错分了一个实例样本
决策节点: 1.最上面的节点称为根节点,是整个决策树的开始。 2.每个节点子节点的个数与决策树在用的算法有关。 (二叉树、多叉树) 分支:判断过程,要么是新的决策节点,要么是叶子 树叶:树的结尾,每个叶子代表一个类别
标志码 a b c d e f g h i j k l m n outlook sunny sunny overcast rainy rainy rainy overcast sunny sunny rainy sunny overcast overcast rainy temperature hot hot hot mild cool cool cool mild cool mild mild mild hot mild humidity high high high high normal normal normal high normal normal normal high normal high windy FALSE TRUE FALSE FALSE FALSE TRUE TRUE FALSE FALSE FALSE TRUE TRUE FALSE TRUE play no no yes yes yes no yes no yes yes yes yes yes no
数据挖掘
决策树的建立 Decision Tree
学习数据挖掘的工具-weka
• weka是用Java语言编写的完整的软件资源 • Explorer是weka的主要图形用户界面 • weka存储数据的原始方式是ARFF或CSV 文件格式 • ARFF文件是由一组实例组成,并且每组实 例的属性值由逗号分开。(属性的类别)
在选择某节点上的分枝属性时,对于离散型描述属性,C4.5的处理方法与ID3相同,按 照该属性本身的取值个数进行计算;对于某个连续性描述属性Ac,假设在某个结点上
他们的信息增益分别为: gain(temperature)=0.571 bit
gain(humidity)=0.971 bit
gain(wind)=0.4Hale Waihona Puke Baidu3 bit
因此选择湿度属性作为在这一个节点的分裂属性,在随之产生的子节点 上并不需要进一步分裂,因为叶子节点都是全纯子节点,所以这个分 支就结束了。 继续应用这样的思想方法,将产生关于天气数据的决策树,如下图所示。 理想的停止条件是所有叶子节点都是纯的,也就是当叶子节点包含的 实例拥有相同的类别。然而,也许并不可能达到这种理想状态,因为 当训练集里包含2个拥有相同属性值,但是属于不同类别的样本时, 递归过程将不可能停止。所以停止条件应为当数据不能被进一步分裂 时。
temperature、humidity、wind属性的树桩
temperature hot yes yes no no cool mild yes yes yes yes no no yes yes yes no high humidity normal false yes yes yes yes yes yes no no wind true yes yes yes no no no
•
由此可以看出,在上述4个属性中outlook属性的结果依然排在首位,
而humidity属性以一个更为接近的值排在第二位,因为它将数据集分
裂成2个子集而不是3个。在这个例子中,标志码属性的增益率(0.247) 任然是最高的,然而,它的优势已经大大降低了。
ID3算法最初的定义是假设属性值是离散值,但在实际环境中,有很
outlook sunny temperature hot no no mild yes no cool yes sunny sunny humidity high no no no normal yes yes false yes no no outlook outlook
wind
true yes no
c
·· m · yes
n no
yes
由此可见,采用度量信息增益的方法会倾向于选择拥有较多可能 属性值的属性。为了弥补这一缺陷,一个称之为增益率(gain ratio) 的度量修正被广范的采用。
•
上例所有的计数值均为1,因此分裂信后的信息值是: info([1,…,1])=-1/14 x log (1/14 )x 14=logl4(3.807位) 分支越多,该值越大。 具有较高分支的属性,该固有的信息值较高。 增益率,由信息增益除以该固有信息值得到。 例:得到标志码的增益率为 0.940 / 3.807 = 0.247
天气数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14
outlook sunny sunny overcast rainy rainy rainy overcast sunny sunny rainy sunny overcast overcast rainy temperature hot hot hot mild cool cool cool mild cool mild mild mild hot mild humidity high high high high normal normal normal high normal normal normal high normal high windy FALSE TRUE FALSE FALSE FALSE TRUE TRUE FALSE FALSE FALSE TRUE TRUE FALSE TRUE play no no yes yes yes no yes no yes yes yes yes yes no
outlook sunny humidity high no normal yes rainy overcast yes false yes wind true no
天气数据的决策树
ID3算法的不足及改进
当一些属性拥有的可能值得数量很大,从而使分支的路径增加,产生 出很多子节点时,计算信息增益就会出现一个问题。用一个极端的例 子来说明:当数据集的某个属性对于每一个实例存在一个不同属性值 时,比如,一个标志码属性。