一、基本流程
1、一棵决策树包含一个根节点、若干个内部结点和若干个叶结点;叶结点对应于决策结果,其他每个结点则对应于一个属性测试;每个结点包含的样本集合根据属性测试的结果被划分到子结点中;根节点包含样本全集。从根结点到每个叶结点的路径对应了一个判定结果序列。
2、决策树的基本流程:
输入:训练集 ;属性集
过程:函数TreeGenerate(D,A)
(1): 生成结点node;
(2): if D 中所有样本都属于同一类别 C 。 then
(3): 将node标记为C类叶节点;return
(4): end if
(5): if OR D 样本在A上取值相同 then
(6): 将node标记为叶结点,其类别标记为D中样本数最多的类;return
(7): end if
(8): 从A中选择最优划分属性 ;
(9): for 的每个值 do
(10) 为node生成一个分支;令 表示D中在 上取值为 的样本子集;
(11) if 为空 then
(12) 将分支结点标记为叶结点,其类别标记为D中样本最多的类;return
(13) else
(14) 以TreeGenerate( ,A\) 为分支结点。
(15) end if
(16) end for
输出:以node为根节点的一棵决策树
决策树的生成是一个递归过程,在决策树基本算法中,有三种情形会导致递归返回:(1)当前结点包含的样本全属于同一类别,无需划分;(2)当前属性集为空,或是所有样本在所有属性上取值相同,无法划分;(3)当前结点包含的样本集合为空,不能划分。
3、划分选择
我们希望决策树的分支结点所包含的样本尽可能属于同一类别,即结点的“纯度”越来越高。
3.1 信息增益
“信息熵”(information entropy)是度量样本集合纯度最常用的一种指标。假定当前样本集合D中第k类样本所占比例为 ,则D的信息熵定义为:
信息熵的值越小,则D的纯度越高。
考虑到不同的分支结点所包含的样本数不同,给分支结点赋予权重 ,即样本数越多的分支结点的影响越大,于是可计算出用属性a对样本集D进行划分所获得的“信息增益”(information gain)。
一般情况下,信息增益越大,表示使用属性a进行划分所获得的“纯度提升”越大。因此,我们可用信息增益来进行决策树的划分属性选择。
3.2 增益率
实际上,信息增益对可取值较多的属性有所偏好,为减少这种偏好可能带来的影响,使用增益率(gain ratio)来选择最优划分属性。增益率定义为:
其中
称为a的固有值(intrinsic value),属性a的可能取值数目越多(即V越大),则IV(a)的值越大。
3.3 基尼指数
CART决策树使用“基尼指数”(Gini index)来选择划分属性。数据集D的纯度可用基尼值来度量:
Gini(D)反映了从数据集D中随机抽取两个样本,其类别标记不一致的概率。因此,Gini(D)越小,则数据集D的纯度越高。
属性a的基尼指数定义为:
于是,在候选集合A中,选择使得划分后基尼指数最小的属性作为最优划分属性,即
4.剪枝处理
剪枝(pruning)是决策树算法应对“过拟合”的策略。在决策树学习中,为了尽可能正确分类训练样本,结点划分过程将不断重复,有时会造成决策树分支过多,这时就会导致过拟合。
决策树剪枝分为预剪枝和后剪枝。预剪枝是指在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化能力的提升,则停止划分并将当前结点划分为叶结点;后剪枝则是先从训练集生成一棵完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能提高泛化性能,则将该子树替换为叶结点。
5.连续与缺失值
5.1 连续值处理
以上的数据都是基于离散数据进行的讨论,接下行看看决策树对连续值如何处理:
连续值的取值是无限的,因此,不能直接根据连续属性的可取值来对结点进行划分。这里用到了连续数值离散化的思维方法。最简单的策略是利用二分法对连续属性进行处理。
给定样本集D和连续属性a,假定a在D上出现了n个不同的取值,将这些值从小到大进行排序,记为 。基于划分点t可将D分为子集 和 ,其中 包含那些在属性a上取值 的样本。而 包含那些在属性a上取值 的样本。对相邻的属性取值 和 ,t在区间 中取任何值所产生的划分结果相同。因此,对连续属性a,我们可考察包含n-1个元素的候选划分点集合: