决策树技术在数据挖掘的分类领域中被广泛采用。采用决策树从一致决策表(即条件属性值相同的样本其决策值相同)中挖掘有价值信息的相关研究较为成熟,而对于非一致决策表(即条件属性值相同的样本其决策值不同)采用决策树进行数据挖掘是当前研究热点。本文基于贪心算法的思想,提出了一种非一致决策表的决策树分析方法。首先使用多值决策方法处理非一致决策表,将非一致决策表转换成多值决策表(即用一个集合表示样本的多个决策值);然后根据贪心选择思想,使用不纯度函数和不确定性相关指标设计贪心选择策略;最后使用贪心选择设计决策树构造算法实现决策树构造。通过实例说明了所提出的权值和贪心选择指标能够比已有的最大权值贪心选择指标生成规模更小的决策树。 Decision tree is a widely used technique to discover patterns from consistent data set. But if the data set is inconsistent, where there are groups of examples with equal values of conditional attributes but different decisions (values of the decision attribute), then to discover the essential patterns or knowledge from the data set is challenging. Based on the greedy algorithm, we propose a new approach to construct a decision tree for inconsistent decision table. Firstly, an inconsistent decision table is transformed into a many-valued decision table. After that, we develop a greedy algorithm using “weighted sum” as the impurity and uncertainty measure to construct a decision tree for inconsistent decision tables. An illustration example is used to show that our “weighted sum” measure is better than the existing “weighted max” measure to reduce the size of constructed decision tree.
许美玲,乔 莹,曾 静,莫毓昌,钟发荣
浙江师范大学数理与信息工程学院,浙江 金华
收稿日期:2016年10月5日;录用日期:2016年10月23日;发布日期:2016年10月28日
决策树技术在数据挖掘的分类领域中被广泛采用。采用决策树从一致决策表(即条件属性值相同的样本其决策值相同)中挖掘有价值信息的相关研究较为成熟,而对于非一致决策表(即条件属性值相同的样本其决策值不同)采用决策树进行数据挖掘是当前研究热点。本文基于贪心算法的思想,提出了一种非一致决策表的决策树分析方法。首先使用多值决策方法处理非一致决策表,将非一致决策表转换成多值决策表(即用一个集合表示样本的多个决策值);然后根据贪心选择思想,使用不纯度函数和不确定性相关指标设计贪心选择策略;最后使用贪心选择设计决策树构造算法实现决策树构造。通过实例说明了所提出的权值和贪心选择指标能够比已有的最大权值贪心选择指标生成规模更小的决策树。
关键词 :数据挖掘,非一致决策表,多值决策,贪心算法
一致决策表或单值决策表指的是在给定的决策表中样本的条件属性值相同,并且决策值也相同。但是在实际情况下所分析的数据更多的是非一致决策表,即决策表中样本的条件属性值相同但决策值不同。
对于非一致决策表,一个样本具有多个决策值,目标是为每个样本找出一个决策值。该方法适用于典型的优化问题 [
本文基于贪心算法 [
本文剩余部分组织如下:第二节介绍多值决策表的构造;第三节提出决策树构造方法;第四节进行实例说明,并比较由不同的不纯度函数构造的决策树的大小;最后一节总结全文并介绍下一步工作。
在分析非一致决策表时,可以把它们转换为已有的决策表。例如在粗糙集理论 [
和GD,MCD方法不同,本文使用多值决策(many-valued decision, MVD)方法处理非一致决策表,将非一致决策表转换成多值决策表 [
一个多值决策表T用一个矩形表示,每一列表示条件属性f1,…,fn,每一行用非负整数表示对应的条件属性值。如果是字符串类型的属性值,那么将其转为非负整数。不出现相同的样本(即不出现重复的行),样本的多个决策用一个非空有限集合表示,如表5所示。N(T)表示T中样本的数量(即行数)。
从决策表T中删除一些样本后得到的表称为T的子表,子表用T(fi1, a1)…(fim, am)表示,fi1,…,fim表示条件属性,a1,…,am表示对应的条件属性值。例如,在表6中子表T(f1, 1)由表5中的第1、2、3个样本组成。同样,表7中子表T(f1, 1) (f2, 1)由表5中的第1、3个样本组成。
如果一个决策属于决策表T中所有决策集,那么称这个决策为决策表T的公共决策,如表7中子表T(f1, 1) (f2, 1)的公共决策是3。如果决策表T没有任何样本或者有一个公共决策,那么称这个决策表为退化表,如表8所示。
E(T)表示决策表T中条件属性值非一致的属性集合。例如,在决策表T中,E(T) = {f1, f2, f3}。同样,在子表T(f1, 1)中,E(T(f1, 1)) = {f2, f3},因为在T(f1, 1)中,属性f1的值是一致的。对于fi ∈E(T),E(T, fi)表示决策表T中条件属性fi对应的属性值集合。例如,决策表T中条件属性f1对应的属性值集合表示为E(T, f1) = {0, 1}。
决策表T中,出现次数最多并且数值最小的决策称为最常用决策。例如,决策表T(f1, 1)中最常用决策是1。因为决策1,3在决策集中都出现了两次但1在数值上是最小的,所以1是最常用决策。Nmcd(T)表示决策表T中包含最常用决策的样本数量。
在由多值决策表T构造的决策树中,每个叶子节点代表一个决策(一个自然数),每个非叶子节点代表条件属性集合{f1, …, fn}中的一个属性,每个非叶子节点有多条边(即每个条件属性具有多个属性值)。例如,二元属性有两条边,分别用0和1表示。
Γ表示决策表T构造的决策树,v表示Γ的节点。T(v)表示T的子表,如果v是决策树的根节点,那么T(v) = T,否则T(v)就是决策表T的子表T(fi1,δ1)…(fim,δm),条件属性为fi1,…,fim对应的属性值为δ1,…,δm,分别代表从根节点到节点v整条路径上的节点和边。决策树Γ满足以下条件:
1) 如果T(v)是退化表,那么节点v用公共决策标记。
2) 如果T(v)不是退化表,那么节点v用fi标记,fi∈E(T(v)),如果E(T(v), fi) = {a1, …, ak},那么节点v有k条边,分别用a1,…,ak表示。
例如,图1是由一个多值决策表构造的决策树。如果节点v用一个非叶子节点f3标记,那么与v对应的子表T(v)就是T(f1, 0)。同样,与叶子节点2对应的子表是T(f1, 0) (f3, 1),并且2是公共决策。
在贪心算法中,我们需要选择合适的属性将决策表分区,即形成更小的子表,直到我们得到可以用于标记叶子节点的退化表。不纯度函数用于计算当前分区的不确定性,不纯度函数值越小,则表示该分
f1 | f2 | f3 | |
---|---|---|---|
0 | 0 | 0 | 2 |
1 | 0 | 0 | 3 |
0 | 2 | 1 | 2 |
0 | 2 | 0 | 1 |
0 | 0 | 0 | 3 |
1 | 0 | 0 | 1 |
0 | 2 | 1 | 3 |
0 | 2 | 0 | 4 |
1 | 1 | 2 | 3 |
表1. 决策表T0
f1 | f2 | f3 | |
---|---|---|---|
0 | 0 | 0 | 1 |
1 | 0 | 0 | 2 |
0 | 2 | 1 | 3 |
0 | 2 | 0 | 4 |
表2. 决策表
f1 | f2 | f3 | |
---|---|---|---|
0 | 0 | 0 | 2 |
1 | 0 | 0 | 1 |
0 | 2 | 1 | 2 |
0 | 2 | 0 | 1 |
表3. 决策表
f1 | f2 | f3 | |
---|---|---|---|
0 | 0 | 0 | {2,3} |
1 | 0 | 0 | {1,3} |
0 | 2 | 1 | {2,3} |
0 | 2 | 0 | {1,4} |
表4. 决策表
f1 | f2 | f3 | |
---|---|---|---|
1 | 1 | 1 | {3} |
1 | 0 | 1 | {1,2} |
1 | 1 | 0 | {1,3} |
0 | 1 | 1 | {2,3} |
0 | 0 | 1 | {1,2,3} |
0 | 1 | 0 | {2} |
1 | 1 | 1 | {3} |
表5. 多值决策表T
f1 | f2 | f3 | |
---|---|---|---|
1 | 1 | 1 | {3} |
1 | 0 | 1 | {1,2} |
1 | 1 | 0 | {1,3} |
表6. 子表
f1 | f2 | f3 | |
---|---|---|---|
1 | 1 | 1 | {3} |
1 | 1 | 0 | {1,3} |
表7. 子表
f1 | f2 | f3 | |
---|---|---|---|
1 | 1 | 1 | {3} |
1 | 1 | 0 | {1,3} |
0 | 1 | 1 | {2,3} |
0 | 0 | 1 | {1,2,3} |
表8. 退化表
图1. 多值决策表构建的决策树
区的不确定性越小,即分区质量越高。我们使用不纯度函数来评估分区的质量,从而选择合适的分区构造决策树。通过计算分区的不确定性指标,从而计算不纯度函数。如果有一个公共决策,那么不确定性指标为0。
1) 不确定性指标:不确定性指标U是从非空多值决策表集合到真实数值集合的函数,因此,U(T) ≥ 0,当且仅当是退化表时,U(T) = 0。我们选择错分误差 [
错分误差:me(T) = N(T) − Nmcd(T),N(T)表示T中样本的数量(即行数),Nmcd(T)表示决策表T中包含最常用决策的样本数量。计算决策表T中所有样本数量和包含最常用决策样本数量之间的差值。
2) 不纯度函数:U是一个不确定性指标,fi∈E(T), E(T, fi) = {a1, …, at},属性fi把决策表T分成t个子表:T1 = T(fi, a1), …, Tt = T(fi, at)。我们将不纯度函数做如下定义:
权值和:
根据多值决策表,采用贪心策略、自顶向下递归构造决策树。首先初始化决策树,用决策表标记根节点,然后判断决策表的不确定指标是否为0,如果不确定指标为0,则用决策表中的公共决策代替决策表标记根节点;如果不确定指标不为0,则计算决策表中每个条件属性对应的不纯度函数,选择函数值最小的属性,当函数值相同时,选择下标最小的属性,将其作为分裂节点,并代替决策表标记根节点,根据所选属性的属性值创建节点,各个节点用对应的子表标记,分裂节点到各个节点上的边用对应的属性值表示,按上述步骤递归创建决策树各个节点。当树中所有节点都没有用表标记时,停止树的构造,输出决策树。
具体的决策树构造算法如表9所示。
本节通过实例(见表10)分析说明本文所提出的基于权值和指标贪心选择策略的决策树分析过程,并和已有文献 [
首先创建决策树G的根节点,并用表T标记该节点,然后自顶向下循环创建决策树各个节点。第一次循环中,选择的子表T′为表T,即T′ = T,树G中只有一个根节点v,所以用T′标记节点v。因为U(T′) ≠ 0,所以对于每个fi,fi∈E(T′) = {f1, f2, f3},使用表10中的数据分别计算不纯度函数I(T′, f1)、I(T′, f2)、I(T′, f3)的值,通过计算可知,I(T′, f1) = 41,I(T′, f2) = 38,I(T′, f3) = 47,I(T′, f2)值最小,用f2代替T′标记节点v,对于每个δ,δ ∈E(T′, f2) = {0, 1, 2},在树G中加入节点v0,v1,v2,分别与连接节点v相连并将边标记为0,1,2,分别用子表T(f2, 0),T(f2, 1),T(f2, 2)标记节点v0,v1,v2,结果如图2所示。
然后从子表T(f2, 0),T(f2, 1),T(f2, 2)中选择一个子表,比如选择T(f2, 0)即T′ = T(f2, 0)。因为U(T′) ≠ 0,所以对于每个fi,fi∈E(T′) = {f1, f3},使用表11分别计算不纯度函数I(T′, f1)、I(T′, f3)的值,通过计算可知,I(T′, f1) = 0,I(T′, f3) = 0,但是i值取最小,所以选择f1,用f1代替T′标记节点v0,对于每个δ,δ ∈E(T′, f1) = {0, 1, 2},在树G中加入节点v0,v1,v2,分别与连接节点f1相连并将边标记为0,1,2,分别用子表T(f2, 0) (f1, 0)、T(f2, 0) (f1, 1)、T(f2, 0) (f1, 2)标记节点v0,v1,v2,结果如图3所示。重复上述过程得到最终的决策树(图4)。
为了和已有文献 [
本文基于贪心算法思想,提出了一种非一致决策表的决策树分析方法。采用多值决策将非一致决策
输入:一个多值决策表T,含有n个条件属性f1, …, fn 输出:返回一棵决策树 | |
---|---|
构造树G的根节点,用表T标记 While (true) do if 树G中的所有节点都没有用表标记,then 返回树G else 选择树中的一个节点v,用表T的一个子表T′标记节点v if U(T′) = 0 then 用子表T′中的公共决策代替子表T′标记节点v else 对于每个fi,fi∈E(T’),计算不纯度函数I(T′, fi)的值;选择不纯度函数值最小(当不纯度函数值相同时,选择对应i值最小)的属性,记为fi0;用fi0代替子表T′标记节点v;对于每个δ,δ∈E(T′, fi),在树G中加入节点vδ,用子表T′(fi0, δ)标记;用δ表示从节点v到节点vδ的边。 end if end if end while |
表9. 决策树构造算法
f1 | f2 | f3 | |
---|---|---|---|
1 | 1 | 1 | {3} |
1 | 0 | 1 | {1,2} |
1 | 1 | 0 | {1,3} |
0 | 1 | 1 | {2,3} |
0 | 0 | 1 | {1,2,3} |
0 | 1 | 0 | {2} |
1 | 0 | 0 | {1,3} |
0 | 0 | 0 | {2,3,4} |
1 | 2 | 0 | {4} |
2 | 1 | 0 | {2} |
0 | 1 | 2 | {1,3,4} |
0 | 2 | 1 | {2,3,4} |
1 | 1 | 2 | {1,3} |
1 | 2 | 1 | {2,4} |
2 | 1 | 1 | {4} |
2 | 2 | 0 | {3,4} |
0 | 2 | 2 | {1,2} |
2 | 0 | 2 | {2,4} |
1 | 2 | 2 | {3,4} |
2 | 1 | 2 | {1,3} |
表10. 多值决策表T
f1 | f2 | f3 | |
---|---|---|---|
1 | 0 | 1 | {1,2} |
0 | 0 | 1 | {1,2,3} |
1 | 0 | 0 | {1,3} |
0 | 0 | 0 | {2,3,4} |
2 | 0 | 2 | {2,4} |
表11. 多值决策表
图2. 第一步贪心选择构造的决策树
图3. 第二步贪心选择构造的决策树
图4. 使用权值和贪心选择指标构造的最终决策树
图5. 使用最大权值贪心选择指标构造的最终决策树
表转换成多值决策表,使用不纯度函数和不确定指标设计决策树构造算法,实现决策树的构造。现实生活中经常会遇到非一致决策表的数据分类问题,例如,邮政局报刊征订部门根据以往客户订购报刊杂志类型的历史记录,预测客户可能订购的刊物类型,而刊物类型具有多个分类属性;具有多个语义标注的图像视频分类问题;以及基因组的功能分类等问题,通过该方法可以处理上述非一致决策表的数据分类问题。我们的下一步工作是寻找更好的贪心指标,并与动态规划算法进行比较,实现更好的决策树分析方法。
国家自然科学基金面上项目(61572442, 61272130)浙江省科技厅公益性技术应用研究项目( 2015C 33085)浙江省教育厅项目(Y201226127)。
许美玲,乔莹,曾静,莫毓昌,钟发荣. 非一致决策表的决策树分析Decision Tree Analysis for Inconsistent Decision Tables[J]. 计算机科学与应用, 2016, 06(10): 597-606. http://dx.doi.org/10.12677/CSA.2016.610074