决策树是一种对实例进行分类的树形结构,也是一种基本的分类与回归方法。决策树由结点(node)和有向边(directed edge)组成。结点又分为两种类型:内部结点(internal node)和叶结点(leaf node),内部结点表示一个特征或属性,叶结点表示一个分类。
如下图所示为一个决策树模型:
决策树的学习还表示给定特征条件下类的条件概率分布,下面的图示说明了决策树的一条路径对应于划分中的一个单元,在分类时是依据被分类项属于某一类的概率的大小,将其划分到概率较大的那一类中去。
决策树的学习就是从训练数据集中归纳出一组分类规则(这里可以说与if-then规则对应),这组与训练数据集不相矛盾的规则(对应着一棵决策树)可能有多个/可能一个也没有,但我们需要找的是矛盾较小的决策树,同时具有泛化能力。即这组规则对应的模型不公应该对训练数据有很好的拟合,而且对未知数据也有很好的预测。
所以决策树的学习策略是以损失函数为目标函数的最小化,整个学习过程可以分为:特征选择、决策树的生成以及决策树的剪枝三步。
1、特征选择:即选取对训练数据具有分类能力的特征
这里先引入信息增益的概念:
“熵”表示随机变量不确定性的度量,而熵只依赖于X的分布与X具体取值无关,所以可记为如下(可以看到熵越大,随机变量的不确定性就越大):
“条件熵H(Y|X)”表示在已知随机变量X的条件下随机变量Y的不确定性:
“信息增益”特征A对训练数据集D的信息增益g(D,A)定义为集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D)(熵H(Y)与条件熵H(Y|X)之差称为互信息,所以决策树学习过程中的信息增益也就是我们所说的训练集中类与牲的互信息):
有了上面的概念,就可以根据信息增益准则进行特征的选择:对训练集D,计算其每个特征的信息增益,并比较它们的大小,选择信息增益最大的特征。以实际例子说明,如下表希望通过所给的训练数据学习一个贷款申请的决策树,用以对未来贷款申请进行分类,即当新客户提出贷款申请时,根据申请人的特征利用决策树决定是否批准贷款申请
由上表可知一共有4个特征可供选择:年龄、是否有工作、是否有自己的房子以及信贷情况,任何选取一个特征都可以进行分类,问题是选取啊个特征分类更好呢?
(2)分别计算四个特征对数据集D的信息增益(以A1、A2、A3和A4表示年龄、是否有工作、是否有自己的房子和信贷情况),则有以下:
由上面的结果清楚得到特征A3的信息增益值最大,所以第一次选择特征A3作为最优特征。
'''
以信息增益作为划分训练集的特征时,存在偏向于选择取值较多的特征的问题,而使用信息增益比的话可以进行校正。信息增益比定义为:特征A对训练集D的信息增益比gr(D,A)定义为其信息增益g(D,A)与训练集D关于特征A的值的熵HA(D)之比:
'''
2、决策树生成
理解了上面的东东后,决策树的生成分为两种ID3和C4.5算法
(1)ID3算法:在决策树各个结点上应用信息增益准则选择特征,递归地构建决策树
从根结点开始,对各特征计算信息增益,选择信息增益最大的特征作为结点特征,由该特征的不同值再建立子结点;再对子结点递归地调用以上方法,构建决策树;直到所有特征信息增益均很小或没有特征可以选择为止:
(2)C4.5算法:与ID3算法类似,只是在生成过程选择信息增益比来选择特征
3、决策树剪枝:以上方法生成的决策树可能对训练集数据有很好的分类能力,而对于新的未知数据却分类效果不好,这就是所谓的过拟合现象。因此可以对生成的决策树自下而上进行剪枝,即去掉过于细分的叶结点,使其回退到父结点,甚至更高的结点,然后将父结点或更高的结点改为新的叶结点,从而使其具有更好的泛化能力。
决策树的剪枝通过极小化决策树的整体损失函数(也称代价函数)来实现。损失函数如下:
C(T)表示模型对训练数据的预测误差,即模型与训练数据的拟合程度: