决策树算法梳理

信息论基础
熵(Entropy) ​ 熵是随机变量的不确定性的度量。设 X 是一个离散的随机变量,其取值空间为 X ,概率密度函数p(x)=P(X=x),x∈X,则离散型随机变量 X 的信息熵为,H(X)=−∑x∈Xp(x)logp(x), 对数log所用的底一般为2,因此其单位为比特(bit)
我们知道,如果X∼p(x),则随机变量 Y=g(X) 的数学期望 EY=Epg(X)=∑x∈Xg(x)p(x),其中Epg(X)表示函数g(X)关于概率分布p(x)的期望。
特别地,当 g(X)=−logp(X) 时,因此随机变量 X 的信息熵可以解释为H(X)=Elog1p(X)
另外我们知道,一条信息的信息量与其不确定性(概率)有直接的关系,由此我们可以得到,随机变量 X=x 的信息量为 log1p(X=x),所以随机变量 X 的信息熵 H(X) 还可以解释为随机变量 X 的信息量的期望(平均信息量)。

联合熵(Joint entropy)与条件熵(Conditional entropy)

如果随机变量 (X,Y)∼p(x,y) ,那么其联合熵为H(X,Y)=−∑x∈X∑y∈Yp(x,y)logp(x,y)=−Elogp(X,Y)
一样地,其条件熵 H(Y|X) :H(Y|X)=∑x∈Xp(x)H(Y|X=x)=−∑x∈Xp(x)∑y∈Yp(y|x)logp(y|x)=−∑x∈X∑y∈Yp(x,y)logp(y|x)=−Elogp(Y|X)

相对熵(交叉熵(Cross entropy))(Relative entropy)与互信息(Mutual information)

相对熵是两个随机分布之间距离的度量,相对熵 D(p||q) 度量当真实分布为 p(x) 而假定分布为 q(x)
时的差异性
D(p||q)=∑x∈Xp(x)logp(x)q(x)
互信息(信息增益)是一个随机变量包含另一个随机变量信息量的度量,也可以说是在给定一个随机变量的条件下,原随机变量的不确定性的减少量,

决策树的不同分类算法
常用的算法:

信息熵(Entropy)
信息熵就是一组数据包含的信息,是概率的度量。一个信息越是确定那他的信息熵就越低,例如信息:今天中午在你家吃饭。这条信息基本可以确定了今天中午在你家吃饭只一种可能,则信息熵的值低。另一个信息:过几天在你家或者我家吃饭。这条消息过几天是几天,在你家还是在我家,不确定性高,者他的信息熵越高。也就是说:在信息论中,变量的不确定性越大,熵也就越大,把它搞清楚所需要的信息量也就越大。信息熵是信息论中用于度量信息量的一个概念。一个系统越是有序,信息熵就越低;反之,一个系统越是混乱,信息熵就越高。所以,信息熵也可以说是系统有序化程度的一个度量。
定义:假设随机变量X的可能取值有x1,x2, … , xn
对于每一个可能的取值xi,其概率 P(X=xi) = pi , ( i = 1,2, … , n)
因此随机变量X的熵:
H(x) = \sum_{i=1}^n-p(x)log_2P(x)
信息熵(entroy)公式
对上面样本集合D来说,随机变量X是样本的类别,即,假设样本有K个类别,每个类别的概率是,其中|Dk|表示类别k的样本个数,|D|表示样本总数则对于样本集合D来说熵(条件熵)为:
H(D) = -\sum_{k=1}^K\frac{|D_k|}{|D|}log_2\frac{|D_k|}{|D|}
但是光有熵还不够通常在算法中要找到一个用来衡量一个属性对熵的影响,这就出现了信息增益。

ID3算法——信息增益(Information gain)
信息增益(information gain)这个概念,用Gain(D)表示,该概念是指信息熵的有效减少量,该量越高,表明目标属性在该参考属性那失去的信息熵越多。
定义:以某特征划分数据集前后的熵的差值。
划分前样本集合D的熵是一定的,entroy(前),使用某个特征A划分数据集D,计算划分后的数据子集的熵 entroy(后):
信息增益 = entroy(前) - entroy(后)
G(D,A) = H(D)-H(D/A)
用法:计算使用所有特征划分数据集D,得到多个特征划分数据集D的信息增益,从这些信息增益中选择最大的,因而当前结点的划分特征便是使信息增益最大的划分所使用的特征。
信息增益的理解:对于待划分的数据集D,其 entroy(前)是一定的,但是划分之后的熵 entroy(后)是不定的,entroy(后)越小说明使用此特征划分得到的子集的不确定性越小(也就是纯度越高),因此 entroy(前)-entroy(后)差异越大,说明使用当前特征划分数据集D的话,其纯度上升的更快。而我们在构建最优的决策树的时候总希望能更快速到达纯度更高的集合,这一点可以参考优化算法中的梯度下降算法,每一步沿着负梯度方法最小化损失函数的原因就是负梯度方向是函数值减小最快的方向。同理:在决策树构建的过程中我们总是希望集合往最快到达纯度更高的子集合方向发展,因此我们总是选择使得信息增益最大的特征来划分当前数据集D。
缺点:
1.ID3不能处理连续数据的属性
2.ID3不能处理有属性缺失的样本
3.容易产生过度拟合
算法一般会优先选择较多属性值的特征,因为属性多的特征会有相对较大的信息增益

CART算法——基尼指数
经济学中基尼(GINI)指数是一种不等性的度量通常用来度量收入不平等,也可以用来度量任何不均匀分布。
是介于0~1之间的数,0-完全相等,1-完全不等。总体内包含的类别越杂乱,GINI指数就越大。
在CRAT算法中,基尼不纯度指数表示一个随机选中的样本在子集中被分错的可能性。基尼不纯度为这个样本被选中的概率乘以被分错的概率。当一个节点的所有样本都是一个类是,基尼不纯度为0。
基尼指数 = 样本被选中的概率*样本被分错的概率
Gini§ = \sum_{k=1}kp_k(1-p_k)=1-\sum_{k=1}kp_k^2
说明:Pk表示选中的样本中属于K的类别的概率,则这个样本被分错的概率是1-Pk
样本集合中有K个类别,一个随机选中的样本可以属于K个类别中的一个,因而可以对类别求和
样本集合D的Gini指数:假设集合中有K个类别,则:
Gini(D)=1-\sum_{k=1}k(\frac{|C_k|}{|D|})2
基于特征A划分样本集合D之后的基尼指数:
CART是个二叉树,也就是说基于某个特征划分集合只有2个子集:
等于给定特征的样本集合D1
不等于给定的特征值 的样本集合D2
Gini(D,A)=\frac{|D_1|}{|D|}Gini(D_1)+\frac{|D_2|}{|D|}Gini(D_2)
因而对于一个具有多个取值(超过2个)的特征,需要计算以每一个取值作为划分点,对样本D划分之后子集的纯度Gini(D,Ai),(其中Ai 表示特征A的可能取值)
然后从所有的可能划分的Gini(D,Ai)中找出Gini指数最小的划分,这个划分的划分点,便是使用特征A对样本集合D进行划分的最佳划分点。
优点:
1.分类规则清晰,结果容易理解
2.计算量小,实现速度快
3.不需要预选变量,可以处理异常值,缺失值,不同量纲的值

回归树原理
如果预测某个连续变量的大小,最简单的模型之一就是用平均值。比如同事的平均年龄是 28 岁,那么新来了一批同事,在不知道这些同事的任何信息的情况下,直觉上用平均值 28 来预测是比较准确的,至少比 0 岁或者 100 岁要靠谱一些。我们不妨证明一下我们的直觉:

定义损失函数 L,其中 y_hat 是对 y 预测值,使用 MSE 来评估损失:
L = -Largefrac{1}{2}normalsizesum_{i=0}^m(y_i-hat{y}) ^ 2
对 y_hat 求导:
large frac{mathrm{d}L}{mathrm{d}hat{y}} normalsize = sum_{i=0}^m(y_i-hat{y}) = sum_{i=0}^my_i - sum_{i=0}^mhat{y} = sum_{i=0}^my_i - m*hat{y}
令导数等于 0,最小化 MSE,则:
sum_{i=0}^my_i - m*hat{y} = 0
所以,
hat{y} = Largefrac{1}{m}normalsizesum_{i=0}^my_i
结论,如果要用一个常量来预测 y,用 y 的均值是一个最佳的选择。

接下来加一点难度

仍然是预测同事年龄,这次我们预先知道了同事的职级,假设职级的范围是整数1-10,如何能让这个信息帮助我们更加准确的预测年龄呢?

一个思路是根据职级把同事分为两组,这两组分别应用我们之前提到的“平均值”模型。比如职级小于 5 的同事分到A组,大于或等于5的分到 B 组,A 组的平均年龄是 25 岁,B 组的平均年龄是 35 岁。如果新来了一个同事,职级是 3,应该被分到 A 组,我们就预测他的年龄是 25 岁。
1.3 最佳分割点

还有一个问题待解决,如何取一个最佳的分割点对不同职级的同事进行分组呢?

我们尝试所有 m 个可能的分割点 P_i,沿用之前的损失函数,对 A、B 两组分别计算 Loss 并相加得到 L_i。最小的 L_i 所对应的 P_i 就是我们要找的“最佳分割点”。

运用多个变量

再复杂一些,如果我们不仅仅知道了同事的职级,还知道了同事的工资(貌似不科学),该如何预测同事的年龄呢?

我们可以分别根据职级、工资计算出职级和工资的最佳分割点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四组同事以及对应的平均年龄用于预测。

如何实现这种1 to 2, 2 to 4, 4 to 8的算法呢?
熟悉数据结构的同学自然会想到二叉树,这种树被称为回归树,顾名思义利用树形结构求解回归问题。

决策树防止过拟合手段

过度拟合对于决策树学习和其他很多学习算法是一个重要的实践困难。例如,在一次关于ID3算法的实验研究中(Mingers 1989b),对于5种带有噪声和不确定数据的不同学习任务,人们发现在多数问题中过度拟合使决策树的精度降低了10-25%。

有几种途径用来避免决策树学习中的过度拟合。它们可被分为两类:

(1). 及早停止增长树法,在ID3算法完美分类训练数据之前停止增长树;

(2). 后修剪法(post-prune),即允许树过度拟合数据,然后对这个树后修剪。

尽管第一种方法可能看起来更直接,但是对过度拟合的树进行后修剪的第二种方法被证明在实践中更成功。这是因为在第一种方法中精确地估计何时停止增长树很困难。无论是通过及早停止还是后修剪来得到正确大小的树,一个关键的问题是使用什么样的准则来确定最终正确树的大小。解决这个问题的方法包括:

(1). 使用与训练样例截然不同的一套分离的样例,来评估通过后修剪方法从树上修剪结点的效用。

(2). 使用所有可用数据进行训练,但进行统计测试来估计扩展(或修剪)一个特定的结点是否有可能改善在训练集合外的实例上的性能。例如,Quinlan (1986)使用一种卡方(chi-square)测试来估计进一步扩展结点是否能改善在整个实例分布上的性能,还是仅仅改善了在当前的训练数据上的性能。

(3). 使用一个明确的标准来衡量训练样例和决策树编码的复杂度,当这个编码的长度最小时停止增长树。这个方法基于一种启发式规则,被称为最小描述长度(Minimum Description Length)的准则。Quinlan & Rivest(1989)和Mehta et al.(1995)也讨论了这种方法。

实践中,一种用来发现高精度假设的非常成功的方法为“规则后修剪(rule post-pruning)”。这种修剪方法的一个变体被用在C4.5中(Quinlan 1993),C4.5是从原始的ID3算法的派生出来的。规则后修剪包括下面的步骤:

(1). 从训练集合推导出决策树,增长决策树直到尽可能好地拟合训练数据,允许过度拟合发生。

(2). 将决策树转化为等价的规则集合,方法是为从根结点到叶子结点的每一条路径创建一条规则。

(3). 通过删除任何能导致估计精度提高的前件(preconditions)来修剪(泛化)每一条规则。

(4). 按照修剪过的规则的估计精度对它们进行排序;并按这样的顺序应用这些规则来分类后来的实例。

接下来,通过删除不会降低估计精度的先行词来修剪每一个规则。例如对于上面的规则,规则后修剪算法会考虑删除先行词(Outlook=Sunny)和(Humidity=High)。它会选择这些修剪步骤中使估计精度有最大提升的步骤,然后考虑修剪第二个前件作为进一步的修剪步骤。如果某个修剪步骤降低了估计精度,那么这个步骤不会被执行。

如同前面提出的,估计规则精度的一种方法是使用与训练集和不相交的验证集合。另一种被C4.5使用的方法是基于训练集合本身评估性能,但使用一种保守估计(pessimistic estimate)来弥补训练数据有利于当前规则的估计偏置。更准确地讲,C4.5通过以下方法计算保守估计,先计算规则在它应用的训练样例上的精度,然后假定此估计精度为二项分布,并计算它的标准差(standard deviation)。对于一个给定的置信区间,采用下界估计作为规则性能的度量(例如,对于一个95%的置信区间,规则精度被保守估计为:在训练集合上的观察精度减去1.96乘估计的标准差)。这样做的效果是,对于大的数据集,保守预测非常接近观察精度(也就是标准差非常小),然而随着数据集合的减小,它开始离观察精度越来越远。虽然这种启发式方法不是统计有效(statistically valid)的,但是已经发现它在实践中是有用的。第5章讨论了统计有效的预测均值和置信区间的方法。

为什么修剪之前要把决策树转化成规则集呢?
(1). 转化为规则集可以区分决策结点使用的不同上下文。因为贯穿决策结点的每条不同路径产生一条不同的规则,所以对于不同路径,关于一个属性测试的修剪决策可以不同。相反,如果直接修剪树本身,只有两个选择,要么完全删除决策结点,要么保留它的本来状态。
(2). 转化为规则集消除了根结点附近的属性测试和叶结点附近的属性测试的区别。于是避免了零乱的记录问题,比如若是根结点被修剪了但保留它下面的部分子树时如何重新组织这棵树。

模型评估

保持方法
在保持(Holdout)方法中,将被标记的原始数据划分成两个不相交的集合,分别称为训练集合检验集。在训练数据集上归纳分类模型,在检验集上评估模型的性能。训练集和检验集的划分比例通常根据分析家的判断(例如,50-50,或者2/3作为训练集,1/3作为检验集)。分类器的准确率根据模型在检验集上的准确率估计。
保持方法有一些众所周知的局限性。第一,用于训练的被标记样本较少,因为要保留一部分记录用于检验。因此,建立的模型不如使用所有被标记样本建立的模型好。第二,模型可能高度依赖于训练集和检验集的构成。一方面,训练集越小,模型的方差越大。另一方面,如果训练集太大,根据用较小的检验集估计的准确率又不太可靠。这样的估计具有很宽的置信区间。最后,训练集合检验集不再是相互独立的。因为训练集和检验集来源于同一个数据集,在一个子集中超出比例的类在另一个子集就低于比例,反之亦然。

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

交叉验证
替代随机二次抽样的一种方法是交叉验证(cross-validation)。在该方法中,每个记录用于训练的次数相同吗,并且恰好检验一次。为了解释该方法,假设把数据分为相同大小的两个子集,首先,我们选择一个子集作为训练集,而另一个做检验集,然后交换两个集合的角色,原先做训练集的现在做检验集,反之亦然,这种方法较二折交叉验证。总误差通过对两次运行的误差求和得到。在这个例子中,每个样本各做一次训练样本和检验样本。k折交叉验证是对该方法的推广,把数据分为大小相同的k分,在每次运行,选择其中一份做检验集,而其余的全部作为训练集,该过程重复k次,使得每份数据都用于检验恰好一次。同样,总误差是所有k次运行的误差纸之和。k折价差验证方法的一种特殊情况使令k=N,其中N是数据集的大小,在这种所谓留一(leave-one-out)方法中,每个检验集只有一个记录。该方法的优点是使用尽可能多的训练记录,此外,检验集之间是互斥的,并且有效地覆盖了整个数据集;该方法的缺点是整个过程重复N次,计算上开销很大,此外,因为每个检验集只有一个记录,性能估计度量的方法偏高。

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

任务三——决策树算法梳理相关推荐

  1. 决策树算法梳理以及python实现

    1.信息论基础 1.1 熵 熵:用通俗点的话来说就是一个衡量混乱程度的单位.例如一个杯子A里只倒了啤酒,而另 一个杯子B里倒了啤酒,白酒, 红酒,那么我们说杯子A的熵值比杯子B的熵值小 \ 专业解释: ...

  2. 决策树算法模型的归类与整理(ID3&C4.5&CART&线性二分类&非线性二分类)

    决策树算法模型的归类与整理(ID3&C4.5&CART&线性二分类&非线性二分类) 一. 总结摘要 决策树模型在监督学习中非常常见,可用于分类(二分类.多分类)和回归. ...

  3. 【机器学习入门】(5) 决策树算法实战:sklearn实现决策树,实例应用(沉船幸存者预测)附python完整代码及数据集

    各位同学好,今天和大家分享一下python机器学习中的决策树算法,在上一节中我介绍了决策树算法的基本原理,这一节,我将通过实例应用带大家进一步认识这个算法.文末有完整代码和数据集,需要的自取.那我们开 ...

  4. 【机器学习入门】(4) 决策树算法理论:算法原理、信息熵、信息增益、预剪枝、后剪枝、算法选择

    各位同学好,今天我向大家介绍一下python机器学习中的决策树算法的基本原理.内容主要有: (1) 概念理解:(2) 信息熵:(3) 信息增益:(4) 算法选择:(5) 预剪枝和后剪枝. python ...

  5. 决策树算法原理(ID3,C4.5)

    决策树算法原理(CART分类树) CART回归树 决策树的剪枝 决策树可以作为分类算法,也可以作为回归算法,同时特别适合集成学习比如随机森林. 1. 决策树ID3算法的信息论基础   1970年昆兰找 ...

  6. 每日一问 - 关于决策树算法

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 来源:Datawhale优秀回答者 将在留言区,Datawhale高校群 ...

  7. 最常用的决策树算法!Random Forest、Adaboost、GBDT 算法

    点击上方"Datawhale",选择"星标"公众号 第一时间获取价值内容 本文主要介绍基于集成学习的决策树,其主要通过不同学习框架生产基学习器,并综合所有基学习 ...

  8. 决策树算法的原理(接地气版)

    ↑↑点击上方蓝字,N个G的惊喜 ❝ 决策树( )是一类很常见很经典的机器学习算法,既可以作为分类算法也可以作为回归算法.同时也适合许多集成算法,如 , ,以后会逐一介绍.本篇介绍一下决策树算法的原理. ...

  9. 决策树算法之特征工程-特征提取

    决策树算法之特征工程-特征提取 什么是特征提取呢?   [把数据转化为机器更加容易识别的数据] 1 特征提取 1.1 定义 将任意数据(如文本或图像)转换为可用于机器学习的数字特征 注:特征值化是为了 ...

最新文章

  1. java 卖票问题_Java之多线程窗口卖票问题(Thread)
  2. 互联网大脑如何产生“梦境“并形成元宇宙
  3. python零基础怎么学-python 零基础该怎么学?
  4. UA OPTI501 电磁波 Lorentz Oscillator Model 3 相速度与群速度
  5. TensorFlow学习笔记(二十六)CNN的9大模型之LeNet5的原理讲解
  6. 如何使用Eclipse调试Maven构建
  7. windows 下cmd命令行的替换工具cmder
  8. 雷军 1994 年写的代码,你见过吗?厉害了!
  9. 华为Mate X 5G再次秒售罄;全新折叠屏手机渲染图曝光:确实不一般!
  10. python 插入排序,选择排序
  11. jsp 设置404页面
  12. py2exe打包python_Python打包-py2exe使用
  13. Vmware下安装配置HMC
  14. 【Word】编号与文字间距过大
  15. html 实现b站弹幕,可实现B站 蒙版弹幕 效果的前端组件 —— Barrage UI
  16. 【小程序项目开发 --- 京东商城】 启航篇之uni-app项目搭建
  17. 单片机c语言设计奥运五环,如何用C语言程序来设计奥运五环图案.doc
  18. PS学习总结三:修图必备的高阶操作
  19. 新版win10的恢复语言栏设置
  20. Java入门(四)JAVA SE 02

热门文章

  1. 利用circom和snarkjs实现zkSNARK零知识证明的智能合约应用
  2. 做游戏,学编程(C语言)教材《C语言课程设计与游戏开发实践教程》出版了...
  3. Tasker配置 QQ消息朗读
  4. 【面试】Morgan Stanley IT面经
  5. 删掉系统服务里边的tomcat7服务
  6. Go程序内存泄露问题快速定位 | Gopher Daily (2021.09.01) ʕ◔ϖ◔ʔ
  7. 独孤九剑第六式-支持向量机模型(SVM)
  8. Ubuntu 看不了flash(优酷,土豆)视频(表现症状:白块)
  9. 《深度学习入门-基于Python的理论与实现》学习笔记1
  10. vue3使用vis绘制甘特图制作timeline可拖动时间轴,时间轴中文化