一、算法原理
决策树(decision tree)是一个树结构(可以是二叉树或非二叉树)。其每个非叶节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个类别。使用决策树进行决策的过程就是从根节点开始,测试待分类项中相应的特征属性,并按照其值选择输出分支,直到到达叶子节点,将叶子节点存放的类别作为决策结果。决策树是一种十分常用的分类方法。它是一种监管学习,所谓监管学习就是给定一堆样本,每个样本都有一组属性和一个类别,这些类别是事先确定的,那么通过学习得到一个分类器,这个分类器能够对新出现的对象给出正确的分类。这样的机器学习就被称之为监督学习。分类本质上就是一个map的过程。C4.5分类树就是决策树算法中最流行的一种。
下面我们通过一个例子来说明决策树的思想。假如一个女生的母亲要给这个女生介绍对象,有如下对话:
女儿:多大年纪了? 母亲:26。
女儿:长的帅不帅?母亲:挺帅的。
女儿:收入高不?母亲:不算很高,中等情况。
女儿:是公务员不?母亲:是,在税务局上班呢。
女儿:那好,我去见见。
上面的对话就是典型的决策树思想,女孩通过年龄、长相、收入、职业来决定是否相见。假设我们每个条件都有一个判断,我们可以画出如下逻辑图:
决策树最重要的是决策树的构造。所谓决策树的构造就是进行属性选择度量确定各个特征属性之间的拓扑结构。构造决策树的关键步骤是分裂属性。所谓分裂属性就是在某个节点处按照某一特征属性的不同划分构造不同的分支,其目标是让各个分裂子集尽可能地“纯”。尽可能“纯”就是尽量让一个分裂子集中待分类项属于同一类别。分裂属性分为三种不同的情况[1]:
1、属性是离散值且不要求生成二叉决策树。此时用属性的每一个划分作为一个分支。
2、属性是离散值且要求生成二叉决策树。此时使用属性划分的一个子集进行测试,按照“属于此子集”和“不属于此子集”分成两个分支。
3、属性是连续值。此时确定一个值作为分裂点split_point,按照>split_point和<=split_point生成两个分支。
决策树的属性分裂选择是”贪心“算法,也就是没有回溯的。
二、ID3算法
ID3算法的核心是运用信息增益度量属性选择,选择分裂后信息增益最大的属性进行分裂。所谓信息增益就是熵的变化,信息论中有熵(entropy)的概念,表示状态的混乱程度,熵越大越混乱。下面先介绍几个相关的概念:
设D为用类别对训练元组进行的划分,则D的熵(entropy)表示为:
其中pi表示第i个类别在整个训练元组中出现的概率,可以用属于此类别元素的数量除以训练元组元素总数量作为估计。熵的实际意义表示是D中元组的类标号所需要的平均信息量。
现在我们假设将训练元组D按属性A进行划分,则A对D划分的期望信息为:
而信息增益即为两者的差值:
下面我们用一个例子说明ID3的具体流程,假设我们有如下训练集合,每个样本包括四个特征“Outlook”, “Temperature”,”Humidity”和“Windy”,模型的分类目标是play或者not play。
表中一共包含14个样本,包括9个正样本和5个负样本,并且是一个二分类问题,那么当前信息熵的计算如下:
接下来以表中的Outlook属性作为分支标准,根据sunny、overcast、rain这三个属性值可将数据分为三类,如下图所示:
引入该分支标准后,数据被分成了3个分支,每个分支的信息熵计算如下:
因此,基于该分支标准 T所带来的信息增益为:
ID3算法描述:
输入:训练数据集D,特征集A,阈值;
输出:决策树T。
1、若D中所有实例属于同一类,则T为单结点树,并将类
作为该结点的类标记,返回T;
2、若,则T为单结点树,并将D中实例数最大的类
作为该结点的类标记,返回T;
3、否则计算A中各特征对D的信息增益,选择信息增益最大的特征;
(1)如果的信息增益小于阈值
,则置T为单结点树,并将D中实例数最大的类
作为该结点的类标记,返回T;
(2)否则,对的每一可能值
,依
=
将D分割为若干非空子集
,将
中实例数最大的类作为标记,构建子结点,,由节点及其子结点构成树T,返回T;
4、对第i个子结点以为训练集,以A-{
}为特征集,递归调用步骤1~3,得到子树
,返回
。
三、C4.5算法
C4.5算法与ID3算法相似,C4.5算法是由ID3算法演进而来的。C4.5在生成的过程中,用信息增益比来选择特征。下面我们给出一个更加正式的C4.5算法的描述:
输入:训练数据集D,特征集A,阈值;
输出:决策树T。
1、若D中所有实例属于同一类,则T为单结点树,并将类
作为该结点的类标记,返回T;
2、若,则T为单结点树,并将D中实例数最大的类
作为该结点的类标记,返回T;
3、否则计算A中各特征对D的信息增益比,选择信息增益最大的特征;
(1)如果的信息增益比小于阈值
,则置T为单结点树,并将D中实例数最大的类
作为该结点的类标记,返回T;
(2)否则,对的每一可能值
,依
=
将D分割为若干非空子集
,将
中实例数最大的类作为标记,构建子结点,,由节点及其子结点构成树T,返回T;
4、对第i个子结点以为训练集,以A-{
}为特征集,递归调用步骤1~3,得到子树
,返回
。
C4.5算法定义了分裂信息,表示为:
很容易理解,这个也是一个熵的定义,pi=|Dj||D|pi=|Dj||D|,可以看做是属性分裂的熵,分的越多就越混乱,熵越大。定义信息增益率:
C4.5就是选择最大增益率的属性来分裂,其他类似ID3.5。
C4.5算法继承了ID3算法的优点,并在以下几方面对ID3算法进行了改进:
1) 用信息增益率来选择属性,克服了用信息增益选择属性时偏向选择取值多的属性的不足;
2) 在树构造过程中进行剪枝;
3) 能够完成对连续属性的离散化处理;
4) 能够对不完整数据进行处理。
C4.5算法有如下优点:产生的分类规则易于理解,准确率较高。其缺点是:在构造树的过程中,需要对数据集进行多次的顺序扫描和排序,因而导致算法的低效。
参考:
https://blog.csdn.net/xbinworld/article/details/44660339
https://wizardforcel.gitbooks.io/dm-algo-top10/content/c4.5.html
http://www.cnblogs.com/leoo2sk/archive/2010/09/19/decision-tree.html