算法梳理——003决策树

一、信息论基础

划分数据集的大原则是:将无序数据变得更加有序,但是各种方法都有各自的优缺点,信息论是量化处理信息的分支科学,在划分数据集前后信息发生的变化称为信息增益,获得信息增益最高的特征就是最好的选择,所以必须先学习如何计算信息增益,集合信息的度量方式称为香农熵,或者简称熵。主要研究对一个信号能够提供信息的多少进行量化。主要通过log进行运算,其中以e为底,那么计算单位为奈特,如果底数是2 单位是比特
联合熵:两个随机变量X,Y的联合分布,可以形成联合熵Joint Entropy,用H(X,Y)表示。
条件熵 H(Y|X)H(Y|X) 表示在已知随机变量 XX 的条件下随机变量 YY 的不确定性。条件熵 H(Y|X)H(Y|X) 定义为 XX 给定条件下 YY 的条件概率分布的熵对 XX 的数学期望:
在这里插入图片描述
其中pi=P(X=xi)
信息增益:信息增益是相对于特征而言的表示的是得知一个条件的情况下不确定性较少的程度。 所以,特征A对训练数据集D的信息增益g(D,A),定义为集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D|A)之差,即:在这里插入图片描述

cart决策树使用基尼指数来选择划分属性,数据集D的纯度可以用基尼值来度量。
在这里插入图片描述
**基尼不纯度:**将来自集合中的某种结果随机应用于集合中某一数据项的预期误差率。
在这里插入图片描述

二、ID3算法

ID3算法是一种贪心算法,用来构造决策树。ID3算法起源于概念学习系统(CLS),以信息熵的下降速度为选取测试属性的标准,在决策树各个节点上应用信息增益准则选择特征,递归的构建决策树。具体方法是,从根节点开始对节点计算所有可能的特征的信息增益,选择信息增益最大的特征作为结点特征,由该特征的不同选取值建立子节点,在对子节点递归的调用以上方法,构建决策树;直到所有特征的信息增益均很小或没有特征可以选择为止,最后得到一个决策树,ID3相当于用极大似然法进行概率模型的选择。
下面用一个例子来对算法进行简单介绍:
在这里插入图片描述

表中有年龄,是否有工作,是否有房子,信贷情况四个特征
在这里插入图片描述
ID3算法的优缺点
ID3的优点
不存在无解的危险;可以利用全部训练例的统计性质进行决策,从而抵抗噪音。
ID3的缺点
信息增益准则对可取值数目较多的的属性有所偏好
容易过拟合处理大型数据速度较慢,经常出现内存不足,不可以并行,不可以处理数值型数据;ID3(并行)和ID3(number)解决了后两个问题。只适用于非增量数据集,不适用于增量数据集,可能会收敛到局部最优解而非全局最优解,最佳分离属性容易选择属性值多一些的属性。

三、 C4.5算法
c4.5算法与ID3算法相似,做了一点改进,就是用信息增益比来选择特征
(1)通过信息增益率选择分裂属性,克服了ID3算法中通过信息增益倾向于选择拥有多个属性值的属性作为分裂属性的不足;
  (2)能够处理离散型和连续型的属性类型,即将连续型的属性进行离散化处理;
  (3)构造决策树之后进行剪枝操作;
  (4)能够处理具有缺失属性值的训练数据。
大致步骤:
输入训练数据集D,特征集A,阈值
输出决策树T
如果D中所有实例同属一类,则置T为单节点树,将ck作为该节点的类
如果A=空集,则置T为单节点树,并将d中实例数最大的类作为该节点的类
否则 计算增益比:
在这里插入图片描述
如果Ag增益比小于阈值则置T为单节点树,
否则对Ag的每一个可能值啊ai,按照Ag=ai将D分为若干非空子集Di,将Di中实例数最大的类作为标记,构建子节点,由节点和子节点构成树T,返回T
然后重复上述步骤。
增益率准则对可取值数目少的属性有所偏好,所以c4.5并不是单纯选择增益率最大的,而是使用启发式:先从候选属性中找出信息增益高于平均水平的属性,再从中找出增益率最高的
C4.5算法优点:产生的分类规则易于理解,准确率较高。
缺点:在构造树的过程中,需要对数据集进行多次的顺序扫描和排序,因而导致算法的低效。此外,C4.5只适合于能够驻留于内存的数据集,当训练集大得无法在内存容纳时程序无法运行。
四、cART算法
在这里插入图片描述
在这里插入图片描述
五、连续特征和离散特征处理

当属性类型为离散型,无须对数据进行离散化处理;当属性类型为连续型,则需要对数据进行离散化处理。C4.5算法针对连续属性的离散化处理,核心思想:将属性A的N个属性值按照升序排列;通过二分法将属性A的所有属性值分成两部分(共有N-1种划分方法,二分的阈值为相邻两个属性值的中间值);计算每种划分方法对应的信息增益,选取信息增益最大的划分方法的阈值作为属性A二分的阈值。详细流程如下:
在这里插入图片描述

六、剪枝 模型评估
在这里插入图片描述
模型评估
自助法(bootstrap):训练集是对于原数据集的有放回抽样,如果原始数据集N,可以证明,大小为N的自助样本大约包含原数据63.2%的记录。当N充分大的时候,1-(1-1/N)^(N) 概率逼近 1-e^(-1)=0.632。抽样 b 次,产生 b 个bootstrap样本,则,总准确率为(accs为包含所有样本计算的准确率): 在这里插入图片描述
准确度的区间估计:
将分类问题看做二项分布,则有:
令 X 为模型正确分类,p 为准确率,X 服从均值 Np、方差 Np(1-p)的二项分布。acc=X/N为均值 p,方差 p(1-p)/N 的二项分布。acc 的置信区间: 在这里插入图片描述

七、sklern参数
sklearn参数

from sklearn.tree import DecisionTreeClassifier

1.criterion:string, optional (default="gini")
            (1).criterion='gini',分裂节点时评价准则是Gini指数。
            (2).criterion='entropy',分裂节点时的评价指标是信息增益。
2.max_depth:int or None, optional (default=None)。指定树的最大深度。
            如果为None,表示树的深度不限。直到所有的叶子节点都是纯净的,即叶子节点
            中所有的样本点都属于同一个类别。或者每个叶子节点包含的样本数小于min_samples_split。
3.splitter:string, optional (default="best")。指定分裂节点时的策略。
           (1).splitter='best',表示选择最优的分裂策略。
           (2).splitter='random',表示选择最好的随机切分策略。
4.min_samples_split:int, float, optional (default=2)。表示分裂一个内部节点需要的做少样本数。
           (1).如果为整数,则min_samples_split就是最少样本数。
           (2).如果为浮点数(0到1之间),则每次分裂最少样本数为ceil(min_samples_split * n_samples)
5.min_samples_leaf: int, float, optional (default=1)。指定每个叶子节点需要的最少样本数。
           (1).如果为整数,则min_samples_split就是最少样本数。
           (2).如果为浮点数(0到1之间),则每个叶子节点最少样本数为ceil(min_samples_leaf * n_samples)
6.min_weight_fraction_leaf:float, optional (default=0.)
           指定叶子节点中样本的最小权重。
7.max_features:int, float, string or None, optional (default=None).
           搜寻最佳划分的时候考虑的特征数量。
           (1).如果为整数,每次分裂只考虑max_features个特征。
           (2).如果为浮点数(0到1之间),每次切分只考虑int(max_features * n_features)个特征。
           (3).如果为'auto'或者'sqrt',则每次切分只考虑sqrt(n_features)个特征
           (4).如果为'log2',则每次切分只考虑log2(n_features)个特征。
           (5).如果为None,则每次切分考虑n_features个特征。
           (6).如果已经考虑了max_features个特征,但还是没有找到一个有效的切分,那么还会继续寻找
           下一个特征,直到找到一个有效的切分为止。
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).如果为整数,则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.class_weight:dict, list of dicts, "balanced" or None, default=None
         类别权重的形式为{class_label: weight}
         (1).如果没有给出每个类别的权重,则每个类别的权重都为1。
         (2).如果class_weight='balanced',则分类的权重与样本中每个类别出现的频率成反比。
         计算公式为:n_samples / (n_classes * np.bincount(y))
         (3).如果sample_weight提供了样本权重(由fit方法提供),则这些权重都会乘以sample_weight。
13.presort:bool, optional (default=False)
        指定是否需要提前排序数据从而加速训练中寻找最优切分的过程。设置为True时,对于大数据集


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值