深入浅出ML之Tree-Based家族

本文转自:http://www.52caml.com/head_first_ml/ml-chapter3-tree-based-family/

写在前面

本章我想以一个例子作为直观引入,来介绍决策树的结构、学习过程以及具体方法在学习过程中的差异。(注:构造下面的成绩示例数据,来说明决策树的构造过程)
在这里插入图片描述
定义划分等级的标准:
“等级1”把数据划分为4个区间:

在这里插入图片描述
“等级2”的划分 假设这次考试,成绩超过75分算过关;小于75分不过关。得到划分标准如下:
在这里插入图片描述
我们按照树结构展示出来,如下图所示:
在这里插入图片描述
如果按照“等级1”作为划分标准,取值“优秀”,“良好”,“中等”和“较差”分别对应4个分支,如图4.1所示。由于只有一个划分特征,它对应的是一个单层决策树,亦称作“决策树桩”(Decision Stump)。

决策树桩的特点是:只有一个非叶节点,或者说它的根节点等于内部节点(我们在下面介绍决策树多层结构时再介绍)。

“等级1”取值类型是category,而在实际数据中,一些特征取值可能是连续值(如这里的score特征)。如果用决策树模型解决一些回归或分类问题的化,在学习的过程中就需要有将连续值转化为离散值的方法在里面,在特征工程中称为特征离散化。

在图4.2中,我们把连续值划分为两个区域,分别是score≥75 和 0≤score<75

图4.3和图4.4属于CART(Classification and Regression Tree,分类与回归树)模型。CART假设决策树是二叉树,根节点和内部节点的特征取值为”是”或”否”,节点的左分支对应”是”,右分支对应“否”,每一次划分特征选择都会把当前特征对应的样本子集划分到两个区域。

在CART学习过程中,不论特征原有取值是连续值(如图4.2)或离散值(图4.3,图4.4),也要转化为离散二值形式。

直观上看,回归树与分类树的区别取决于实际的应用场景(回归问题还是分类问题)以及对应的“Label”取值类型。

Label是连续值,通常对应的是回归树;当Label是category时,对应分类树模型;

后面会提到,CART学习的过程中最核心的是通过遍历选择最优划分特征及对应的特征值。那么二者的区别也体现在具体最优划分特征的方法上。

同样,为了直观了解本节要介绍的内容,这里用一个表格来说明:
在这里插入图片描述
除了具体介绍这3个具体算法对应的特征选择方法外,还会简要的介绍决策树学习过程出现的模型和数据问题,如过拟合问题,连续值和缺失值问题等。

扫描二维码关注公众号,回复: 4395419 查看本文章

决策树学习过程

图4.1~图4.4给出的仅仅是单层决策树,只有一个非叶节点(对应一个特征)。那么对于含有多个特征的分类问题来说,决策树的学习过程通常是一个通过递归选择最优划分特征,并根据该特征的取值情况对训练数据进行分割,使得切割后对应的数据子集有一个较好的分类的过程。

为了更直观的解释决策树的学习过程,这里参考《数据挖掘-实用机器学习技术》一书中P69页提供的天气数据,根据天气情况决定是否出去玩,数据信息如下:
在这里插入图片描述
利用ID3算法中的信息增益特征选择方法,递归的学习一棵决策树,得到树结构,如图4.5所示:
在这里插入图片描述
在这里插入图片描述
这样最终结果是每个子集都被分到叶节点上,对应着一个明确的类别。那么,递归生成的层级结构即为一棵决策树。我们将上面的文字描述用伪代码形式表达出来,即为:
在这里插入图片描述
决策树学习过程中递归的每一步,在选择最优特征后,根据特征取值切割当前节点的数据集,得到若干数据子集。由于决策树学习过程是递归的选择最优特征,因此可以理解为这是一个特征空间划分的过程。每一个特征子空间对应决策树中的一个叶子节点,特征子空间相应的类别就是叶子节点对应数据子集中样本数最多的类别。

特征选择方法

上面多次提到递归地选择最优特征,根据特征取值切割数据集,使得对应的数据子集有一个较好的分类。从伪代码中也可以看出,在决策树学习过程中,最重要的是第07行,即如何选择最优特征?也就是我们常说的特征选择选择问题。

顾名思义,特征选择就是将特征的重要程度量化之后再进行选择,而如何量化特征的重要性,就成了各种方法间最大的区别。

例如卡方检验、斯皮尔曼法(Spearman)、互信息等使用<feature, label>之间的关联性来进行量化feature的重要程度。关联性越强,特征得分越高,该特征越应该被优先选择。

在这里,希望随着特征选择过程地不断进行,决策树的分支节点所包含的样本尽可能属于同一类别,即希望节点的”纯度(purity)”越来越高。

如果子集中的样本都属于同一个类别,当然是最好的结果;如果说大多数的样本类型相同,只有少部分样本不同,也可以接受。

那么如何才能做到选择的特征对应的样本子集纯度最高呢?
ID3算法用信息增益来刻画样例集的纯度;C4.5算法采用增益率;
CART算法采用基尼指数来刻画样例集纯度

信息增益

信息增益(Information Gain,简称IG)衡量特征的重要性是根据当前特征为划分带来多少信息量,带来的信息越多,该特征就越重要,此时节点的”纯度”也就越高。

对一个分类系统来说,假设类别C可能的取值为c1,c2,⋯,ck(k是类别总数),每一个类别出现的概率分别是p(c1),p(c2),⋯,p(ck)。此时,分类系统的熵可以表示为:
在这里插入图片描述
分类系统的作用就是输出一个特征向量(文本特征、ID特征、特征特征等)属于哪个类别的值,而这个值可能是c1,c2,⋯,ck,因此这个值所携带的信息量就是公式(n.ml.1.3.1)这么多。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
下面以天气数据为例,介绍通过信息增益选择最优特征的工作过程:

根据阴晴、温度、湿度和刮风来决定是否出去玩。样本中总共有14条记录,取值为“是”和“否”的样本数分别是9和5,即9个正样本、5个负样本,用S(9+,5−)表示,S表示样本(sample)的意思。

(1). 分类系统的熵:

在这里插入图片描述
(2). 如果以特征”阴晴”作为根节点。“阴晴”取值为{sunny, overcast, rainy}, 分别对应的正负样本数分别为(2+,3-), (4+,0-), (3+,2-),那么在这三个节点上的信息熵分别为:
在这里插入图片描述
以特“阴晴”为根节点,平均信息值(即条件熵)为:
在这里插入图片描述
以特征“阴晴”为条件,计算得到的条件熵代表了期望的信息总量,即对于一个新样本判定其属于哪个类别所必需的信息量。

(3). 计算特征“阴晴”对应的信息增益:
IG(“阴晴”)=Entropy(S)−Entropy(S|“阴晴”)=0.247位   (exp.1.3.3.1)

同样的计算方法,可得每个特征对应的信息增益,即
IG(“刮风”)=Entropy(S)−Entropy(S|“刮风”)=0.048位   (exp.1.3.3.2)
IG(“湿度”)=Entropy(S)−Entropy(S|“湿度”)=0.152位   (exp.1.3.3.3)
IG(“温度”)=Entropy(S)−Entropy(S|“温度”)=0.029位   (exp.1.3.3.4)

显然,特征“阴晴”的信息增益最大,于是把它作为划分特征。基于“阴晴”对根节点进行划分的结果,如图4.5所示(决策树学习过程部分)。决策树学习算法对子节点进一步划分,重复上面的计算步骤。

用信息增益选择最优特征,并不是完美的,存在问题或缺点主要有以下两个:

倾向于选择拥有较多取值的特征

尤其特征集中包含ID类特征时,ID类特征会最先被选择为分裂特征,但在该类特征上的分支对预测未知样本的类别并无意义,降低了决策树模型的泛化能力,也容易使模型易发生过拟合。

只能考察特征对整个系统的贡献,而不能具体到某个类别上

信息增益只适合用来做所谓“全局”的特征选择(指所有的类都使用相同的特征集合),而无法做“本地”的特征选择(对于文本分类来讲,每个类别有自己的特征集合,因为有的词项(word item)对一个类别很有区分度,对另一个类别则无足轻重)。

为了弥补信息增益这一缺点,一个被称为增益率(Gain Ratio)的修正方法被用来做最优特征选择。

增益率

与信息增益不同,信息增益率的计算考虑了特征分裂数据集后所产生的子节点的数量和规模,而忽略任何有关类别的信息。

以信息增益示例为例,按照特征“阴晴”将数据集分裂成3个子集,规模分别为5、4和5,因此不考虑子集中所包含的类别,产生一个分裂信息为:
SplitInfo(“阴晴”)=info(5,4,5)=1.577位(exp.1.3.4)

分裂信息熵(Split Information)可简单地理解为表示信息分支所需要的信息量。

那么信息增益率:
在这里插入图片描述
基尼指数(Gini Index)是CART中分类树的特征选择方法。这部分会在下面的“分类与回归树-二叉分类树”一节中介绍。

分类与回归树

分类与回归树(Classification And Regression Tree, 简称CART)模型在Tree-Based家族中是应用最广泛的学习方法之一。它既可以用于分类也可以用于回归。

一句话概括CART模型:
CART模型是在给定输入随机变量X条件下求得输出随机变量Y的条件概率分布的学习方法。

在“写在前面”也提到,CART假设决策树时二叉树结构,内部节点特征取值为“是”和“否”,左分支对应取值为“是”的分支,右分支对应为否的分支,如图4.3所示。这样CART学习过程等价于递归地二分每个特征,将输入空间(在这里等价特征空间)划分为有限个字空间(单元),并在这些字空间上确定预测的概率分布,也就是在输入给定的条件下输出对应的条件概率分布。

可以看出CART算法在叶节点表示上不同于ID3、C4.5方法,后二者叶节点对应数据子集通过“多数表决”的方式来确定一个类别(固定一个值);而CART算法的叶节点对应类别的概率分布。如此看来,我们可以很容易地用CART来学习一个multi-label / multi-class / multi-task的分类任务。

与其它决策树算法学习过程类别,CART算法也主要由两步组成:

  1. 决策树的生成:基于训练数据集生成一棵二分决策树;
  2. 决策树的剪枝:用验证集对已生成的二叉决策树进行剪枝,剪枝的标准为损失函数最小化。

由于分类树与回归树在递归地构建二叉决策树的过程中,选择特征划分的准则不同。二叉分类树构建过程中采用基尼指数(Gini Index)为特征选择标准;二叉回归树采用平方误差最小化作为特征选择标准。

二叉分类树

二叉分类树中用基尼指数(Gini Index)作为最优特征选择的度量标准。基尼指数定义如下:
同样以分类系统为例,数据集D中类别C可能的取值为c1,c2,⋯,ck(k是类别数),一个样本属于类别ci的概率为p(i)。那么概率分布的基尼指数公式表示为:
在这里插入图片描述
在这里插入图片描述

在实际操作中,通过遍历所有特征(如果是连续值,需做离散化)及其取值,选择基尼指数最小所对应的特征和特征值。

这里仍然以天气数据为例,给出特征“阴晴”的基尼指数计算过程。
在这里插入图片描述

二叉回归树

在这里插入图片描述
下面要解决的问题是:如何划分特征空间?
一个启发式的方式就是选择特征空间中第k个特征fk和它的取值s,作为划分特征和划分点。定义两个区域(对应内部节点两个分支):
在这里插入图片描述

更多案例请关注“思享会Club”公众号或者关注思享会博客:http://gkhelp.cn/

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/u011785964/article/details/84777772