我制作了一个程序,使用信息增益函数( Shanon entropy )训练基于 ID3 算法构建的决策树,以进行特征选择(分裂)。 一旦我训练了决策树,我就对其进行了测试以对看不见的数据进行分类,并且我意识到某些数据实例无法分类:树上没有对实例进行分类的路径。
一个例子(这是一个插图示例,但我遇到了更大,更复杂的数据集的相同问题):
a1
; a2
; a3
] b1
; b2
; b3
] y1
; y2
; y3
] 培训数据:
("a1", "b1", "y1");
("a1", "b2", "y2");
("a2", "b3", "y3");
("a3", "b3", "y1");
受过训练的树:
[f2]
/ | \
b1 b2 b3
/ | \
y1 y2 [f1]
/ \
a2 a3
/ \
y3 y1
无法使用给定树对实例("a1", "b3")
进行分类。
有几个问题出现在我面前:
答案 0 :(得分:2)
ID3决策树学习者不会发生这种情况---无论是使用信息增益还是其他启发式进行分割选择。 (例如,请参阅维基百科上的ID3 algorithm。)
上面示例中的“训练树”无法通过ID3决策树学习算法返回。
这是因为当算法选择一个d
- 值的属性(即具有d
个可能值的属性)来分割给定的叶子时,它将创建d
个新孩子(每个属性值一个)。特别是,在上面的示例中,节点[f1]
将有三个子节点,对应于属性值a1
,a2
和a3
。
从上一段(以及一般来说,从ID3算法的工作方式)开始,任何格式良好的矢量---形式为(v1, v2, ..., vn, y)
,其中vi
是一个值i
- 属性和y
是类值---应该可以通过算法在给定列车集上学习的决策树进行分类。
您是否介意提供用于学习“不完整”树的软件的链接?
回答你的问题:
不是我所知道的。学习这种“不完整的树木”是没有意义的。如果我们知道某些属性值永远不会发生,那么我们就不会将它们包含在规范(列出属性及其值的文件)中。
使用ID3算法,您可以证明 - 正如我在答案中所描绘的那样 - 算法返回的每棵树都将涵盖所有可能的组合。
您使用的是错误的算法。数据与它无关。
在决策树学习中没有不可分类的实例。人们通常如下定义决策树学习问题。给定S
格式x1,x2,...,xn
xi=(v1i,v2i,...,vni,yi)
格式vji
j
yi
xi
属性f: X -> Y
属性值X
示例Y
中的类值,学习一个函数(由决策树表示)f
,其中ftp
是所有可能格式良好的向量的空间(即所有可能的属性组合)值)和scp
是所有可能类值的空间,它最小化了错误函数(例如错误分类的例子的数量)。从这个定义中,您可以看到,要求函数UPDATE xtable set xvalue = N'Â?thisisatest'
能够将任何组合映射到类值;因此,根据定义,每个可能的实例都是可分类的。