0、概述
分类决策树模型是一种描述对实例进行分类的树形结构。决策树由结点和有向边组成。
结点有两种类型:内部节点和叶节点,内部节点表示一个特征或属性,叶节点表示一个类。
分类的时候,从根节点开始,对实例的某一个特征进行测试,根据测试结果,将实例分配到其子结点;
此时,每一个子结点对应着该特征的一个取值。如此递归向下移动,直至达到叶结点,最后将实例分配到叶结点的类中。
1、介绍
1.1、工作原理
对训练数据进行建模,决策树模型呈树形结构,在分类问题中,表示基于特征对实例进行分类的过程。
它可以认为是if-then规则的集合,也可以认为是定义在特征空间与类空间上的条件概率分布。
1.2、优点,缺点,适用范围
优点:计算复杂度不高,输出结果易于理解,对中间值的缺失不敏感,可以处理不相关特征数据。
缺点:可能会产生过渡匹配问题。
适用范围:数值型和标称型
1.3、一般流程
收集数据:可以使用任何方法。
准备数据:树构造算法只适用于标称型数据,因此数值型数据必须离散化。
分析数据:可以使用任何方法,构造树完成之后,我们应该检查图形是否符合预期。
训练算法:构造树的数据结构。
测试算法:使用经验树计算错误率。
使用算法:此步骤可以适用于任何监督学习算法,而使用决策树可以更好地理解数据的内在含义。
2、实现
2.1、伪代码
1 | # 创建分支伪代码函数createBranch()如下所示: |
2.2、信息增益
划分数据集的大原则是:将无序的数据变得更加有序。
决策树是通过什么来选择树根,树枝,叶子的呢?这里不得提到两个概念:信息增益和熵。
信息增益:在划分数据集之前之后信息发生的变化称为信息增益。
熵:集合信息的度量方式称为熵。
如果待分类的事务可能分在多个分类之中,则符号x${i}$的信息定义为:
$$
l(x{i}) = - \log2 p(x{i})
$$
其中p(x${i}$)是选择该分类的概率。
为了计算熵,我们需要计算所有类别所有可能值包含的信息期望值,公式如下:
$$
H = -\sum{i=1}^{n}p(x_{i})\log2 p(x{i})
$$
2.3、python实现
1 | def calcShannoEnt(dataSet): |
3、总结
决策树算法稍微有点复杂,后面还会涉及到剪枝。目前只接触到二叉树,也就是说一个特征值
要么是,要么否,不知道支不支持多分支,看算应该是支持多分支的,有待继续学习。深刻感
觉到理论的重要性,香农熵的概念是这个算法的核心,如果没有选择最优特征值的算法,无法
确定最优二叉树。