决策树(decision tree)是一类常见的机器学习方法。顾名思义,决策树是基于树结构来进行决策的,这恰是人类在面临决策问题时一种很自然的处理机制。一颗决策树包含一个根节点、若干个内部节点和若干个叶节点。叶节点对应于决策结果,其他每个节点则对应于一个属性测试。
决策树学习的目的是从样本数据产生一颗泛化能力强的决策树,其基本流程遵循简单且直观的“分而治之”策略:
代码语言:javascript复制Function createBranch 检测数据集中的每个子项是否属于同一分类:
If so return 类标签
Else
寻找划分数据集的最好特征
划分数据集
创建分支节点
for 每个划分的子集
调用createBranch并增加返回结果到分支节点中
return 分支节点
算法有两个要点:
- 寻找划分数据集的最好特征
- 递归
划分数据集的大原则是:将无序的数据变得更加有序。组织杂乱无章数据的一种方法就是使用信息论度量信息,信息论是量化处理信息的分支科学。
在划分数据集之前和之后信息发生的变化成为信息增益,获得信息增益最高的特征就是最好的选择。
“信息熵”(information entropy)是度量样本集合纯度最常用的一种指标。其定义为:
其中p(xi)是选择该分类的概率,n是分类的数目。分类的概率可以用所有类标签的发生频率来计算。
对每个特征划分数据集的结果计算一次信息熵,然后判断按照哪个特征划分数据集是最好的划分方式。
得到原始数据集,然后基于最好的属性值划分数据集,由于特征值可能多于两个,因此可能存在大于两个分支的数据集划分。第一次划分之后,数据将被向下传递到树分支的下一个节点,在这个节点上,我们可以再次划分数据,可以采用递归的原则处理数据集。
递归结束的条件是:程序遍历完所有划分数据集的属性,或者每个分支下的所有实例都具有相同的分类。
本章使用的算法成为ID3,无法直接处理数值型数据,尽管我们可以通过量化的方法将数值型数据转化为标称型数值,但如果存在太多的特征划分,ID3算法仍然会面临其他问题。
参考
- 《机器学习实战》, p32 ~ 52
- 《机器学习》, p73 ~ 79