注:本系列所有博客将持续更新并发布在github上,您可以通过github下载本系列所有文章笔记文件。
1 算法概述
我们每天都做着各种形形色色的决策——周末怎么嗨、是否买下衣服、出差选哪种交通工具等等,这些决策的过程我们用图形的形式表现出来就是一种类似树形的结构,将这种决策思想应用到机器学习算法领域,那就是我们本文要说的决策树算法。
决策树算法属于有监督学习算法的一员,在决策前需要先根据先验数据进行学习,构建并训练出一个决策树模型。决策树模型中每一个非叶子结点代表着一个特征属性,其下每一个分支都代表对该特征属性值域的不同取值划分,每一个叶子结点代表一个输出分类。应用模型进行决策时,从第一个非叶子结点(根节点)开始,根据特征属性和值选择分支直到最后的叶子结点,最后的叶子结点所代表的分类就是最终的决策结果。
决策树算法的本质是根据训练数据进行学习,构建一颗最优的决策树。之所以说最优,是因为对于同一个数据集,在不同的策略下可能构造出不一样的决策树。假设我们有如下一个数据集,用于判断同事是否是程序员(纯属瞎编娱乐,请勿深究):
我们可能构建出下面这棵树:
也有可能构建出下面这棵树:
甚至还有其他结构的决策树。对于不同结构的决策树,当然对决策的效率,甚至是准确率都是有所影响,那么,怎么构建一颗最优的决策树呢?
我们知道,决策树是一种递归的逻辑结构,其每一个节点都可以作为一棵树,那么,我们只需要做到每个节点最优,就可以保证整个决策树最优。所以,对于构建一颗决策树,如何选择最优分裂特征属性,即从当前数据的特征中选择一个特征属性作为当前节点的划分标准,使分裂后各子树的样本子集的“纯度”越来越高。
在决策树算法中,根据选择最优分裂特征属性的策略不同,分为多种决策树算法,最经典的就是ID3、C4.5、CART,本文主要ID3和C4.5两种分类树,CART由于其特殊性,将在下一篇博客中介绍。
2 ID3决策树算法
之前说过,选择分裂特征属性时,分裂后的样本子集“纯度”越高越好,对于这个纯度,有一个专门的概念用于量化衡量——信息熵(entropy)。
信息熵是信息论中的概念,通常简称为熵,表示随机变量不确定性或者说混乱程度。设当前样本集合
在ID3决策树算法中,采用信息增益作为选择最优分裂特征属性的标准。假设
特征属性
属性
我们已上面表格中用于判断同事是否是程序员的数据为例,通过实例感受一下ID3算法。
首先计算整个数据集的熵:
采用属性
那么,属性
用同样的方法可以计算出属性
对比三个属性的信息增益,显然属性
使用属性
ID3算法是经典的决策树构建算法,结构简单清晰、灵活方便,但存在以下不足:
(1)在选择最优分裂特征属性时,偏好于多取值的特征属性。在选择最优分裂特征属性时,某特征属性的取值越多,分裂后的数据子集就越多,子集中类别相对而言就可能更少,数据“纯度”更高,信息增益更大,所以更有可能被选为当前分裂节点的特征属性。如果还不理解,那么,我们将这种情况极端化,数据集中都有一个ID属性,如果以ID作为分裂特征属性计算信息增益时,每一条数据都是一个分裂,那么多有分裂的分裂后的熵都是0,多以信息增益一定是1,一定会被选为最优分裂特征属性。
(2)不能处理连续型特征属性。
(3)没有树剪枝过程,容易发生过拟合现象。
针对ID3决策树算法的不足,有大能进行优化改进,于是就有了C4.5决策树算法。
3 C4.5决策树算法
C4.5决策树算法是在ID3决策树算法基础上发展而来,所以总体而言,两者是极其相似的。当然,既然说发展,就肯定有更进一步改进的内容。
(1)信息增益率
上文提过,ID3决策树算法在选择最优分裂特征属性时,偏好于多取值的特征属性,针对这一问题,C4.5决策树算法不再以信息增益作为选择选最优分裂特征属性的标准,而在选择在信息增益基础上更进一步计算获得的信息增益率作为选择最优分裂特征属性的标准。
在介绍信息增益率之前,还得说说“内部信息”的定义:
内部信息
用信息增益率替代信息增益作为最优分裂特征属性的选择标准,就可以很好的解决ID3决策树算法在选择最优分裂特征属性时,偏好于多取值的特征属性的问题。
(2)连续型特征属性处理
对于连续型特征属性,C4.5算法采用的策略是采用二分法将特征属性离散化。假设数据集
在计算各特征属性的信息增益率时,就可以用最优划分点二分离散化之后的
对于缺失值处理和树剪枝,又是一个大话题了,可以参考这篇文档,本文不再叙述。