数据
我们从 Zoo 数据集中抽出10条用于展示决策树工作原理。其中 class
是预测目标特征,属于分类问题。
Zoo DataSet http://archive.ics.uci.edu/ml/machine-learning-databases/zoo/
Data Set Information: A simple database containing 17 Boolean-valued attributes. The “type” attribute appears to be the class attribute.
训练数据:
测试数据:
特征数据(如 legs
)中,1表示有,0表示无;目标特征(class
)中1到7代表不同的动物。
训练过程
- 寻找根节点的决策问题
# 计算用每一个特征、每一个值切分数据后的信息增益。挑出信息增益最大的作为最佳决策问题。
legs == 0 ? 0.1562499999999999
legs == 2 ? 0.049107142857142905
legs == 4 ? 0.2062500000000001
legs == 6 ? 0.2895833333333334
tail == 0 ? 0.15625
tail == 1 ? 0.15625
domestic == 0 ? 0.1205357142857143
domestic == 1 ? 0.1205357142857143
catsize == 0 ? 0.2895833333333334
catsize == 1 ? 0.2895833333333334
#最大信息增益是 0.289,对应的决策问题是 catsize == 1 ?。
# 这个问题作为根节点的决策问题
- 找到
catsize == 1 ?
是最佳决策问题;根据catsize == 1 ?
切分根节点数据集。
- 寻找左1节点的决策问题
# 计算用每一个特征、每一个值切分数据(剩下)后的信息增益。挑出最大的作为最佳决策问题。
legs == 0 ? 0.31999999999999984
legs == 2 ? 0.019999999999999796
legs == 4 ? 0.11999999999999983
tail == 0 ? 0.019999999999999796
tail == 1 ? 0.019999999999999796
domestic == 0 ? 0.0
catsize == 1 ? 0.0
#最大信息增益是 0.319,对应的决策问题是 legs == 0 ?。
# 这个问题作为左1节点的决策问题
- 找到
legs == 0 ?
是最佳决策问题;根据legs == 0 ?
切分左1节点数据集。
- 寻找左2节点的决策问题
# 计算用每一个特征、每一个值切分数据(剩下)后的信息增益。挑出最大的作为最佳决策问题。
legs == 0 ? 0.0
tail == 1 ? 0.0
domestic == 0 ? 0.0
catsize == 1 ? 0.0
#信息增益都是 0,本节点作为叶子节点。
- 寻找左2右节点的决策问题
# 计算用每一个特征、每一个值切分数据(剩下)后的信息增益。挑出最大的作为最佳决策问题。
legs == 2 ? 0.0
legs == 4 ? 0.0
tail == 0 ? 0.0
tail == 1 ? 0.0
domestic == 0 ? 0.0
catsize == 1 ? 0.0
#信息增益都是 0,本节点作为叶子节点。
- 寻找右1节点的决策问题
# 计算用每一个特征、每一个值切分数据(剩下)后的信息增益。挑出最大的作为最佳决策问题。
legs == 6 ? 0.0
tail == 0 ? 0.0
domestic == 0 ? 0.1111111111111111
domestic == 1 ? 0.11111111111111105
catsize == 0 ? 0.0
#最大信息增益是 0.11,对应的决策问题是 domestic == 0 ? 或 domestic == 1 ? 。
# 任选1个问题作为右1节点的决策问题
- 根据
domestic == 0 ?
切分左1节点数据集。
- 寻找右2左节点的决策问题
# 计算用每一个特征、每一个值切分数据(剩下)后的信息增益。挑出最大的作为最佳决策问题。
legs == 6 ? 0.0
tail == 0 ? 0.0
domestic == 0 ? 0.0
catsize == 0 ? 0.0
#信息增益都是 0,本节点作为叶子节点。
- 寻找右2右节点的决策问题
# 计算用每一个特征、每一个值切分数据(剩下)后的信息增益。挑出最大的作为最佳决策问题。
legs == 6 ? 0.0
tail == 0 ? 0.0
domestic == 1 ? 0.0
catsize == 0 ? 0.0
#信息增益都是 0,本节点作为叶子节点。
最终训练好的决策树长这样
catsize == 1 ?
--> True:
legs == 0 ?
--> True:
Predict {4: 1}
--> False:
Predict {1: 4}
--> False:
domestic == 0 ?
--> True:
Predict {7: 1, 6: 1}
--> False:
Predict {6: 1}
预测过程
测试数据示例1
分流的决策问题序列如下
catsize == 1 ?
--> True:
legs == 0 ?
--> False:
Predict {1: 4}
预测结果为1,实际分类是2,因此分类错误。
测试数据示例2
分流的决策问题序列如下
catsize == 1 ?
--> True:
legs == 0 ?
--> False:
Predict {1: 4}
预测结果为1,实际分类也是1,因此分类正确。
…
…
测试了 20条测试数据示例,$分类正确数/20=0.76$