03算法梳理3-决策树

本文深入解析决策树算法,涵盖信息论基础、ID3、C4.5、CART算法,探讨回归树原理及决策树防过拟合手段。详述sklearn决策树参数配置,助您掌握决策树构建与评估。

1.信息论基础

1.1熵

    熵表示随机变量不确定性的度量。熵越大,随机变量的不确定性越大。设 X X X 是一个取有限个值的离散随机变量,其概率分布为:
H ( x ) = ∑ i = 1 n p i l o g p i H(x)=\sum_{i=1}^n{p_ilogp_i} \quad H(x)=i=1npilogpi

1.2联合熵

    联合熵就是度量一个联合分布的随机系统的不确定度,其物理意义为观察一个多个随机变量的随机系统获得的信息量。
    分布为 p ( x , y ) p(x,y) p(x,y)的一对随机变量 ( X , Y ) (X,Y) (X,Y),其联合熵定义为:
H ( X , Y ) = − ∑ x ∈ X ∑ y ∈ Y p ( x , y ) l o g p ( x ; y ) = E [ l o g 1 p ( x , y ) ] H(X,Y)=-\sum_{x\in X}{\sum_{y\in Y}{p(x,y)logp(x;y)=E[log\frac{1}{p(x,y)}]}} H(X,Y)=xXyYp(x,y)logp(x;y)=E[logp(x,y)1]

1.3信息增益

    当熵和条件熵中的概率由数据估计得到时,所对应的熵与条件熵分别称为经验熵和经验条件熵。信息增益表示得知特征 X X X的信息而使得类 Y Y Y的信息的不确定性减少的程度。
    特征A对训练数据集 D D D的信息增益 g ( D , A ) g(D,A) g(D,A),定义为集合 D D D的经验熵 H ( D ) H(D) H(D)与特征A给定条件下 D D D的经验条件熵 H ( D ∣ A ) H(D|A) H(DA)之差,即
g ( D , A ) = H ( D ) − H ( D ∣ A ) g(D,A)=H(D)-H(D|A) g(D,A)=H(D)H(DA)

1.4基尼不纯度

    定义:从一个数据集中随机选取子项,度量其被错误的划分到其他组里的概率。基尼不纯度是在进行决策树编程的时候,对于混杂程度的预测中,一种度量方式。其公式为:
在这里插入图片描述
在这里插入图片描述
    从上图可以看出,基尼系数和熵之半的曲线非常接近,仅仅在45度角附近误差稍大。因此,基尼系数可以做为熵模型的一个近似替代。
    特点:

  • 基尼不纯度可以作为衡量系统混乱程度的标准;
  • 基尼不纯度越小纯度越高,集合的有序程度越高,分类的效果越好;
  • 基尼不纯度为 0 时,表示集合类别一致;
  • 在决策树中,比较基尼不纯度的大小可以选择更好的决策条件(子节点)。

2.决策树分类算法

2.1 ID3算法

    ID3算法的核心是在决策树各个节点上面应用信息增益准则选择特征,递归构建决策树。ID3相当于用极大似然法进行概率模型的选择。具体方法是:

  • 从根节点开始,对结点计算所有可能的特征的信息增益,选择信息增益最大的特征作为结点的特征,由该特征的不同取值建立子结点;
  • 再对子结点递归调用以上方法,构建决策树;
  • 直到所有特征的信息增益均很小或者没有特征可以选择为止。

2.2 C4.5算法

    C4.5算法与ID3算法相似,C4.5在生成过程中,用信息增益比来选择特征。

2.3 CART分类树

    CART算法是在给定输入随机变量 X X X条件下输出随机变量 Y Y Y的条件概率分布的学习方法。CATRT算法假设决策树是二叉树,左分支是取值为“是”的分支,右分支是取值为“否”的分支。
    CART算法由以下两步组成:

  • 决策树生成:基于训练数据集生成决策树,生成的决策树要尽量大;
  • 决策树减枝:用验证数据集对已生成的树进行减枝并选择最优子树,减枝原则为损失函数最小。

3.回归树原理

    一个回归树对应着输入空间(即特征空间)的一个划分以及在划分单元上的输出值。分类树中,我们采用信息论中的方法,通过计算选择最佳划分点。而在回归树中,采用的是启发式的方法。假如我们有 n n n个特征,每个特征有 s i ( i ∈ ( 1 , n ) ) si(i∈(1,n)) si(i(1,n))个取值,遍历所有特征,尝试该特征所有取值,对空间进行划分,直到取到特征j的取值s,使得损失函数最小,这样就得到了一个划分点。
    算法实现如下:
截图来自李航教授的统计学习方法P69

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

    解决方法:考虑决策树的复杂度,对已生成的决策树进行简化,即剪枝。具体地,从已生成地树上裁掉一些子树和叶结点,并将其根结点或父结点作为新的叶节点,从而简化分类树模型。主要由“先剪枝”和“后剪枝”。

  • 先剪枝:通过提前停止树的构建而对树“剪枝”,一旦停止,节点就成为树叶。该树叶可以持有子集元组中最频繁的类;
  • 后剪枝:它首先构造完整的决策树,允许树过度拟合训练数据,然后对那些置信度不够的结点子树用叶子结点来代替,该叶子的类标号用该结点子树中最频繁的类标记。后剪枝的剪枝过程是删除一些子树,然后用其叶子节点代替,这个叶子节点所标识的类别通过大多数原则确定。

5.模型评估

    主要有自助法和准确度的区间估计

  • 自助法:训练集是对于原数据集的有放回抽样,如果原始数据集 N N N,可以证明,大小为N的自助样本大约包含原数据63.2%的记录。当 N N N充分大的时候, 1 − ( 1 − 1 N ) N 1-(1-\frac{1}{N})^N 1(1N1)N;抽样 b b b 次,产生 b b b个bootstrap样本,则,总准确率为(accs为包含所有样本计算的准确率):
    在这里插入图片描述

  • 准确度的区间估计:将分类问题看做二项分布,则有:
    X X X为模型正确分类, p p p 为准确率, X X X 服从均值 N p N_p Np、方差 N p ( 1 − p ) N_p(1-p) Np(1p)的二项分布。 a c c = X N acc=\frac{X}{N} acc=NX为均值 p p p,方差 p 1 − p N p\frac{1-p}{N} pN1p的二项分布。acc 的置信区间:
    在这里插入图片描述

6.sklearn参数详解,Python绘制决策树

'''
scikit-learn中有两类决策树,它们均采用优化的CART决策树算法。
'''
from sklearn.tree import DecisionTreeRegressor
'''
回归决策树
'''
DecisionTreeRegressor(criterion="mse",
                         splitter="best",
                         max_depth=None,
                         min_samples_split=2,
                         min_samples_leaf=1,
                         min_weight_fraction_leaf=0.,
                         max_features=None,
                         random_state=None,
                         max_leaf_nodes=None,
                         min_impurity_decrease=0.,
                         min_impurity_split=None,
                         presort=False)
'''
参数含义:
1.criterion:string, optional (default="mse")
            它指定了切分质量的评价准则。默认为'mse'(mean squared error)2.splitter:string, optional (default="best")
            它指定了在每个节点切分的策略。有两种切分策咯:
            (1).splitter='best':表示选择最优的切分特征和切分点。
            (2).splitter='random':表示随机切分。
3.max_depth:int or None, optional (default=None)
             指定树的最大深度。如果为None,则表示树的深度不限,直到
             每个叶子都是纯净的,即叶节点中所有样本都属于同一个类别,
             或者叶子节点中包含小于min_samples_split个样本。
4.min_samples_split:int, float, optional (default=2)
             整数或者浮点数,默认为2。它指定了分裂一个内部节点(非叶子节点)
             需要的最小样本数。如果为浮点数(01之间),最少样本分割数为ceil(min_samples_split * n_samples)
5.min_samples_leaf:int, float, optional (default=1)
             整数或者浮点数,默认为1。它指定了每个叶子节点包含的最少样本数。
             如果为浮点数(01之间),每个叶子节点包含的最少样本数为ceil(min_samples_leaf * n_samples)
6.min_weight_fraction_leaf:float, optional (default=0.)
             它指定了叶子节点中样本的最小权重系数。默认情况下样本有相同的权重。
7.max_feature:int, float, string or None, optional (default=None)
             可以是整数,浮点数,字符串或者None。默认为None(1).如果是整数,则每次节点分裂只考虑max_feature个特征。
             (2).如果是浮点数(01之间),则每次分裂节点的时候只考虑int(max_features * n_features)个特征。
             (3).如果是字符串'auto',max_features=n_features。
             (4).如果是字符串'sqrt',max_features=sqrt(n_features)(5).如果是字符串'log2',max_features=log2(n_features)(6).如果是None,max_feature=n_feature。
8.random_state:int, RandomState instance or None, optional (default=None)
             (1).如果为整数,则它指定了随机数生成器的种子。
             (2).如果为RandomState实例,则指定了随机数生成器。
             (3).如果为None,则使用默认的随机数生成器。
9.max_leaf_nodes:int or None, optional (default=None)
             (1).如果为None,则叶子节点数量不限。
             (2).如果不为None,则max_depth被忽略。
10.min_impurity_decrease:float, optional (default=0.)
             如果节点的分裂导致不纯度的减少(分裂后样本比分裂前更加纯净)大于或等于min_impurity_decrease,则分裂该节点。
             个人理解这个参数应该是针对分类问题时才有意义。这里的不纯度应该是指基尼指数。
             回归生成树采用的是平方误差最小化策略。分类生成树采用的是基尼指数最小化策略。
             加权不纯度的减少量计算公式为:
             min_impurity_decrease=N_t / N * (impurity - N_t_R / N_t * right_impurity
                                - N_t_L / N_t * left_impurity)
             其中N是样本的总数,N_t是当前节点的样本数,N_t_L是分裂后左子节点的样本数,
             N_t_R是分裂后右子节点的样本数。impurity指当前节点的基尼指数,right_impurity指
             分裂后右子节点的基尼指数。left_impurity指分裂后左子节点的基尼指数。
11.min_impurity_split:float
             树生长过程中早停止的阈值。如果当前节点的不纯度高于阈值,节点将分裂,否则它是叶子节点。
             这个参数已经被弃用。用min_impurity_decrease代替了min_impurity_split。
12.presort: bool, optional (default=False)
             指定是否需要提前排序数据从而加速寻找最优切分的过程。设置为True时,对于大数据集
             会减慢总体的训练过程;但是对于一个小数据集或者设定了最大深度的情况下,会加速训练过程。
--------------------- 

参考资料

  1. https://www.zhihu.com/question/22178202
  2. https://blog.csdn.net/SAJIAHAN/article/details/82779513
  3. https://blog.csdn.net/JJBOOM425/article/details/79997440 决策树中基尼不纯度
  4. https://blog.csdn.net/weixin_40604987/article/details/79296427 回归树
  5. https://blog.csdn.net/longgb123/article/details/52972604 决策树模型评估
  6. https://blog.csdn.net/Yeoman92/article/details/73436632 绘制1
  7. https://blog.csdn.net/sinat_29957455/article/details/76553987 绘制2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值