决策树算法梳理

1. 信息论基础(熵 联合熵 条件熵 信息增益 基尼不纯度)

1.1自信息:

在信息论中,自信息(英语:self-information),由克劳德·香农提出,是与概率空间中的单一事件或离散随机变量的值相关的信息量的量度。它用信息的单位表示,例如 bit、nat或是hart,使用哪个单位取决于在计算中使用的对数的底。自信息的期望值就是信息论中的熵,它反映了随机变量采样时的平均不确定程度。
信息量的大小不同于信息作用的大小,这不是同一概念。信息量只表明不确定性的减少程度,至于对接收者来说,所获得的信息可能事关重大,也可能无足轻重,这是信息作用的大小。
1.2信息熵
如果有一枚理想的硬币,其出现正面和反面的机会相等,则抛硬币事件的熵等于其能够达到的最大值。我们无法知道下一个硬币抛掷的结果是什么,因此每一次抛硬币都是不可预测的。因此,使用一枚正常硬币进行若干次抛掷,这个事件的熵是一比特,因为结果不外乎两个——正面或者反面,可以表示为0, 1编码,而且两个结果彼此之间相互独立。若进行n次独立实验,则熵为n,因为可以用长度为n的比特流表示。[1]但是如果一枚硬币的两面完全相同,那个这个系列抛硬币事件的熵等于零,因为结果能被准确预测。现实世界里,我们收集到的数据的熵介于上面两种情况之间。
定义
熵的公式可以表示为:
在这里插入图片描述
1.3熵
熵(entropy) 是信息论的基本概念。如果X是一个离散型随机变量, 取值空间为R, 其概率分布为p(x) =P(X=x) , x∈R。 那么, X的熵H(X) 定义为式 :
在这里插入图片描述
其中, 约定0log0=0。 H(X) 可以写为H(p) 。
熵又称为自信息
可以视为描述一个随机变量的不确定性的数量 。 它表示信源X每发一个符号(不论发什么符号) 所提供的平均信息量 。 一个随机变量的熵越大, 它的不确定性越大, 那么, 正确估计其值的可能性就越小。 越不确定的随机变量越需要大的信息量用以确定其值。
1.4联合熵和条件熵
如果X, Y是一对离散型随机变量X, Y~p(x, y) , X, Y的联合熵(joint entropy) H(X, Y) 定义为

在这里插入图片描述
联合熵实际上就是描述一对随机变量平均所需要的信息量。
给定随机变量X的情况下, 随机变量Y的条件熵(conditional entropy) 由下式定义:
在这里插入图片描述
1.5互信息
根据熵的连锁规则, 有
在这里插入图片描述
这个差叫做X和Y的互信息, 记作I(X; Y),或者定义为: 如果(X, Y) ~p(x, y) , 则X, Y之间的互信息 I(X;Y) =H(X)- H(X|Y) 。
I(X; Y) 反映的是在知道了Y的值以后X的不确定性的减少量。 可以理解为Y的值透露了多少关于X的信息量。
1.6基尼不纯度
将来自集合中的某种结果随机应用于集合中某一数据项的预期误差率。
在这里插入图片描述
(1)显然基尼不纯度越小,纯度越高,集合的有序程度越高,分类的效果越好;
(2)基尼不纯度为 0 时,表示集合类别一致;
(3)基尼不纯度最高(纯度最低)时,f1=f2=…=fm=1/m
在这里插入图片描述

2.决策树的不同分类算法(ID3算法、C4.5、CART分类树)的原理及应用场景

ID3算法:如果以某种特种特征来划分数据集,会导致数据集发生最大程度的改变,那么就使用这种特征值来划分。
那么又该如何衡量数据集的变化程度呢?
可采用熵来进行衡量
它用来衡量信息集的无序程度,其计算公式如下:
在这里插入图片描述
其中:

  1. x是指分类。要注意决策树的分类是离散的。
  2. P(x)是指任一样本为该分类的概率
    C4.5算法类似ID3,不同之处在于选择特征使用的信息增益比
    不同于ID3与C4.5,CART为一种二分决策树,是满二叉树。CART算法由Breiman等人在 1984 年提出,它采用与传统统计学完全不同的方式构建预测准则,它是以二叉树的形式给出,易于理解、使用和解释。由CART 模型构建的预测树在很多情况下比常用的统计方法构建的代数学预测准则更加准确,且数据越复杂、变量越多,算法的优越性就越显著。
    应用场景:常用于分类和回归,市场营销和生物医药

3. 回归树原理

3.1 最简单的模型
如果预测某个连续变量的大小,最简单的模型之一就是用平均值。比如同事的平均年龄是 28 岁,那么新来了一批同事,在不知道这些同事的任何信息的情况下,直觉上用平均值 28 来预测是比较准确的,至少比 0 岁或者 100 岁要靠谱一些。我们不妨证明一下我们的直觉:
在这里插入图片描述
3.2 加一点难度
仍然是预测同事年龄,这次我们预先知道了同事的职级,假设职级的范围是整数1-10,如何能让这个信息帮助我们更加准确的预测年龄呢?

一个思路是根据职级把同事分为两组,这两组分别应用我们之前提到的“平均值”模型。比如职级小于 5 的同事分到A组,大于或等于5的分到 B 组,A 组的平均年龄是 25 岁,B 组的平均年龄是 35 岁。如果新来了一个同事,职级是 3,应该被分到 A 组,我们就预测他的年龄是 25 岁。
3.3 最佳分割点
还有一个问题待解决,如何取一个最佳的分割点对不同职级的同事进行分组呢?

我们尝试所有 m 个可能的分割点 P_i,沿用之前的损失函数,对 A、B 两组分别计算 Loss 并相加得到 L_i。最小的 L_i 所对应的 P_i 就是我们要找的“最佳分割点”。
3.4 运用多个变量
再复杂一些,如果我们不仅仅知道了同事的职级,还知道了同事的工资(貌似不科学),该如何预测同事的年龄呢?

我们可以分别根据职级、工资计算出职级和工资的最佳分割点P_1, P_2,对应的Loss L_1, L_2。然后比较L_1和L2,取较小者。假设L_1 < L_2,那么按照P_1把不同职级的同事分为A、B两组。在A、B组内分别计算工资所对应的分割点,再分为C、D两组。这样我们就得到了AC, AD, BC, BD四组同事以及对应的平均年龄用于预测。
3.5 答案揭晓
如何实现这种1 to 2, 2 to 4, 4 to 8的算法呢?

熟悉数据结构的同学自然会想到二叉树,这种树被称为回归树,顾名思义利用树形结构求解回归问题。

4. 决策树防止过拟合手段

1.合理、有效地抽样,用相对能够反映业务逻辑的训练集去产生决策树;
2.剪枝:提前停止树的增长或者对已经生成的树按照一定的规则进行后剪枝。
剪枝的方法:
剪枝是一个简化过拟合决策树的过程。有两种常用的剪枝方法:
(1)先剪枝(prepruning):通过提前停止树的构建而对树“剪枝”,一旦停止,节点就成为树叶。该树叶可以持有子集元组中最频繁的类;

先剪枝的方法

   有多种不同的方式可以让决策树停止生长,下面介绍几种停止决策树生长的方法:

   限制决策树的高度和叶子结点处样本的数目

   1.定义一个高度,当决策树达到该高度时就可以停止决策树的生长,这是一种最为简单的方法;

   2.达到某个结点的实例具有相同的特征向量,即使这些实例不属于同一类,也可以停止决策树的生长。这种方法对于处理数据中的数据冲突问题非常有效;

   3.定义一个阈值,当达到某个结点的实例个数小于该阈值时就可以停止决策树的生长;

   4.定义一个阈值,通过计算每次扩张对系统性能的增益,并比较增益值与该阈值的大小来决定是否停止决策树的生长。

(2)后剪枝(postpruning):它首先构造完整的决策树,允许树过度拟合训练数据,然后对那些置信度不够的结点子树用叶子结点来代替,该叶子的类标号用该结点子树中最频繁的类标记。后剪枝的剪枝过程是删除一些子树,然后用其叶子节点代替,这个叶子节点所标识的类别通过大多数原则(majority class criterion)确定。所谓大多数原则,是指剪枝过程中, 将一些子树删除而用叶节点代替,这个叶节点所标识的类别用这棵子树中大多数训练样本所属的类别来标识,所标识的类称为majority class .相比于先剪枝,这种方法更常用,正是因为在先剪枝方法中精确地估计何时停止树增长很困难。
后剪枝的方法

1)REP方法是一种比较简单的后剪枝的方法,在该方法中,可用的数据被分成两个样例集合:一个训练集用来形成学习到的决策树,一个分离的验证集用来评估这个决策树在后续数据上的精度,确切地说是用来评估修剪这个决策树的影响。这个方法的动机是:即使学习器可能会被训练集中的随机错误和巧合规律所误导,但验证集合不大可能表现出同样的随机波动。所以验证集可以用来对过度拟合训练集中的虚假特征提供防护检验。

该剪枝方法考虑将书上的每个节点作为修剪的候选对象,决定是否修剪这个结点有如下步骤组成:

   1:删除以此结点为根的子树

   2:使其成为叶子结点

   3:赋予该结点关联的训练数据的最常见分类

   4:当修剪后的树对于验证集合的性能不会比原来的树差时,才真正删除该结点

  因为训练集合的过拟合,使得验证集合数据能够对其进行修正,反复进行上面的操作,从底向上的处理结点,删除那些能够最大限度的提高验证集合的精度的结点,直到进一步修剪有害为止(有害是指修剪会减低验证集合的精度)。

 REP是最简单的后剪枝方法之一,不过由于使用独立的测试集,原始决策树相比,修改后的决策树可能偏向于过度修剪。这是因为一些不会再测试集中出现的很稀少的训练集实例所对应的分枝在剪枝过如果训练集较小,通常不考虑采用REP算法。

尽管REP有这个缺点,不过REP仍然作为一种基准来评价其它剪枝算法的性能。它对于两阶段决策树学习方法的优点和缺点提供了了一个很好的学习思路。由于验证集合没有参与决策树的创建,所以用REP剪枝后的决策树对于测试样例的偏差要好很多,能够解决一定程度的过拟合问题。

2)PEP,悲观错误剪枝,悲观错误剪枝法是根据剪枝前后的错误率来判定子树的修剪。该方法引入了统计学上连续修正的概念弥补REP中的缺陷,在评价子树的训练错误公式中添加了一个常数,假定每个叶子结点都自动对实例的某个部分进行错误的分类。它不需要像REP(错误率降低修剪)样,需要用部分样本作为测试数据,而是完全使用训练数据来生成决策树,又用这些训练数据来完成剪枝。决策树生成和剪枝都使用训练集, 所以会产生错分。

5. 模型评估

1、保持方法

在保持(Holdout)方法中,将被标记的原始数据划分成两个不想交的集合,分别称为训练集合检验集。在训练数据集上归纳分类模型,在检验集上评估模型的性能。训练集和检验集的划分比例通常根据分析家的判断(例如,50-50,或者2/3作为训练集、1/3作为检验集)。分类器的准确率根据模型在检验集上的准确率估计。

2、随机二次抽样

可以多次重复保持方法来改进对分类器性能的估计,这种方法称作随机二次抽样(random subsampling)。设acciacci是第ii次迭代的模型准确率,总准确率是accsub=∑ki=1acci/kaccsub=∑i=1kacci/k。随机二次抽样也会遇到一些与保持方法同样的问题,因为在训练阶段也没有利用尽可能多的数据。并且,由于它没有控制每个记录用于训练和检验的次数,因此,有些用于训练的记录使用的频率可能比其他记录高很多。

3、交叉验证

替代随机二次抽样的一种方法是交叉验证(cross-validation)。在该方法中,每个记录用于训练的次数相同,并且恰好检验一次。为了解释该方法,假设把数据分为相同大小的两个子集,首先,我们选择一个子集作训练集,而另一个作检验集,然后交换两个集合的角色,原先作训练集的现在做检验集,反之亦然,这种方法叫做二折交叉验证。总误差通过对两次运行的误差求和得到。在这个例子中,每个样本各作一次训练样本和检验样本。k折交叉验证是对该方法的推广,把数据分为大小相同的k份,在每次运行,选择其中一份作检验集,而其余的全作为训练集,该过程重复k次,使得每份数据都用于检验恰好一次。同样,总误差是所有k次运行的误差之和。

4、自助法

以上方法都是假定训练记录采用不放回抽样,因此,训练集合检验集都不包含重复记录。在自助(bootstrap)方法中,训练记录采用有放回抽样,即已经选作训练的记录将放回原来的记录集中,使得它等机率地被重新抽取。如果原始数据有N个记录,可以证明,平均来说,大小为N的自助样本大约包含原始数据中63.2%的记录。这是因为一个记录被自助抽样抽取的概率是1−(1−1/N)^N,当N充分大时,该概率逐渐逼近1−e−1=0.632。没有抽中的记录就成为检验集的一部分,将训练集建立的模型应用到检验集上,得到自助样本准确率的一个估计εiεi。抽样过程重复b次,产生b个自助样本。

按照如何计算分类器的总准确率,有几种不同的自助抽样法。常用的方法之一是.632自助(.632 bootstrap),它通过组合每个自助样本的准确率(εiεi)和由包含所有标记样本的训练集计算的准确率计算总准确率
在这里插入图片描述

6. sklearn参数详解

scikit-learn使用sklearn.tree.DecisionTreeClassifier类来实现决策树分类算法。其中几个典型的参数解释如下:

criterion:特征选择算法。一种基于信息熵,另一种基于基尼不纯度。有人说两种算法的差异性不大,对模型准确性没有太大影响。
splitter:创建决策树分支的选项,一种是选择最优的分支创建原则,另外一种是从排名靠前的特征中,随机选择一个特征来创建分支,这个方法和正则项的效果类似,可以避免过拟合。
max_depth:指定决策树的最大深度,可以避免过拟合。
min_samples_split:指定能创建分支的数据集的大小,默认是2。这是一种前剪枝的方法。
min_samples_leaf:创建分支后的节点样本数量必须大于等于这个数值,否则不再创建分支。这是一种前剪枝的方法。
max_leaf_nodes:除了限制最小的样本节点个数(和参数min_samples_leaf有关),该参数可以限制最大的样本节点个数。
min_impurity_split:可以使用该参数来指定信息增益的阈值。决策树在创建分支时,信息增益必须大于这个阈值,否则不创建分支。
从这些参数可以看到,scikit-learn有一系列的参数用来控制决策树生成的过程,从而解决过拟合问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值