决策树
决策树( decision tree )是一个树状图。其中,树里的每一个节点代表着对某一个属性的检验。例如,一次掷币试验出现正面还是反面。每一个分支代表一个检验的结果,每一个叶子节点代表一个类标签,即,经过所有属性计算后的决策结果。这样,从树根到叶子的不同路径代表了不同的分类规则。目标变量取离散值的树模型称分类树;目标变量取连续值的决策树称回归树。举个例子,根据周六上午的天气状况决定是否适合打网球。
each node: 检验一个特定的属性;
each branch from a node: 选择属性的一个值;
each leaf node: 预测是否适合打网球。
决策树适用的问题
实例由属性和互斥的属性值的集合表示。例如,属性 *Temperature, 值Hot, Mild, Cold.*
目标函数取离散的输出值。例如,图1的分类树给每一个实例一个二值分类( yes or no ).
训练集可能包括误差或缺失属性值。决策树学习方法对训练实例的分类误差和属性值误差是健壮的。
决策树学习
决策树学习使用带有类标签的训练实例构建一棵决策树。一棵决策树是一个类似流程图的结构,每一个内部节点代表一个对某属性的检验,每一个分支代表一个检验结果,每一个叶子节点则代表一个类标签。特别地,称树的最上层节点为根节点。常用的决策树学习算法有:
- ID3 (Iterative Dichotomiser 3)
- C4.5 ((successor of ID3)
- CART (Classification and Regression Tree)
下面,介绍基本的 ID3 算法:
ID3 算法初始将数据集 S 作为根节点。在算法的每一次迭代,对任一未使用的属性,计算集 S 的熵 H(s) (也称信息增益 IG(S) )。然后,选择具有最小熵(或最大信息增益)值的属性。集 S 随后根据所选属性(例如,人的年龄小于50,在50到100之间,还是大于100)被拆分成若干个数据子集。算法继续在子集上递归,仅仅考虑之前从未被选择的属性。子集上的递归遇到下列情况之一则停止:
子集中的每一个实例属于相同的类,那么节点变成了叶子节点,类标签为实例所属的类。
不再有未使用过的属性可选,但实例仍然不属于相同的类,那么节点变成了叶子节点,类标签为子集中多数实例所属的类。
子集中没有实例,这是因为在父集(上一层集)里没有实例对应所选属性的某个特定的值(例如,没有年龄大于100的人)。这时,也产生一个父集下的叶子节点,类标签为父集里多数实例所属的类。
纵观整个算法,在决策树构建过程中,每一个非终端节点代表一个选择的属性,数据依该属性的不同值被拆分,而终端节点代表分支最终的子集的类标签。
ID3 算法概要
计算每一个属性在数据集 S 上的熵;
根据最小熵(拆分后)的属性拆分集 S;
产生一个包含属性的决策树节点;
使用剩余的属性在子集上递归。
ID3 算法伪代码
ID3 (Examples, Target_Attribute, Attributes)
Create a root node for the tree
If all examples are positive,
Return the single-node tree Root, with label = +.
If all examples are negative,
Return the single-node tree Root, with label = -.
If number of predicting attributes is empty,
then Return the single node tree Root,
with label = most common value of the target attribute
in the examples.
Otherwise Begin
A ← The Attribute that best classifies examples.
Decision Tree attribute for Root = A.
For each possible value, vi, of A,
Add a new tree branch below Root, corresponding
to the test A = vi.
Let Examples(vi) be the subset of examples that
have the value vi for A
If Examples(vi) is empty
Then below this new branch add a leaf node
with label = most common target value
in the examples
Else
below this new branch add the subtree ID3
(Examples(vi), Target_Attribute,
Attributes – {A})
End
Return Root
ID3 算法测度
- 熵(Entropy)
熵 H(S) 度量数据集 S 的不确定性总量,定义为