决策树是一种常见的机器学习模型。形象地说,决策树对应着咱们直观上作决策的过程:经由一系列判断,获得最终决策。由此,咱们引出决策树模型。算法
决策树的跟节点包含所有样例,叶节点则对应决策结果。其它每一个节点则对应一个属性测试,每一个节点包含的样本集合根据属性测试结果被划分到不一样子节点中。决策树学习的目的是,产生一棵泛化能力强,i.e.处理未见示例能力强的决策树。机器学习
决策树的基本流程遵循分治策略。基本算法的伪码书中已经给出:post
从中看出,决策树是一个递归过程,有三种情形会致使递归返回:性能
情形2和3的处理之不一样在于:2利用当前节点的后验分布,而3则是把父节点的样本分布做为当前节点的先验分布。学习
从书中给出的伪码能够看出,决策树的关键在第8行,即如何选择最优的划分属性。通常而言,随着划分的不断进行,咱们但愿决策树的分支节点的“纯度”(purity)愈来愈高,即包含的样例尽量多得属于同一类别。为度量纯度,咱们首先须要引入信息熵和信息增益的概念。测试
“信息熵”(information entropy)是度量信息纯度的一个经常使用指标,计算的是为了解这某条信息所付出的平均信息量。其定义以下:ui
假定当前样本集合D中第k类样本所占的比例为pk(k = 1,2,...,|Y|),则D的信息熵定义为3d
对于底数之因此取2,通常的理解是,由于信息按照计算机表示采用的是二进制形式。由定义可推知,Ent(D)的值越小,则D的纯度越高。orm
在此基础上,给出“信息增益”(information gain)的定义:blog
假定离散属性a有V种不一样的取值{a1, a2, ..., aV},使用a对D进行划分,则会产生V个分支节点,其中第v个分支节点包含D中属性值为av的样本,记为Dv,则用属性a对样本集D进行划分所得到的信息增益定义为
通常而言,信息增益越大,则意味着使用属性a来进行划分所得到的纯度提高越大。因而,咱们即可以按信息增益来选择决策树的划分属性。相关的算法有著名的ID3算法[Quinlan, 1986]。
然而事实上,信息增益对可取值数目较多的属性有所偏好。这种偏好可能会下降模型的泛化能力。为减小这种偏好带来的不利影响,著名的C4.5决策树算法[Quinlan, 1993]不直接使用信息增益,而使用“增益率”(gain ratio)来划分最优属性。下面引入增益率的概念。
采用与信息增益相同的表达式,增益率定义为
其中,
称为属性a的“固有值”(intrinsic value)[Quinlan, 1993]。属性a的可能取值数目越多(即V越大),则IV(a)的值一般会越大。
不过,增益率准则对于可取值数目少的属性又有所偏好,所以,C4.5算法并非直接选择增益率最大的候选划分属性,而使用一个启发式算法:先从候选划分属性中找出信息增益高出平均水平的属性,再从中选择增益率最高的。
CART(Classification and Regression Tree)决策树[Breiman et al., 1984]则使用“基尼系数”(Gini index)来选择划分属性。数据集D的纯度可用基尼系数度量以下:
直观地讲,Gini(D)反映了从数据集D中随机抽取两个样本,其类别标记不一致的几率。所以,Gini(D)越小,D的纯度越高。
在此基础上,给出属性a的基尼指数
因而,咱们能够选择基尼指数最小的属性做为最优划分属性。
决策树的分支过多时,可能致使“过拟合”。剪枝(pruning)是决策树学习算法中解决“过拟合”的主要手段。
决策树的剪枝的基本策略主要有:
为考察泛化能力,能够预留一部分“验证集”以进行模型评估。
值得注意的是,预剪枝虽然显著减小了训练时间和测试时间的开销,但却带来了欠拟合的风险。由于有些分支可能在当前划分没法提高泛化性能,却在后续划分中能够作到。然后剪枝决策树在通常情形下欠拟合风险更小,且泛化性能每每优于预剪枝决策树,不过代价是要付出大得多的训练时间开销。
顺便一提,通过剪枝后,仅有一层划分的决策树,也被称为“决策树桩”(decision stump)。
前面讨论的是基于离散属性生成的决策树。然而在现实任务中,时常会遇到连续属性,此时便不能直接根据连续属性的值来划分节点。须要对连续属性离散化。
最简单的策略是二分法(bi-partition)。给定样本集D和连续属性a,假定a在D上出现n个不一样的取值,从小到大排序记为{a1, a2, ..., an}。因而,对于连续属性a,能够考虑n-1个元素的候选划分点集合Ta = {(ai+ai+1)/2 | 1 ≤ i ≤ n-1}。因而,在此基础上,能够对信息增益加以改造
现实任务中,也会遇到大量样本出现缺失值的状况。若是简单放弃不完整样本,显然是对数据的极大浪费。为充分利用数据,须要解决两个问题:
给定训练集D和属性a,令表示D中在属性a上没有缺失的样本子集。对于问题1,显然仅能够根据
来判断属性a的优劣。假定属性a有V个可取的值{a1, a2, ..., aV},令
表示
中在属性a上取值为av的样本子集,
表示
中属于第k类(k=1,2,...,|Y|)的样本子集。则显然有
假定为每一个样本x赋以权重ωx,并定义
显然,,
。
基于上述定义,能够将信息增益公式推广为
对于问题2,若样本x在属性a上的取值已知,则划入对应子节点,并保持样本权值便可;若取值未知,则同时划入全部子节点,且样本权值在属性值av对应的子节点中调整为。
将每一个属性视为坐标空间的一个坐标轴,则由d个属性描述的样本,对应于d维空间中的一个数据点。对样本分类,意味着在此坐标空间中寻找不容类样本间的分类边界。而决策树所造成的分类边界 有一个明显的特色:轴平行(axis-parallel),即其分类边界由若干个与轴平行的分段组成。这一特色的好处在于有较好的可解释性,但为了近似比较复杂的分类边界,会致使决策树过于复杂。为解决此问题,引入多变量决策树。
多变量决策树(multivariate decision tree)就能实现用斜线划分、甚至更复杂的划分。在此类决策树中,非叶节点再也不仅是某个属性,而是对属性的线性组合进行测试,i.e.每一个非叶节点都是一个形如的线性分类器。下面两张图给出了决策树和多变量决策树分类结果的对比。