DataWhale-202110 树模型与集成学习

  • 信息论的基础
    • 节点纯度
      • 不确定性函数H(P)H(P)H(P)
    • 决策树分裂
    • 信息增益
  • 分类树的节点分裂
    • 深度优先增长于最佳增益增长
  • CART树
    • 均方误差(熵)平均绝对误差(条件熵)
  • 决策树剪枝
  • 知识回顾
    • 第一题
    • 第二题
    • 第三题
    • 第四题
      • 处理连续值(转发)
      • 处理缺失值
    • 第五题
    • 第六题

信息论的基础

正如文档里面所说的一样,树具有一定的天然分支结构,在机器学习中有分类与回归两大问题,而分类问题中,树的分支结构起到一定的关键作用,首先引入的是节点纯度的概念

节点纯度

节点纯度反映的是节点样本标签的不确定性,当一个节点纯度较低的时候,说明分类的不确定性较高,而节点纯度较高的时候,代表着我们能够把握这个节点的具体信息,确定性较高

不确定性函数H(P)H(P)H(P)

H(p1,...,pn)=−C∑i=1npilog⁡piH(p_1,...,p_n)=-C\sum_{i=1}^np_i\log p_i H(p1​,...,pn​)=−Ci=1∑n​pi​logpi​
其中满足信息熵条件是:

  1. HHH关于pip_ipi​是连续函数。
  2. 若p1=...=pnp_1=...=p_np1​=...=pn​,则HHH关于nnn单调递增。
  3. 若将某一个pip_ipi​拆分为pi1p_{i1}pi1​和pi2p_{i2}pi2​,即pi1+pi2=pip_{i1}+p_{i2}=p_ipi1​+pi2​=pi​,则
    H(p1,...,pi−1,pi+1,...,pn,pi1,pi2)=H(p1,...,pn)+piH(pi1pi,pi2pi)H(p_1,...,p_{i-1},p_{i+1},...,p_n,p_{i1},p_{i2})=H(p_1,...,p_n)+p_iH(\frac{p_{i1}}{p_i}, \frac{p_{i2}}{p_i}) H(p1​,...,pi−1​,pi+1​,...,pn​,pi1​,pi2​)=H(p1​,...,pn​)+pi​H(pi​pi1​​,pi​pi2​​)

对于定义在有限状态集合{y1,...,yK}\{y_1,...,y_K\}{y1​,...,yK​}上的离散变量而言,对应信息熵的最大值在离散均匀分布时取到,最小值在单点分布时取到。此时,离散信息熵为
H(Y)=−∑k=1Kp(yk)log⁡2p(yk)H(Y)=-\sum_{k=1}^K p(y_k)\log_2p(y_k) H(Y)=−k=1∑K​p(yk​)log2​p(yk​)

决策树分裂

在决策树的分裂过程中,我们不但需要考察本节点的不确定性或纯度,而且还要考察子节点的平均不确定性或平均纯度来决定是否进行分裂。自然定义出条件熵H(Y∣X)H(Y|X)H(Y∣X)为
EX[EY∣X[−log⁡2p(Y∣X)]]\mathbb{E}_{X}[\mathbb{E}_{Y\vert X}[-\log_2p(Y\vert X)]] EX​[EY∣X​[−log2​p(Y∣X)]]
设随机变量XXX所有可能的取值为{x1,...,xM}\{x_1,...,x_M\}{x1​,...,xM​},上式可展开为
−∑m=1Mp(xm)∑k=1Kp(yk∣X=xm)log⁡2p(yk∣X=xm)-\sum_{m=1}^Mp(x_m)\sum_{k=1}^K p(y_k\vert X=x_m)\log_2p(y_k\vert X=x_m) −m=1∑M​p(xm​)k=1∑K​p(yk​∣X=xm​)log2​p(yk​∣X=xm​)

信息增益

有了信息熵与条件熵的基础,我们便可以定义出信息增益这一个概念,即通俗理解为节点分裂后带来了多少的不确定性的降低或纯度的提高,即公式如下所示,
G(Y,X)=H(Y)−H(Y∣X)G(Y,X)=H(Y)-H(Y\vert X) G(Y,X)=H(Y)−H(Y∣X)

分类树的节点分裂

对于每个节点进行分裂决策时,我们会抽出max_features个特征进行遍历以比较信息增益的大小。特征的类别可以分为三种情况讨论:类别特征、数值特征和含缺失值的特征。

  • 类别特征
  • 数值特征
  • 含缺失值特征

深度优先增长于最佳增益增长

深度优先生长采用深度优先搜索的方法:若当前节点存在未搜索过的子节点,则当前节点跳转到子节点进行分裂决策;若当前节点为叶节点,则调转到上一层节点,直到根节点不存在未搜索过的子节点为止。对上图而言,当前节点为2号,它的两个子节点4号和5号都没有被搜索过,因此下一步则选择两个节点中的一个进行跳转。当决策树使用最佳增益生长时,每次总是选择会带来最大相对信息增益的节点进行分裂,直到叶节点的最大数量达到max_left_nodes。

CART树

CART(Classification And Regression Tree)是一棵二叉树,它既能处理分类问题,又能够处理回归问题。,对于回归问题来说,每一个叶节点输出的是样本标签的均值,而在每次回归树分裂过程中,我们希望不同的子节点之间差异变大,而每个子节点内部的差异较小,因此我们将熵与条件熵使用新的概念进行替换

均方误差(熵)平均绝对误差(条件熵)

设节点NNN的样本标签为y1(D),...,yN(D)y^{(D)}_1,...,y^{(D)}_Ny1(D)​,...,yN(D)​,左右子节点的样本个数分别为y1(L),...,yNR(L)y^{(L)}_1,...,y^{(L)}_{N_R}y1(L)​,...,yNR​(L)​和y1(R),...,yNR(R)y^{(R)}_1,...,y^{(R)}_{N_R}y1(R)​,...,yNR​(R)​,记yˉ(D)=1N∑i=1Nyi(D)\bar{y}^{(D)}=\frac{1}{N}\sum_{i=1}^{N}y^{(D)}_iyˉ​(D)=N1​∑i=1N​yi(D)​、yˉ(L)=1NL∑i=1NLyi(L)\bar{y}^{(L)}=\frac{1}{N_L}\sum_{i=1}^{N_L}y^{(L)}_iyˉ​(L)=NL​1​∑i=1NL​​yi(L)​和yˉ(R)=1NR∑i=1NRyi(R)\bar{y}^{(R)}=\frac{1}{N_R}\sum_{i=1}^{N_R}y^{(R)}_iyˉ​(R)=NR​1​∑i=1NR​​yi(R)​分别为节点NNN的样本标签均值、左子节点的样本标签均值和右子节点的样本标签均值,再记y~(D)\tilde{y}^{(D)}y~​(D)、y~(L)\tilde{y}^{(L)}y~​(L)和y~(R)\tilde{y}^{(R)}y~​(R)分别为节点NNN的样本标签中位数、左子节点的样本标签中位数和右子节点的样本标签中位数。
GMSE(Y,X)=1N∑i=1N(yi(D)−yˉ(D))2−NLN1NL∑i=1NL(yi(L)−yˉ(L))2−NRN1NR∑i=1NR(yi(R)−yˉ(R))2G^{MSE}(Y,X)=\frac{1}{N}\sum_{i=1}^{N}(y^{(D)}_i-\bar{y}^{(D)})^2-\frac{N_L}{N}\frac{1}{N_L}\sum_{i=1}^{N_L}(y^{(L)}_i-\bar{y}^{(L)})^2-\frac{N_R}{N}\frac{1}{N_R}\sum_{i=1}^{N_R}(y^{(R)}_i-\bar{y}^{(R)})^2 GMSE(Y,X)=N1​i=1∑N​(yi(D)​−yˉ​(D))2−NNL​​NL​1​i=1∑NL​​(yi(L)​−yˉ​(L))2−NNR​​NR​1​i=1∑NR​​(yi(R)​−yˉ​(R))2
GMAE(Y,X)=1N∑i=1N∣yi(D)−y~(D)∣−NLN1NL∑i=1NL∣yi(L)−y~(L)∣−NRN∑i=1NR1NR∣yi(R)−y~(R)∣G^{MAE}(Y,X)=\frac{1}{N}\sum_{i=1}^{N}\vert y^{(D)}_i-\tilde{y}^{(D)}\vert-\frac{N_L}{N}\frac{1}{N_L}\sum_{i=1}^{N_L}\vert y^{(L)}_i-\tilde{y}^{(L)}\vert-\frac{N_R}{N}\sum_{i=1}^{N_R}\frac{1}{N_R}\vert y^{(R)}_i-\tilde{y}^{(R)}\vert GMAE(Y,X)=N1​i=1∑N​∣yi(D)​−y~​(D)∣−NNL​​NL​1​i=1∑NL​​∣yi(L)​−y~​(L)∣−NNR​​i=1∑NR​​NR​1​∣yi(R)​−y~​(R)∣
而CART树中将熵采用一阶泰勒展开,用熵的线性近似定义基尼系数(Gini)
Gini(Y)=EY[1−p(Y)]=∑k=1Kp~(yk)(1−p~(yk))=1−∑k=1Kp~2(yk)\begin{aligned} {\rm Gini}(Y)&=\mathbb{E}_Y[1-p(Y)]\\ &=\sum_{k=1}^K \tilde{p}(y_k)(1-\tilde{p}(y_k))\\ &=1-\sum_{k=1}^K\tilde{p}^2(y_k) \end{aligned} Gini(Y)​=EY​[1−p(Y)]=k=1∑K​p~​(yk​)(1−p~​(yk​))=1−k=1∑K​p~​2(yk​)​
条件基尼系数
Gini(Y∣X)=EX[EY∣X1−p(Y∣X)]=∑m=1Mp~(xm)∑k=1K[p~(yk∣xm)(1−p~(yk∣xm))]=∑m=1Mp~(xm)[1−∑k=1Kp~2(yk∣xm)]\begin{aligned} {\rm Gini}(Y\vert X)&=\mathbb{E}_X[\mathbb{E}_{Y\vert X}1-p(Y\vert X)]\\ &=\sum_{m=1}^M \tilde{p}(x_m)\sum_{k=1}^K[\tilde{p}(y_k\vert x_m)(1-\tilde{p}(y_k\vert x_m))]\\ &=\sum_{m=1}^M \tilde{p}(x_m)[1-\sum_{k=1}^K\tilde{p}^2(y_k\vert x_m)] \end{aligned} Gini(Y∣X)​=EX​[EY∣X​1−p(Y∣X)]=m=1∑M​p~​(xm​)k=1∑K​[p~​(yk​∣xm​)(1−p~​(yk​∣xm​))]=m=1∑M​p~​(xm​)[1−k=1∑K​p~​2(yk​∣xm​)]​
自然而然的定义一个关于基尼系数的信息增益为
G(Y,X)=Gini(Y)−Gini(Y∣X)G(Y,X)={\rm Gini}(Y)-{\rm Gini}(Y\vert X) G(Y,X)=Gini(Y)−Gini(Y∣X)

决策树剪枝

在sklearn的CART实现中,一共有6个控制预剪枝策略的参数,它们分别是最大树深度max_depth、节点分裂的最小样本数min_samples_split、叶节点最小样本数min_samples_leaf、节点样本权重和与所有样本权重和之比的最小比例min_weight_fraction_leaf、最大叶节点总数max_leaf_nodes以及之前提到的分裂阈值min_impurity_decrease。

知识回顾

第一题

ID3算法,最佳特征根据“最大信息熵增益”来选取,本质上是一种贪心算法,每次进行分叉选取的特征,C4.5算法,在ID3算法下容易过拟合,所以引入C4.5算法,能够作为分裂信息的惩罚项惩罚特征,CART算法在进行分类任务时,采用基尼系数选择最好的特征,当是回归任务,最小方差的分类依据

第二题

信息增益衡量的是节点分裂后,带来了多少的不确定性的降低或纯度的提高,衡量了不确定的增长幅度

第三题

随机的参数,能够限制了训练集和验证集的数据

第四题

处理连续值(转发)

C4.5既可以处理离散型属性,也可以处理连续性属性。在选择某节点上的分枝属性时,对于离散型描述属性,C4.5的处理方法与ID3相同。对于连续分布的特征,其处理方法是:

先把连续属性转换为离散属性再进行处理。虽然本质上属性的取值是连续的,但对于有限的采样数据它是离散的,如果有N条样本,那么我们有N-1种离散化的方法:<=vj的分到左子树,>vj的分到右子树。计算这N-1种情况下最大的信息增益率。另外,对于连续属性先进行排序(升序),只有在决策属性(即分类发生了变化)发生改变的地方才需要切开,这可以显著减少运算量。经证明,在决定连续特征的分界点时采用增益这个指标(因为若采用增益率,splittedinfo影响分裂点信息度量准确性,若某分界点恰好将连续特征分成数目相等的两部分时其抑制作用最大),而选择属性的时候才使用增益率这个指标能选择出最佳分类特征。
在C4.5中,对连续属性的处理如下:

  1.  对特征的取值进行升序排序
    
  2.  两个特征取值之间的中点作为可能的分裂点,将数据集分成两部分,计算每个可能的分裂点的信息增益(InforGain)。优化算法就是只计算分类属性发生改变的那些特征取值。
    
  3.  选择修正后信息增益(InforGain)最大的分裂点作为该特征的最佳分裂点
    
  4.  计算最佳分裂点的信息增益率(Gain Ratio)作为特征的Gain Ratio。注意,此处需对最佳分裂点的信息增益进行修正:减去log2(N-1)/|D|(N是连续特征的取值个数,D是训练数据数目,此修正的原因在于:当离散属性和连续属性并存时,C4.5算法倾向于选择连续特征做最佳树分裂点)
    

处理缺失值

个人觉得可以对缺失值采用随机森林进行填充,或者对缺失的列进行一定的丢弃

第五题

基尼系数用来计算不纯度的大小,在CART中引入是因为计算对数函数log代价较大,因此对log在p=1p=1p=1处利用泰勒一阶展开式,方便后续计算

第六题

预剪枝:在分裂之前就进行计算,可以有效降低过拟合风险,后剪枝,在分裂后进行计算,减掉过拟合的分裂,但是效果不如预剪枝

【1】处理连续值的文章
【2】处理缺失值文章

DataWhale-202110 树模型与集成学习(第一次)相关推荐

  1. 【组队学习】【30期】6. 树模型与集成学习

    树模型与集成学习 航路开辟者:耿远昊 领航员:姜萌 航海士:耿远昊 基本信息 开源内容:https://github.com/datawhalechina/machine-learning-toy-c ...

  2. datawhale 10月学习——树模型与集成学习:两种并行集成的树模型

    前情回顾 决策树 CART树的实现 集成模式 结论速递 本次学习了两种并行集成的树模型,随机森林和孤立森林,并进行了相应的代码实践.其中对孤立森林的学习比较简略,有待后续补充. 这里写自定义目录标题 ...

  3. 【树模型与集成学习】(task4)两种并行集成的树模型

    学习总结 (1)随机森林中的随机主要来自三个方面: 其一为bootstrap抽样导致的训练集随机性, 其二为每个节点随机选取特征子集进行不纯度计算的随机性, 其三为当使用随机分割点选取时产生的随机性( ...

  4. 【树模型与集成学习】(task8)阶段性总结(更新ing)

    学习总结 作业需要继续补! task1学习决策树基础,根据评价标准为信息增益.信息增益比.基尼指数分别分为ID3树,C4.5树和CART树 task2学习cart的分类和回归代码 task3基于偏差和 ...

  5. 【树模型与集成学习】(task2)代码实现CART树(更新ing)

    学习心得 task2学习GYH大佬的回归CART树,并在此基础上改为分类CART树. 更新ing.. 这里做一些对决策树分裂依据更深入的思考引导:我们在task1证明离散变量信息增益非负时曾提到,信息 ...

  6. 【树模型与集成学习】(task1)决策树(上)

    学习心得 (1)决策树常用于分类,目标就是将具有 PPP 维特征的 nnn 个样本分到 CCC 个类别中,相当于做一个映射 C=f(n)C = f(n)C=f(n) ,将样本经过一种变换赋予一个 la ...

  7. 模型优化之模型融合|集成学习

    目录 模型融合 Bagging 随机森林RF Boosting Adaboost GBDT Xgboost Stacking Blending 结合策略 平均法 投票法 学习法 在机器学习训练完模型之 ...

  8. 机器学习中的树模型下——集成类树

    集成学习 集成学习顾名思义是通过构建并结合集成多个学习器来完成学习任务,有时也被称为多分类系统.集成学习要获得好的结果应做到"好而不同",即个体学习器要有一定的准确性,并且学习器之 ...

  9. 结合不同的模型进行集成学习

    Python Machine Learning 2nd Edition by Sebastian Raschka, Packt Publishing Ltd. 2017 Code Repository ...

最新文章

  1. laravel EncryptCookies中间件导致无法获取自定义cookie
  2. STC用PCA测量脉宽_用好手中的频谱仪-无线电信号监测技巧
  3. 洛谷P2068 统计和题解
  4. 2018-2019-1 《信息安全系统设计基础》教学进程
  5. IndirectmodificationofoverloadedelementofXXXhasnoeffect的解决办法
  6. 运维测试工作笔记0003---使用Jmeter测试_http接口_高并发测试
  7. linux 内核 3.3.8,Linux内核编译 Ubuntu 14.04.3 server 升级至3.19.8
  8. redis bitmap存储入门
  9. OpenJDK8编码代码三合一:x86/Arm/Mips
  10. String,StringBuff,Stringbuilder三者的理解以及练习题
  11. 工欲善其事必先利其器之学编程的电脑需要什么配置
  12. 不小心把桌面上的计算机图标删了怎么办,如何删除桌面图标,不小心把桌面上的我的电脑图标删除了怎么办...
  13. 怎么在csdn中找到自己发布的帖子
  14. VMware彻底删除、扫描添加导入,已安装好的虚拟计算机
  15. 关于4年工作经验的测试工程师的感想
  16. iOS定位添加大头针
  17. 深度学习——李宏毅第一课2020
  18. 如何把身份证扫描成电子版?证件转电子版,这3个方法超好用
  19. SQL:Store Produce同列数据相加
  20. Mysql索引类型 normal, unique, full text的区别

热门文章

  1. IT职业道路技能图谱(图谱+干货)
  2. 实战演练 | 使用 Navicat Premium 自动运行数据库复制
  3. 南大通用GBase8s 常用SQL语句(四十)
  4. 机器学习中的矩阵求导的一点总结(三种方法求线性回归最佳参数)
  5. unity遇到问题总结
  6. 【181023】VC++动画启动软件及文字特效
  7. Windows10超实用快捷键
  8. 【区间dp】洛谷 P3205 [HNOI2010]合唱队
  9. 【TWVRP】基于matlab模拟退火算法求解带时间窗的多车型路径规划问题【含Matlab源码 913期】
  10. 艾为2022数字芯片设计笔试题