决策树算法梳理
1-信息论基础(熵 联合熵 条件熵 信息增益 基尼不纯度) 2.决策树的不同分类算法(ID3算法、C4.5、CART分类树)的原理及应用场景
熵
我们的日常信息是可以被量化的,比如我们通常会说“信息量好大”。引用香农的话,信息是用来消除随机不确定性的东西,所以一条信息的信息量大小和它的不确定性有直接的关系。(以下一段总结来自here)比如一个离散的随机变量 x,信息的量度依赖于概率分布 p(x),因此我们想要寻找一个函数 I(x),它是概率 p(x) 的单调函数,表达了信息的内容。如果我们有两个不相关的事件 x 和 y,那么观察两个事件同时发生时获得的信息量应该等于观察到事件各自发生时获得的信息之和,即:I(x,y)=I(x)+I(y)。因为两个事件是独立不相关的,因此 p(x,y)=p(x)p(y)。根据这两个关系,很容易看出 I(x)一定与 p(x)的对数有关 (因为对数的运算法则是 loga(mn)=logam+logan)。因此,我们有I(x)=−logp(x)I(x)=−logp(x)。I(x)也被称为随机变量 x 的自信息 (self-information),描述的是随机变量的某个事件发生所带来的信息量。现在假设一个发送者想传送一个随机变量的值给接收者。那么在这个过程中,他们传输的平均信息量可以通过求 I(x)=−logp(x) 关于概率分布 p(x)的期望得到H(x):
- “信息熵“是度量样本集合纯度最常用的一种指标。H(x)的值越小,则当前样本集合D的纯度越高。当随机分布为均匀分布时,熵最大。
- 将一维随机变量分布推广到多维随机变量分布,则引出联合熵。
- 条件熵:X给定条件下Y的条件分布的熵对X的数学期望
信息增益
信息增益在决策树算法中是用来选择特征的指标,信息增益越大,则这个特征的选择性越好,在概率中定义为:待分类的集合的熵和选定某个特征的条件熵之差。一般而言,信息增益越大,则意味着使用该属性来进行划分所获得的“纯度提升”越大,因此,我们可以用信息增益来进行决策树的划分属性选择。
基尼系数
基尼系数是一种与信息熵类似的做特征选择的方式,数据集D的纯度可用基尼值来度量。直观来说,Gini(D)反映了从数据集D中随机抽取两个样本,其类别标志不一致的概率。因此,基尼值越小,则数据集D的纯度越高。
决策树的不同分类算法
基本的决策树算法有三类,分别是:ID3、C4.5、CART。前两个是分类树,最后一个是回归树。这里我找到了一篇分析不错的博文:https://blog.csdn.net/weixin_39750084/article/details/83449866
ID3算法
ID3算法是决策树的一种,它是基于奥卡姆剃刀原理的,即用尽量用较少的东西做更多的事。全称为迭代二叉树3代。这个算法的基础就是奥卡姆剃刀原理,越是小型的决策树越优于大的决策树。(here)在信息论中,期望信息越小,那么信息增益就越大,从而纯度就越高。ID3算法的核心思想就是以信息增益来度量属性的选择,选择分裂后信息增益最大的属性进行分裂。该算法采用自顶向下的贪婪搜索遍历可能的决策空间。
算法流程
ID3算法有两个明显的缺点:
1)使用信息增益进行特征选择,但信息增益是一个绝对的概念,与训练集本身的离散程度有很大的关系,当训练集本身离散程度很高时,其可改进的空间更大,能够获得的信息增益更大,反之更小,这会导致很难在开始训练前就确定一个较为合理的阈值ϵ。
2)需要一直进行到没有特征可选为止,特征很多时树深度可能很深,无关紧要的特征也会被精确分析,从而导致过拟合。
C4.5
C4.5是一系列用在机器学习和数据挖掘的分类问题中的算法。它的目标是监督学习:给定一个数据集,其中的每一个元组都能用一组属性值来描述,每一个元组属于一个互斥的类别中的某一类。C4.5的目标是通过学习,找到一个从属性值到类别的映射关系,并且这个映射能用于对新的类别未知的实体进行分类。C4.5算法比起ID3做出了两个改进:
- 使用信息增益比进行特征选择
通过这样的归一化之后,我们能够校正scale上的偏差,方便选择一个较为稳定的阈值,不需要受到数据集本身的影响。 - 剪枝
知道了过拟合产生的原因是为了精确拟合训练集而形成了过于复杂的模型,那么剪枝就是要控制模型的复杂度,通过正则化的损失函数公式来实现
CART
不同于前两种算法预测结果为分类结果,CART的预测结果为概率值。并且改进了前两种算法中的一个缺点:使用信息增益或信息增益比时,可选值多的特征往往有更高的信息增益。所以在CART树中,不再采用信息增益或信息增益比,而是在做回归时采用平方误差最小化准则,在做分类时采用基尼指数最小化准则。
2-回归树原理
我们都知道树可以用来处理分类问题,那么回归树又是怎么一回事呢?实际上,根据处理数据类型的不同,决策树又分为两类:分类决策树(三种比较常见的分类决策树就是上文介绍的那三种算法)与回归决策树,前者可用于处理离散型数据,后者可用于处理连续型数据。(非常适合新手的Python实现代码)既然是决策树,那么必然会存在以下两个核心问题:如何选择划分点?如何决定叶节点的输出值?
一个回归树对应着输入空间(即特征空间)的一个划分以及在划分单元上的输出值。分类树中,我们采用信息论中的方法,通过计算选择最佳划分点。而在回归树中,采用的是启发式的方法。假如我们有n个特征,每个特征有si(i∈(1,n))个取值,那我们遍历所有特征,尝试该特征所有取值,对空间进行划分,直到取到特征j的取值s,使得损失函数最小,这样就得到了一个划分点。假设将输入空间划分为M个单元:R1,R2,…,Rm。那么每个区域的输出值就是:cm=ave(yi|xi∈Rm)也就是该区域内所有点y值的平均数。
3-决策树防止过拟合手段
剪枝是决策树学习算法对付“过拟合”的主要手段。决策树剪枝的基本策略有“预剪枝”和“后剪枝”。
预剪枝是指在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点;后剪枝则是先从训练集生成一棵完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化性能提升,则将该子树替换为叶结点。
那么如何判断决策树泛化性能是否提升呢?下面将会说到。
4-模型评估
我们希望得到泛化性能强的模型,可是我们只有一个包含m个样例的数据集,既要训练,又要测试,该怎么办?有以下几种做法:留出法,交叉验证法,自助法
这一篇博文也很详细:https://blog.csdn.net/qq_26898461/article/details/50639880