文章目录

  • 1 决策树
    • 1.1决策树定义
    • 1.2信息增益
    • 1.3 信息增益的算法
    • 1.4 信息增益比
  • 2 决策树ID3
    • 2.1 ID3树的构建
    • 2.2 决策树的剪枝
      • 2.2.1 损失函数定义与计算
      • 2.2.2 剪枝过程
    • 2.3 CART树
      • 2.3.1 CART回归树
      • 2.3.2 CART分类树
      • 2.3.3 CART树剪枝

1 决策树

1.1决策树定义

决策树的基本组成:决策节点、分支、叶子。

决策树表示给定特征条件下的概率分布。
条件概率分布定义在特征空间的一个划分上。将特征空间划分为互不相交的单元。并在每个单元上定义一个类的概率分布,就构成了一个条件概率分布。
决策树的一条路径对应于划分中的一个单元。

决策树的本质是在特征空间上的切割。

1.2信息增益

:设X是一个取有限个值的离散随机变量,其概率分布为:P(X=xi)=pi,i=1,2,3...nP(X=x_i)=p_i,i=1,2,3...nP(X=xi​)=pi​,i=1,2,3...n
那么X的熵为:H(X)=−∑i=1npilogpiH(X)=-\sum_{i=1}^np_ilogp_iH(X)=−∑i=1n​pi​logpi​
对数以2为底或者以e为底,这时熵的单位称为比特或者纳特。熵只依赖于X的分布,而与X的具体取值无关。
熵的理论解释:熵越大,随机变量的不确定性越大。0<=H(X)<=logn0<=H(X)<=logn0<=H(X)<=logn.
例如,一个骰子6个面全是1,那么H(X)=−1∗log1=0H(X)=-1*log1=0H(X)=−1∗log1=0。因为结果是确定的。
如果6个面分别为1,2,3,4,5,6,并且每个面的概率相同,都是16\dfrac{1}{6}61​。那么H(X)=−(16log(16)+16log(16)+16log(16)+16log(16)+16log(16)+16log(16))=−(0.17∗(−2.58)∗6)=2.58H(X)=-(\dfrac{1}{6}log(\dfrac{1}{6})+\dfrac{1}{6}log(\dfrac{1}{6})+\dfrac{1}{6}log(\dfrac{1}{6})+\dfrac{1}{6}log(\dfrac{1}{6})+\dfrac{1}{6}log(\dfrac{1}{6})+\dfrac{1}{6}log(\dfrac{1}{6}))=-(0.17*(-2.58)*6)=2.58H(X)=−(61​log(61​)+61​log(61​)+61​log(61​)+61​log(61​)+61​log(61​)+61​log(61​))=−(0.17∗(−2.58)∗6)=2.58,这个时候的不确定性就比刚才要高。

设有随机变量(X,Y),其联合概率分布为P(X=xi,Y=yi)=pi,j,i=1,2,3...n;j=1,2,3...mP(X=x_i,Y=y_i)=p_{i,j},i=1,2,3...n; j=1,2,3...mP(X=xi​,Y=yi​)=pi,j​,i=1,2,3...n;j=1,2,3...m
条件熵H(Y|X):表示在已知随机变量X的条件下,Y的不确定性。定义为X给定条件下Y的条件概率分布的熵对X的数学期望:H(Y∣X)=∑i=1npiH(Y∣X=xi)H(Y|X)=\sum_{i=1}^np_iH(Y|X=x_i)H(Y∣X)=∑i=1n​pi​H(Y∣X=xi​)

当熵和条件熵,由数据估计得到时,分别称为经验熵与经验条件熵。

信息增益:特征A对训练数据集D的信息增益g(D,A)定义为:集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D|A)之差:g(D,A)=H(D)−H(D∣A)g(D,A)=H(D)-H(D|A)g(D,A)=H(D)−H(D∣A)
这表示了特征X的引入,使得分类Y的不确定性减少的程度。
互信息=信息熵H(Y)-条件熵H(Y|X)

1.3 信息增益的算法

设训练数据集为D
|D|表示其样本容量,即样本个数
设有K个类CkC_kCk​,k=1,2,3…K
∣Ck∣|C_k|∣Ck​∣表示属于类CkC_kCk​的样本数
特征A有n个不同的取值{a1,a2,...ana_1,a_2,...a_na1​,a2​,...an​}。根据特征A的取值,将D划分为n个子集D1,D2...DnD_1,D_2...D_nD1​,D2​...Dn​。
∣Di∣|D_i|∣Di​∣为子集DiD_iDi​的样本个数
子集DiD_iDi​中属于类CkC_kCk​的样本集合为DikD_{ik}Dik​
∣Dik∣|D_{ik}|∣Dik​∣为集合DikD_{ik}Dik​的样本数

输入:数据集D,以及特征A
输出:特征A对数据集的信息增益g(D,A)
1 计算数据集D的经验熵H(D):H(D)=−∑k=1K∣Ck∣∣D∣log2∣Ck∣∣D∣H(D)=-\sum_{k=1}^K\dfrac{|C_k|}{|D|}log_2\dfrac{|C_k|}{|D|}H(D)=−∑k=1K​∣D∣∣Ck​∣​log2​∣D∣∣Ck​∣​
2 计算特征A对数据集D的经验条件熵H(D|A):H(D∣A)=∑i=1n∣Di∣∣D∣H(Di)=∑i=1n∣Di∣∣D∣∑k=1K∣Dik∣∣Di∣log2∣Dik∣∣Di∣H(D|A)=\sum_{i=1}^n\dfrac{|D_i|}{|D|}H(D_i)=\sum_{i=1}^n\dfrac{|D_i|}{|D|}\sum_{k=1}^K\dfrac{|D_{ik}|}{|D_i|}log_2\dfrac{|D_{ik}|}{|D_i|}H(D∣A)=∑i=1n​∣D∣∣Di​∣​H(Di​)=∑i=1n​∣D∣∣Di​∣​∑k=1K​∣Di​∣∣Dik​∣​log2​∣Di​∣∣Dik​∣​
3 计算信息增益g(D,A):g(D,A)=H(D)−H(D∣A)g(D,A)=H(D)-H(D|A)g(D,A)=H(D)−H(D∣A)

1.4 信息增益比

以信息增益来选择特征,会倾向于选择特征取值多的特征。可以使用信息增益比来解决这个问题。

特征A对数据集D的信息增益比定义为信息增益与训练数据集D关于特征A的值的熵的比:gR(D,A)=g(D,A)HA(D)g_R(D,A)=\dfrac{g(D,A)}{H_A(D)}gR​(D,A)=HA​(D)g(D,A)​
HA(D)=−∑i=1n∣Di∣∣D∣log2∣Di∣∣D∣H_A(D)=-\sum_{i=1}^n\dfrac{|D_i|}{|D|}log_2\dfrac{|D_i|}{|D|}HA​(D)=−∑i=1n​∣D∣∣Di​∣​log2​∣D∣∣Di​∣​,n为特征A的取值个数

2 决策树ID3

2.1 ID3树的构建

按照信息增益选择特征,形成的决策树称为ID3树。

输入:训练数据集D、特征集合A、阈值ϵ\epsilonϵ
输出:决策树T
1 若D中所有实例属于同一类CkC_kCk​,则T为单节点树,并将类CkC_kCk​作为该节点的类标签,返回T;
2 若A=∅A=\emptyA=∅,则T为单节点树,并选择D中实例数最大的类CkC_kCk​作为该节点的类标签,返回T;
3 按照信息增益的算法,计算特征集合A中每个特征对D的信息增益,选择信息增益最大的特征AgA_gAg​;
4 如果AgA_gAg​的信息增益小于阈值ϵ\epsilonϵ,则T为单节点树,并选择D中实例数最大的类CkC_kCk​作为该节点的类标签,返回T;
5 否则,对AgA_gAg​的每一个可能的值aia_iai​,依Ag=aiA_g=a_iAg​=ai​将D分割为若干非空子集DiD_iDi​,将DiD_iDi​中实例数最大的类作为节点标记,构建子节点。由节点及其子节点构成树T,返回T;
6 对第i个子节点,以数据集DiD_iDi​作为训练集,以A-{AgA_gAg​}为特征集,递归地调用步骤1-5,得到子树TiT_iTi​,返回TiT_iTi​。

2.2 决策树的剪枝

2.2.1 损失函数定义与计算

通过极小化 决策树整体的损失函数 来实现。
设树|T|的叶子节点个数为|T|,t是树T的叶子节点,该叶子节点有NtN_tNt​个样本。其中k类的样本量为NtkN_{tk}Ntk​,k=1,2,3…K。
说明:一棵树T的叶子节点不一定只包含一类数据。例如在上述步骤2和5,就可能一个节点中实际存在多个类别的数据。只是因为再细分特征的信息增益太小了,不再划分。

Ht(T)H_t(T)Ht​(T)为叶子节点t上的经验熵,α>=0\alpha>=0α>=0为参数,
损失函数:Cα(T)=∑i=1∣T∣NtHt(T)+α∣T∣C_{\alpha}(T)=\sum_{i=1}^{|T|}N_tH_t(T)+\alpha|T|Cα​(T)=∑i=1∣T∣​Nt​Ht​(T)+α∣T∣
说明:树的损失函数对所有叶子节点的遍历。每一个叶子节点计算:当前叶子节点个数NtN_tNt​,以及叶子节点的熵Ht(T)H_t(T)Ht​(T)。它们的乘积表示当前叶子节点不确定的度量,也就是损失。对所有叶子节点不确定性的度量,就称为树的损失。
α∣T∣\alpha|T|α∣T∣是为了防止树过拟合。

∑i=1∣T∣NtHt(T)\sum_{i=1}^{|T|}N_tH_t(T)∑i=1∣T∣​Nt​Ht​(T)熵越小,说明叶子节点越来越多,这一部分会使得模型越来越复杂。α∣T∣\alpha|T|α∣T∣是为了对抗模型过渡复杂。

经验熵:Ht(T)=−∑kNtkNtlogNtkNtH_t(T)=-\sum_k\dfrac{N_{tk}}{N_t}log\dfrac{N_{tk}}{N_t}Ht​(T)=−∑k​Nt​Ntk​​logNt​Ntk​​

C(T)=∑i=1∣T∣NtHt(T)=−∑i=1∣T∣∑k=1KNtklogNtkNtC(T)= \sum_{i=1}^{|T|}N_tH_t(T)=-\sum_{i=1}^{|T|}\sum_{k=1}^KN_{tk}log\dfrac{N_{tk}}{N_t}C(T)=∑i=1∣T∣​Nt​Ht​(T)=−∑i=1∣T∣​∑k=1K​Ntk​logNt​Ntk​​

那么 Cα(T)=C(T)+α∣T∣C_{\alpha}(T)=C(T)+\alpha|T|Cα​(T)=C(T)+α∣T∣

2.2.2 剪枝过程

输入:决策树T,参数α\alphaα
输出:剪枝后的子树TαT_{\alpha}Tα​
1 计算每个节点的经验熵
2 递归地从树的叶子结点向上缩
设一组叶子节点回缩到其父节点之前与之后的损失函数分别为:Cα(TB)C_{\alpha}(T_B)Cα​(TB​),Cα(TA)C_{\alpha}(T_A)Cα​(TA​)
如果:Cα(TA)C_{\alpha}(T_A)Cα​(TA​)<=Cα(TB)C_{\alpha}(T_B)Cα​(TB​),则进行剪枝。
3 返回2,直至不能继续为止,得到损失最小的子树TaT_aTa​。

以上过程将信息增益,换成信息增益比,那么得到的树就是C4.5。

2.3 CART树

CART是在给定输入随机变量X条件下输出随机变量Y的条件概率分布的学习方法。
CART树是一棵二叉树。左分支的取值为是,右分支的取值为否。
这样的决策树等价于递归地二分每个特征,将输入空间划分为有限个单元,并在这些单元上确定预测的概率分布。
CART算法=决策树生成 + 决策树剪枝

2.3.1 CART回归树

  • 树的定义

设Y是连续变量,给定训练数据集:D={(x1,y1),(x2,y2),...(xn,yn)}D=\{(x_1,y_1),(x_2,y_2),...(x_n,y_n)\}D={(x1​,y1​),(x2​,y2​),...(xn​,yn​)},yi∈Ry_i \in Ryi​∈R 。假设已经将输入空间划分为M个单元R1,R2…Rm,每个单元上RmR_mRm​上有一个固定的输出CmC_mCm​,则回归树表示为:f(x)=∑m=1MCmI(x∈Rm)f(x)=\sum_{m=1}^MC_mI(x\in R_m)f(x)=∑m=1M​Cm​I(x∈Rm​)
备注:遍历所有分割的子空间,数据属于某个子空间,函数值就是该空间的输出值。

  • 求解每个单元上的最优输出值

平方误差来表示预测误差,用平方误差最小准则求解每个单元上的最优输出值:∑xi∈Rm(yi−f(x))2\sum_{x_i \in R_m}(y_i-f(x))^2∑xi​∈Rm​​(yi​−f(x))2

那么RmR_mRm​上的CmC_mCm​的最优值怎么计算呢?cm^=ave(yi∣xi∈Rm)\hat{c_m} = ave(y_i|x_i \in R_m)cm​^​=ave(yi​∣xi​∈Rm​) 使用落在RmR_mRm​空间内所有点的y值求平均得到。

  • 如何对输入空间进行划分

使用启发式选择的方法。
选择第j个变量x(j)x^{(j)}x(j)和它的取值s,作为切分变量和切分点,定义两个区域,一个是比s小的,一个是比s大的:R1={x∣x(j)<=s}R_1=\{x|x^{(j)}<=s\}R1​={x∣x(j)<=s},R2={x∣x(j)>s}R_2=\{x|x^{(j)}>s\}R2​={x∣x(j)>s}

寻找最优切分变量和切分点:
minj,s[mine1∑xi∈R1(yi−c1)2+mine2∑xi∈R2(yi−c2)2]min_{j,s}[min_{e_1}\sum_{x_i \in R_1}(y_i-c_1)^2+min_{e2}\sum_{x_i\in R_2}(y_i-c_2)^2]minj,s​[mine1​​∑xi​∈R1​​(yi​−c1​)2+mine2​∑xi​∈R2​​(yi​−c2​)2]

c1^=ave(yi∣xi∈R1)\hat{c_1}=ave(y_i|x_i\in R_1)c1​^​=ave(yi​∣xi​∈R1​)
c2^=ave(yi∣xi∈R2)\hat{c_2}=ave(y_i|x_i\in R_2)c2​^​=ave(yi​∣xi​∈R2​)
使得两部分误差和最小的变量j和切分点s
需要对所有变量和所有切分点遍历。(这是NP问题吧)

再对两个区域重复上述划分,直到满足停止条件。

总结成算法是这样的:最小二乘回归树生成算法。
输入:训练数据集D
输出:回归树f(x)
在训练数据集所在的输入空间中,递归地将每个区域划分为2个子区域,并决定每个子区域上的输出值,构建二叉决策树。
1 选择最优切分变量j和切分点s,求解

minj,s[mine1∑xi∈R1(yi−c1)2+mine2∑xi∈R2(yi−c2)2]min_{j,s}[min_{e_1}\sum_{x_i \in R_1}(y_i-c_1)^2+min_{e2}\sum_{x_i\in R_2}(y_i-c_2)^2]minj,s​[mine1​​∑xi​∈R1​​(yi​−c1​)2+mine2​∑xi​∈R2​​(yi​−c2​)2]

遍历变量j,对固定的切分变量j扫描切分点s,选择使得上式达到最小值的对(j,s)
2 用选定的对(j,s)划分区域,并决定相应的输出值:
R1={x∣x(j)<=s}R_1=\{x|x^{(j)}<=s\}R1​={x∣x(j)<=s}
R2={x∣x(j)>s}R_2=\{x|x^{(j)}>s\}R2​={x∣x(j)>s}
cm^=1Nm∑xi∈Rm(j,s)yi\hat{c_m}=\dfrac{1}{N_m}\sum_{x_i\in R_m(j,s)}y_icm​^​=Nm​1​∑xi​∈Rm​(j,s)​yi​,x∈Rm,m=1,2x\in R_m,m=1,2x∈Rm​,m=1,2
每个子空间数据的y的平均值作为空间的输出。

3 继续对2个子区域调用步骤1,2,直到满足停止条件
4 将输入空间划分为M个区域R1,R2,...RMR_1,R_2,...R_MR1​,R2​,...RM​,生成决策树:f(x)=∑m=1MCmI(x∈Rm)f(x)=\sum_{m=1}^MC_mI(x\in R_m)f(x)=∑m=1M​Cm​I(x∈Rm​)

2.3.2 CART分类树

选择依据基尼指数
假设有K个分类,每个样本点属于分类k的概率是PkP_kPk​。则概率分布的基尼指数:Gini(p)=∑k=1Kpk(1−pk)=1−∑k=1Kpk2Gini(p)=\sum_{k=1}^K p_k(1-p_k)=1-\sum_{k=1}^Kp_k^2Gini(p)=∑k=1K​pk​(1−pk​)=1−∑k=1K​pk2​
对于二分类Gini(p)=2p(1−p)Gini(p)=2p(1-p)Gini(p)=2p(1−p)

对于给定数据集的基尼指数:Gini(D)=1−∑k=1K(∣Ck∣∣D∣)2Gini(D)=1-\sum_{k=1}^K(\dfrac{|C_k|}{|D|})^2Gini(D)=1−∑k=1K​(∣D∣∣Ck​∣​)2

如果样本集合D根据特征A是否为a,划分为数据集D1,和数据集D2。
D1={(x,y)∈D∣A(x)=a}D_1=\{(x,y)\in D|A(x)=a\}D1​={(x,y)∈D∣A(x)=a}
D2=D−D1D_2=D-D_1D2​=D−D1​

在特征A下,集合D的基尼指数为:Gini(D)=∣D1∣∣D∣Gini(D1)+∣D2∣∣D∣Gini(D2)Gini(D)=\dfrac{|D_1|}{|D|}Gini(D_1)+\dfrac{|D_2|}{|D|}Gini(D_2)Gini(D)=∣D∣∣D1​∣​Gini(D1​)+∣D∣∣D2​∣​Gini(D2​)

CART分类树生成算法
输入:训练数据集D,停止计算条件
输出:CART分类树
从根节点开始,递归对每个结点操作。
1、设结点数据集为D,对每个特征A,对其每个值a,根据样本点对A=a的测试为是或否,将D分为D1,D2,计算A=a的基尼指数
2、在所有的特征A以及所有可能的切分点a中,选择基尼指数最小的特征和切分点,将数据集分配到两个子结点中。
3、对两个子结点递归调用1,2步骤
算法停止的条件是:节点中的样本个数小于阈值,或者样本集的基尼指数小于阈值。

2.3.3 CART树剪枝

计算子树的损失函数:Cα(T)=C(T)+α∣T∣C_{\alpha}(T)=C(T)+\alpha|T|Cα​(T)=C(T)+α∣T∣
当α\alphaα很大的时候,这样得到的会是一棵偏小的决策树。也就是叶子节点少的决策树。
α\alphaα从0到一个较大的值的过程中可以生成很多颗树。选择最优的子树TαT_{\alpha}Tα​

从决策树到xgboost(一)相关推荐

  1. 机器学习-决策树(XGBoost、LightGBM)

    [机器学习]决策树--XGBoost.LightGBM 主要介绍基于 Boosting 框架的主流集成算法,包括 XGBoost 和 LightGBM. 1. XGBoost XGBoost 是大规模 ...

  2. 从决策树到xgboost(二)

    文章目录 3 集成学习 4 Adaboost 4.1 Adaboost算法 4.1.1 初始化训练数据的起始权值分布 4.1.2 对m个弱分类器m=1,2,3...M 4.1.3 构建弱分类器的线性组 ...

  3. 决策树以及XGBoost如何画出 树分裂图?

    之前有专门研究过,在各自的文中,这里进行罗列: 文章目录 1 pydotplus安装 2 XGBoost画出分裂图 3 决策树画出分裂图 4 高度可视化:dtree_viz 4.1 案例 4.2 单样 ...

  4. 决策树与XGBOOST

    1. 决策树定义(决策树的构建算法主要有ID3.C4.5.CART三种,其中ID3和C4.5是分类树,CART是分类回归树) 理解树,就需要理解几个关键词:根节点.父节点.子节点和叶子节点. 决策树利 ...

  5. 机器学习:从决策树到xgboost

    本文参考了知乎很多大佬的文章,自己用自己的语言整理的一下,相信通过这篇文章,你会对树模型有深刻的认识 本文持续更新 前置知识: 泰勒公式 带皮亚诺余项的泰勒公式 若f(x)在x0x_0x0​处有n阶导 ...

  6. 决策树以及XGBoost 树分裂图的多种可视化工具盘点

    之前有专门研究过,在各自的文中,这里进行罗列: 文章目录 1 pydotplus安装 2 XGBoost画出分裂图 3 决策树画出分裂图 4 高度可视化:dtree_viz 4.1 案例 4.2 单样 ...

  7. xgboost和lightgbm算法总结(从决策树到xgboost)

    目录 一.背景知识合集 1.决策树 1.1 ID3.0 1.1.1 思想 1.1.2 划分标准 1.1.3 优缺点 1.2 C4.5 1.2.1 思想 1.2.2 划分标准 1.2.3 优缺点 1.3 ...

  8. 我的XGBoost学习经历及动手实践

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:李祖贤  深圳大学,Datawhale高校群成员 知乎地址:htt ...

  9. 第二十二课.XGBoost

    目录 模型公式 优化算法 目标函数 树的生成 预测值的确定 特征空间的划分 使用 XGBoost 实现波士顿房价预测 使用 XGBoost 完成乳腺癌诊断的二分类问题 模型公式 XGBoost 在集成 ...

最新文章

  1. vs中如何开发mysql_VS2015如何连接mySQL数据库图文
  2. javascript设计模式--单例模式
  3. 皮一皮:21世纪了还有这样的事情?
  4. 从零开始学习docker(一)
  5. 服务降级-降级的概念
  6. 二分法——leetcode35. 搜索插入位置
  7. 用redis实现分布式锁
  8. 必须掌握的Python技巧(三)
  9. python文件内容倒序_python实现对列表中的元素进行倒序打印
  10. Java Spring Security 安全框架:(四)PasswordEncoder 密码解析器详解
  11. 网吧收银系统在服务器上么,网络“高手”侵入网吧收银系统 已被拘留(图)
  12. 纯JAVA写的socket局域网斗地主游戏
  13. OpenCMS 11 (一)安装配置
  14. 【足迹C++primer】51、面向对象编程概述
  15. python填空题大全_『Python题库 - 填空题』151道Python笔试填空题
  16. java 写入excel 追加,Java - 追加excel
  17. c语言 快排,C语言 快排函数
  18. windows安装虚拟机(VMware)
  19. 怎么得到一个数的每个位c语言,怎么用位运算得到一个数是几位的
  20. ListView双击的行

热门文章

  1. !--[if IE 9] ![endif]--
  2. 使用轻量级Spring @Scheduled注解执行定时任务
  3. H.264学习--1
  4. 如何给APK文件签名
  5. [导入]九个笑话能告诉你九个人生的道理
  6. 银行系统日终结算要多久_美股顽强翻红!两连跌终结,联储降息预期已超九成!制造业疲软消费者信心坚挺,三大股指又假摔?...
  7. Vmware centos无法连接网络
  8. TextView does not support text selection. Selection cancelled. 。TextViews复制文本失效解决方法
  9. system 无法以 sysdba 登录,提示:权限不足。
  10. 如何设置Active Directory域控制器