机器学习笔记(1)——决策树(ID3、C4.5)

 决策树模型

  决策树,顾名思义,就是对实例进行分类的一种树形结构。它由结点和有向边组成,每个结点表示待分类数据中的某一个特征的取值。

  使用决策树分类时,从根结点开始,对实例的某一特征进行测试,根据测试结果,将实例分配到其子结点;这时,每个子结点对应着该特征的一个取值。如此递归地对实例进行测试并分配,直到到达叶结点,叶结点所对应的类就是该实例所属的类。

 决策树生成

  在这里,我们以kaggle所提供的Titanic数据集为例,这个数据集包含了Titanic乘客的各类信息,最后一项是乘客的存活情况。

  为了方便解释,我选取了其中的3类离散的特征,并且以下图的方式展示

  

  根据官方提供的数据集解释,其中每个特征的含义为:

  Pclass:乘客舱的类

  Sex:乘客性别

  Embarked:登船港口 C、Q、S分别代表三个不同的地点

  那么问题就来了,在这个数据集中,一共有三个特征:Pclass,Sex和Embarked,要如何进行选择才能得到一棵最优的决策树呢?

  接下来就需要引入决策树进行特征选择所用的信息增益信息增益比这两个概念了。

  但是在介绍这两个概念之前,为了方便说明,首先需要给出条件熵的定义。

  在信息论与概率统计中,熵(entropy)是表示随机变量不确定性的度量。设X是一个取有限个值的离散随机变量,其概率分布为

  

  则随机变量 X 的熵的定义为

  由定义可知,熵越大,变量的不确定性也就越大

  设有随机变量(X,Y),其联合概率分布为

  条件熵H(Y | X)在熵的基础上,表示在已知随机变量 X 的条件下随机变量 Y 的不确定性。随机变量X给定的条件下随机变量 Y 的条件熵 H(X | Y),定义为X给定条件下Y的条件概率分布的熵对X的数学期望

  这里,

  以上是对熵的介绍

 信息增益(ID3)

  特征 A 对训练数据集 D 的信息增益 g(D,A),定义为集合D的经验熵H(D)与特征 A 给定条件下 D 的经验熵 H(D | A)之差,公式为

  在我看来,对信息增益最直观的解释就是,信息增益 = 划分前的熵 - 划分后的熵

  信息增益是 ID3 决策树 生成算法的关键

  ID3 决策树生成过程中,是由某个结点选择一个特征作为划分标准,然后衍生出子结点。ID3算法中,首先计算待划分结点的熵,以Titanic为例,结果Y有0 1 两个值,所以决策树是一个而分类。所给的数据中存活情况为0 1 1 1 0,计算了这个结点的熵之后,依次选择其中的三个特征,将例子根据特征种类划分为多个子结点之后,分别计算各个结点的熵(即条件熵)。将划分结点的熵(划分前的熵)减去每个子结点的熵的和(划分后的熵),得到的就是信息增益。最终所选择的作为划分依据的特征就是信息增益最大的那个特征。子结点中数目最大的类即为子结点的类标记(Survived:0 或 1)

  ID3 决策树就是基于上面的算法,不断递归生成子树,直到信息增益小于某一个阈值,停止生成结点,将当前设为叶结点,类标记为结点中数目最大的类。 

 信息增益比(C4.5)

  信息增益有一个缺陷,就是它更偏向于选择取值较多的特征。试想一下,如果有一个共包含5个实例的数据集,其中有一项特征的取值有5个,而这5个取值正好都在这一个数据集中,那么当决策树选择划分标准的时候,自然会优先选择这一个特征。因为按照这一个特征划分之后,一共会有5个子结点,每个节点都只包含了一个实例,易知最后划分后的熵为 0,所得的信息增益是最大的,但是这种划分显然是不合理的。

  信息增益比正是为了解决这一问题

  信息增益比的公式为

  简单来说,就是在原来的信息增益的基础上,除以了一个训练数据集 D 关于特征 A 的值的熵 ,其中 ,所以,如果按照上面所提的5个实例分别对应了一个特征的五个值的话,显然 的取值是最大的,将其作为信息增益的惩罚项,能有效的避免选择取值较多的特征。

  C4.5 决策树的生成过程与ID3基本一致,唯一的区别就是把划分条件从信息增益改为了信息增益比。

 决策树剪枝

  决策树生成算法递归地产生决策树,直到不能继续下去为止。这种方法产生的决策树在训练集上的效果很好,但是在测试集上的效果往往就比较差,往往会过拟合也就是泛化性能比较差。根据奥卡姆剃刀原理(Occam's Razor),当两个决策树具有相似的性能时,选择更加简单的那个。决策树的剪枝通过最小化决策树整体的损失函数来实现,剪枝的过程就是减去叶子结点,并将叶子结点的样本全都归到父结点中。

  决策树的损失函数由两部分的和组成。一部分是决策树每个叶结点的经验熵与叶结点样本总数的乘积的和,第二部分是一个权值 a 乘上决策树叶结点的个数。构造出一棵决策树,一方面要保证每个叶结点的熵最小,又要使叶子结点的数目尽可能的小。两者权衡,最后得到一棵最优的决策树。

  参数a的设置决定了剪枝完成之后决策树的复杂度。易知,当a为0时,剪枝算法只保证每个结点的熵最小,所以不会进行剪枝。而随着a的值渐渐增大,每增加一个结点所带来的惩罚也更大,如果减去一个枝所带来误差的增加小于增加一个结点带来的惩罚a,则进行剪枝;否则放弃剪枝。使用者要通过调节参数a来生成一棵最优决策树,a太小会造成过拟合,a太大又有可能会造成欠拟合。

-------------------------------------

  因为编写数学公式不是很熟练,所以文中的公式同样截图自《统计学习方法》

  详细的公式推导请参考《统计学习方法》  

  以上就是最近学习的决策树中的ID3与C4.5,还有剪枝的思想。内容参考了李航的《统计学习方法》,部分是根据自己的理解而写,如果有错误欢迎批评改正~

  

  

猜你喜欢

转载自www.cnblogs.com/simbada/p/9053200.html