前言
与SVM一样,决策树也是一种多功能的机器学习算法,它可以实现回归和分类任务,甚至是多输出任务。它的原理也非常简单。
决策树
举个通俗易懂的例子,如下图所示的流程图就是一个决策树,长方形代表判断模块(decision block),椭圆形成代表终止模块(terminating block),表示已经得出结论,可以终止运行。从判断模块引出的左右箭头称作为分支(branch),它可以达到另一个判断模块或者终止模块。我们还可以这样理解,分类决策树模型是一种描述对实例进行分类的树形结构。决策树由结点(node)和有向边(directed edge)组成。结点有两种类型:内部结点(internal node)和叶结点(leaf node)。内部结点表示一个特征或属性,叶结点表示一个类。蒙圈没??如下图所示的决策树,长方形和椭圆形都是结点。长方形的结点属于内部结点,椭圆形的结点属于叶结点,从结点引出的左右箭头就是有向边。而最上面的结点就是决策树的根结点(root node)。这样,结点说法就与模块说法对应上了。
一般的,一棵决策树包含一个根结点(相亲对象有房子)、若干个内部结点(相亲对象有房子、有上进心)和若干个叶结点(值得认真考虑、Say Goodbye、备胎);叶结点代表决策结果,其他每个结点则对应于一个属性测试。
我们回到这个流程图,对,你没看错,这就是一个假想的相亲对象分类系统。它首先检测相亲对方是否有房。如果有房,则对于这个相亲对象可以考虑进一步接触。如果没有房,则观察相亲对象是否有上进心,如果没有,直接Say Goodbye,此时可以说:"你人很好,但是我们不合适。"如果有,则可以把这个相亲对象列入候选名单,好听点叫候选名单,有点瑕疵地讲,那就是备胎。
不过这只是个简单的相亲对象分类系统,只是做了简单的分类。真实情况可能要复杂得多,考虑因素也可以是五花八门。脾气好吗?会做饭吗?愿意做家务吗?家里几个孩子?父母是干什么的?天啊,我不想再说下去了,想想都可怕。
我们可以把决策树看成一个if-then规则的集合,将决策树转换成if-then规则的过程是这样的:由决策树的根结点(root node)到叶结点(leaf node)的每一条路径构建一条规则;路径上内部结点的特征对应着规则的条件,而叶结点的类对应着规则的结论。决策树的路径或其对应的if-then规则集合具有一个重要的性质:互斥并且完备。这就是说,每一个实例都被一条路径或一条规则所覆盖,而且只被一条路径或一条规则所覆盖。这里所覆盖是指实例的特征与路径上的特征一致或实例满足规则的条件。可见,这非常类似于我们人类的思考过程。
划分选择
决策树学习的关键在于如何选择最优的划分属性(相亲对象有房子还是有上进心作为最优的划分属性),这里介绍比较常见的三种划分准则:
- ID3 使用信息增益作为划分属性的准则;
- C4.5 使用增益率作为划分属性的准则;
- CART 使用 Gini 指数作为划分属性的准则
这里引出几个概念“信息熵”,“条件熵”,“信息增益”,“增益率”,“Gini指数”
信息熵(entropy)
在信息论与概率论中,熵用于表示随机变量不确定性的度量。
设X是一个有限状态的离散型随机变量,其概率分布为:
则随机变量X的熵定义为
其中n表示分类数
熵越大,则随机变量的不确定性越大。(类似于化学上熵的概念吧)
条件熵(conditional entropy)
随机变量X给定的条件下,随机变量Y的条件熵H(Y|X)定义为:
信息增益(information gain)
具体定义如下。
特征A对训练数据集D的信息增益定义为集合D的经验熵与特征A给定条件下D的经验条件熵之差,即
信息增益越大,则意味着使用属性a来进行划分所获得的 “纯度提升” 越大 。也就是说,用属性a来划分训练集,得到的结果中纯度比较高。ID3算法就是以信息增益为准则来划分属性,ID3 仅仅适用于二分类问题, 仅仅能够处理离散属性。
增益率
增益率 = 信息增益 / 划分前熵 公式:
C4.5算法使用“增益率”为准则来划分属性,克服了 ID3 仅仅能够处理离散属性的问题,以及信息增益偏向选择取值较多特征的问题。但增益率准则对选择取值较少特征有所偏好,因此不是直接选择增益率最大的候选划分特征,而是使用一个启发式:先从候选划分特征中找出信息增益高于平均水平的特征,再从中选择增益率最高的。
基尼指数
数据集D的纯度也可以用基尼值来度量:
Gini(D)反映了从数据集D中随机抽取两个样本,其类别标记不一样的概率,因此,基尼值越小,则数据集D的纯度越高
属性a的基尼指数定义为:
V表示属性a的取值个数
CART算法使用“基尼指数”为准则来划分属性,CART 的全称是分类与回归树(classification and regression tree)。从这个名字中就应该知道,CART 既可以用于分类问题,也可以用于回归问题。它生成的树必须是二叉树。也就是说,无论是回归还是分类问题,无论特征是离散的还是连续的,无论属性取值有多个还是两个,内部节点只能根据属性值进行二分。
我们做一下对比:
信息增益 vs 信息增益比
之所以引入了信息增益比,是由于信息增益的一个缺点。那就是:信息增益总是偏向于选择取值较多的属性。信息增益比在此基础上增加了一个罚项,解决了这个问题。
Gini 指数 vs 熵
既然这两个都可以表示数据的不确定性,不纯度。那么这两个有什么区别那?
Gini 指数的计算不需要对数运算,更加高效;
Gini 指数更偏向于连续属性,熵更偏向于离散属性。
剪枝处理
决策树算法为了尽可能多的正确分类训练样本,很容易过拟合,剪枝处理就是用来防止决策树过拟合,提高泛化性能的方法,剪枝分为预剪枝与后剪枝。
预剪枝是指在决策树的生成过程中,对每个节点在划分前先进行评估,若当前的划分不能带来泛化性能的提升,则停止划分,并将当前节点标记为叶节点。
后剪枝是指先从训练集生成一颗完整的决策树,然后自底向上对非叶节点进行考察,若将该节点对应的子树替换为叶节点,能带来泛化性能的提升,则将该子树替换为叶节点。
那么怎么来判断是否带来泛化性能的提升呢?最简单的就是留出法,即预留一部分数据作为验证集来进行性能评估
小结
本节主要介绍了决策树的常用算法和如何缓解过拟合,下节将介绍数据集中含有连续属性和缺失值时如何生成决策树。
参考资料
【1】机器学习实战教程(二) https://cuijiahua.com/blog/2017/11/ml_2_decision_tree_1.html
【2】机器学习技法 林轩田 https://www.bilibili.com/video/av12469267?from=search&seid=16189317168232782932
【3】机器学习 周志华