一、什么是决策树?
决策树(Decision Tree)是一种基本的分类和回归的方法。
分类决策树模型是一种描述对实例进行分类的树形结构。决策树由结点(node)和有向边(directed edge)组成。结点有两种形式:内部结点和叶节点。
一句话概括:通过信息增益,采用递归的方式生成树(找出最合适的节点顺序以及叶子对应的类标签)
1.1 决策树直观理解
通过一个例子来理解决策树,若我们有以下数据,要求通过以下数据,判断某用户是否能够偿还债务。
1.2 构建过程简述
用决策树分类,从根节点开始,对实例的某一特征进行测试,根据测试结果将实例分配到其子结点;这时,每一个子结点对应着该特征的一个值。如此递归地对实例进行测试分配,直到达到叶节点。最后将实例分到叶节点的类中。
1.3 根据构建方法构建决策树
根据数据,我们主观上觉得年收入对于是否能够偿还债务最重要,所以将年收入作为根结点。年收入大于等于97.5千元的可以偿还,对于小于97.5的,再用是否拥有房产进行划分,最后根据婚姻情况进行划分,直到到达叶节点为止。
当构建好一个决策树后,新来一个用户后,可以根据决策好的模型直接进行判断,比如新用户为:无房产、单身、年收入55K,那么根据判断得出该用户无法偿还债务。
二、一些概念
比特化(bits)
假设存在一组随机变量x,各个值出现的概率关系如下:
现在有一组由x变量组成的序列:BACADDCBAC......;如果现在希望这个序列转换为二进制来进行网络传输,那么我们就得到一个这样的序列:01001000111110010010......
在这情况下,我们可以使用两个比特位来表示一个随机变量。
而当X变量出现的概率值不一样的时候,对于一组序列信息来讲,每个变量平均需要多少个比特位来描述呢?
计算得:
也可以使用下列方法计算
一般化的比特化(Bits)
假设现在随机变量X具有m个值,分别为V1,v2,...vm;并且各个值出现的概率如下表所示:那么对于一组列信息来讲,每个变量平均需要多少个比特位来描述呢?
可以使用这些变量的期望来表示每个变量需要多少个比特位来描述信息:
信息熵(Entropy)
公式:
信息量:指的是一个样本/事件所蕴含的信息,如果一个事件的概率越大,那么就可以认为该事件所蕴含的信息越少。极端情况下,比如:“太阳从东方升起”,因为是确定事件,所以不携带任何信息量
信息熵:1948年,香农引入信息熵;一个系统越是有序,信息熵就越低,一个系统越是混乱,信息熵就越高,所以信息熵被认为是一个系统有序程度的度量。
信息熵就是用来描述系统信息量的不确定度。
High Entropy(高信息熵):表示随机变量X是均匀分布的,各种取值情况是等概率出现的。
Low Entropy(低信息熵):表示随机变量X各种取值不是等概率出现。可能出现有的事件概率很大,有的事件概率很小。
条件熵H(Y|X)
给定条件 X 的情况下,随机变量 Y 的信息熵就就叫做条件熵。
当专业(X)为数学的时候,Y的信息熵的值为:H(Y|X=数学)
给定条件X的情况下,所有不同x值情况下Y的信息熵的平均值叫做条件熵
给定条件X的情况下,所有不同x值情况下Y的信息熵的平均值叫做条件熵。另外一个公式如下所示:
事件(X,Y)发生所包含的熵,减去事件X单独发生的熵,即为在事件X发生的前提下,Y发生“新”带来的熵,这个也就是条件熵本身的概念,验证如下:
三、决策树
决策树(Decision Tree)是在已知各种情况下发生概率的基础上,通过构建决策树来进行分析的一种方式,是一种直观应用概率分析的一种图解法;决策树是一种预测模型,代表的是对象属性与对象值之间的映射关系;决策树是一种树形结构,其中每个内部节点表示一个树形的测试,每个分支表示一个测试输出,每个叶子节点代表一种类别;决策树是一种非常常用的有监督的分类算法。
决策树的决策过程就是从根节点开始,测试待分类项中对应的特征属性,并按照其值选择输出分支,知道叶子节点,将叶子节点的存放类别作为决策结果。
决策树分为两大类:分类树和回归树,前者用于分类标签值,后者用于预测连续值,常用算法ID3、C4.5、CART等。
决策树构建过程
决策树构建的重点就是决策树的构造。决策树的构造就是进行属性选择度量,确定各个特征属性之间的拓扑结构(树结构),构建决策树的关键就是分裂属性,构建决策树的关键步骤就是分裂属性,分裂属性是指在某个节点按照某一特征属性的不同划分构建不同的分支,其目标就是让哥哥分裂子集尽可能的“纯”(让一个分裂子类的项尽可能的属于同一类别)
构建步骤如下:
- 将所有的特征看成一个一个的节点;
- 遍历每个特征的每一种分割方式,找到最好的分割点;将数据划分为不同的子节点,eg: 、 .... ;计算划分之后所有子节点的'纯度'信息;
- 对第二步产生的分割,选择出最优的特征以及最优的划分方式;得出最终的子节点: 、 ....
- 对子节点 、 .... 分别继续执行2-3步,直到每个最终的子节点都足够'纯'。
决策树特征属性类型
根据特征属性的类型不同,在构建决策树的时候,采用不同的方式,具体如下:
- 属性是离散值,而且不要求生成的是二叉决策树,此时一个属性就是一个分支
- 属性是离散值,而且要求生成的是二叉决策树,此时使用属性划分的子集进行测试,按照“属于此子集”和“不属于此子集”分成两个分支
- 属性是连续值,可以确定一个值作为分裂点split_point,按照 >split_point 和 <=split_point 生成两个分支
决策树分割属性选择
决策树算法是一种“贪心”算法策略,只考虑在当前数据特征情况下的最好分割方式,不能进行回溯操作。
对于整体的数据集而言,按照所有的特征属性进行划分操作,对所有划分操作的结果集的“纯度”进行比较,选择“纯度”越高的特征属性作为当前需要分割的数据集进行分割操作,持续迭代,直到得到最终结果。决策树是通过“纯度”来选择分割特征属性点的。
决策树量化纯度
决策树的构建是基于样本概率和纯度进行构建操作的,那么进行判断数据集是否“纯”可以通过三个公式进行判断,分别是Gini系数、熵(Entropy)、错误率,一般情况使用熵公式。
当计算出各个特征属性的量化纯度值后使用信息增益度来选择出当前数据集的分割特征属性;如果信息增益度的值越大,表示在该特征属性上会损失的纯度越大 ,那么该属性就越应该在决策树的上层,计算公式为:
Gain为A为特征对训练数据集D的信息增益,它为集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D|A)之差。
决策树的停止条件
一般情况有两种停止条件:
- 当每个子节点只有一种类型的时候停止构建。
- 当前节点中记录数小于某个阈值,同时迭代次数达到给定值时,停止构建过程,此时使用max(p(i))作为节点的对应类型。
方式一可能会使树的节点过多,导致过拟合(Overfiting)等问题;比较常用的方式是使用方式二作为停止条件。
决策树算法效果的评估
决策树的效果评估和一般的分类算法一样,采用混淆矩阵来进行计算准确率、召回率、精确率等指标。
也可以采用叶子节点的纯度值总和来评估算法的效果,值越小,效果越好。
决策树的损失函数(该值越小,算法效果越好)。
四、决策树直观理解结果计算
2、对数据特征进行分割
该数据的特征共有三个,分别计算每个特征的条件熵
按照是否拥有房产分别计算,然后算出条件熵
同理可以计算Gain(D,婚姻)=0.205
只保留80和97.5。 如果选择67.5,它将60和75分开了,但是60和75的Y都是否,标签相同,最好还是分到一个类中
Gain(D,年收入=97.5)=0.395
Gain(D,年收入=80)=0.116
按照Gain越小,分割后的纯度越高,因此第一个分割的特征属性为年收入,并按照97.5进行划分。
左子树的结果集够纯,因此不需要继续划分。接下来,对右子树年收入<97.5的数据,继续选择特征进行划分,且不再考虑收入这个特征,注意需要重新计算Gain(D,婚姻),Gain(D,房产),重复上述步骤,至到满足结束条件
五、算法
ID3算法
ID3算法是决策树的一个经典的构造算法,内部使用信息熵以及信息增益来进行构建;每次迭代选择信息增益最大的特征属性作为分割属性。
信息熵
信息增益
优点:
决策树构建速度快;实现简单;
缺点:
- 计算依赖于特征数目较多的特征,而属性值最多的属性并不一定最优
- ID3算法不是递增算法
- ID3算法是单变量决策树,对于特征属性之间的关系不会考虑
- 抗噪性差
- 只适合小规模数据集,需要将数据放到内存中
C4.5算法
在ID3算法的基础上,进行算法优化提出的一种算法;使用信息增益率来取代ID3算法中的信息增益,在树的构造过程中会进行剪枝操作进行优化;能够自动完成对连续属性的离散化处理;C4.5算法在选中分割属性的时候选择信息增益率最大的属性,涉及到的公式为:
优点
- 产生的规则易于理解
- 准确率较高
- 实现简单
缺点:
- 对数据集需要进行多次顺序扫描和排序,所以效率较低
- 只适合小规模数据集,需要将数据放到内存中。
CART算法
使用基尼系数作为数据纯度的量化指标来构建的决策树算法就叫做CART(Classification And Regression Tree,分类回归树)算法。CART算法使用GINI增益作为分割属性选择的标准,选择GINI增益最大的作为当前数据集的分割属性;可用于分类和回归两类问题。强调:CART构建是二叉树。
基尼系数
基尼增益
ID3、C4.5、CART分类树算法总结
- ID3和C4.5算法均只适合在小规模数据集上使用
- ID3和C4.5算法都是单变量决策树
- 当属性值取值比较多的时候,最好考虑C4.5算法,ID3得出的效果会比较差
- 决策树分类一般情况只适合小数据量的情况(数据可以放内存)
- CART算法是三种算法中最常用的一种决策树构建算法。
- 三种算法的区别仅仅只是对于当前树的评价标准不同而已,ID3使用信息增益、
- C4.5使用信息增益率、CART使用基尼系数。
- CART算法构建的一定是二叉树,ID3和C4.5构建的不一定是二叉树。
算法 | 支持模型 | 树结构 | 特征选择 | 连续值处理 | 缺失值处理 | 剪枝特征属性多次使用 |
---|---|---|---|---|---|---|
ID3 | 分类 | 多叉树 | 信息增益 | 不支持 | 不支持 | 不支持 |
C4.5 | 分类 | 多叉树 | 信息增益率 | 支持 | 支持 | 支持 |
CART | 分类、回归 | 二叉树 | 基尼系数、均方差 | 支持 | 支持 | 支持 |
六、分类树和回归树
分类树采用信息增益、信息增益率、基尼系数来评价树的效果,都是基于概率值进行判断的;而分类树的叶子节点的预测值一般为叶子节点中概率最大的类别作为当前叶子的预测值。
回归树中,叶子节点的预测值一般为叶子节点中所有值的均值来作为当前叶子节点的预测值。所以在回归树中一般采用MSE作为树的评价指标,即均方差。一般情况,使用CART算法构建回归树。
七、决策树的优化策略
剪枝优化:决策树过渡拟合一般情况是由于节点太多导致的,剪枝优化对决策树的正确率影响是比较大的,也是最常用的一种优化方式。
Random Forest:利用训练数据随机产生多个决策树,形成一个森林。然后使用这个森林对数据进行预测,选取最多结果作为预测结果。
剪枝优化
决策树的剪枝是决策树算法中最基本、最有用的一种优化方案,主要分为两大类:
前置剪枝:在构建决策树的过程中,提前停止。结果是决策树一般比较小,实践证明这种策略无法得到比较好的结果。
后置剪枝:在决策树构建好后,然后再开始裁剪,一般使用两种方式:1、用单一叶子节点代替整个子树,叶节点的分类采用子树中最主要的分类;2、将一个子树完全替代另外一棵子树;后置剪枝的主要问题是计算效率问题,存在一定的浪费情况。
后置剪枝过程:
对于给定的决策树T0
- 计算所有内部非叶子节点的剪枝系数;
- 查找最小剪枝系数的节点,将其子节点进行删除操作,进行剪枝得到决策树Tk;如果存在多个最小剪枝系数节点,选择包含数据项最多的节点进行剪枝操作;
- 重复上述操作,直到产生的剪枝决策树Tk只有1个节点;
- 得到决策树T0 T1 T2....Tk;
- 使用验证样本集选择最优子树Ta(使用原始损失函数考虑)。
使用验证集选择最优子树的标准,可以使用原始损失函数来考虑:
八、决策树剪枝损失函数及剪枝系数
原始损失函数
叶节点越多,决策树越复杂,损失越大;修正添加剪枝系数,修改后的损失函数为
考虑根节点为r的子树,剪枝前后的损失函数分别为loss(R)和loss(r),当这两者相等的时候,可以求得剪枝系数