决策树公式推导

1. 决策树模型概述

分类决策树模型是一种描述对实例进行分类的树形结构。决策树由结点和有向边组成。结点有两种类型:内部结点和叶结点。内部结点表示一个特征或属性,叶结点表示一个类。

决策树学习通常包括3 个步骤:特征选择、决策树的生成和决策树的修剪。决策树学习常用的算法有ID3 、C4.5 与CART。

2. 特征选择

决策树在一个分支时会从众多属性中选择一个属性进行划分,一般是选择最优的属性进行划分,对最优的评判需要依靠一些指标来进行。我们希望决策树的分支结点所包含的样本尽可能属于同一类别,即结点“纯度”越来越高。

2.1 信息熵

在这之前,我们先定义信息熵的概念,假设样本集合 D D D 中第 k k k 类样本所占的比例为 p k ( k = 1 , 2 , . . . , N ) p_k(k=1,2,...,N) pk(k=1,2,...,N) ,则 D D D 的信息熵定义为
E n t ( D ) = − ∑ k = 1 N p k l o g 2 p k Ent(D)=-\sum_{k=1}^{N}p_klog_2p_k Ent(D)=k=1Npklog2pk E n t ( D ) Ent(D) Ent(D) 的值越小,则 D D D 的不确定性越高。

2.2 信息增益

假设离散属性 a a a V V V 个可能的取值,若采用 a a a 进行划分时,会产生 V V V 个分支,每个分支包含了取值的所有样本,记其中一个分支为 D v D^v Dv,可算出其信息熵,再考虑到每一个分支结点中的样本数不同,对其进行权重赋予 ∣ D v ∣ / ∣ D ∣ \lvert D^v \rvert /\lvert D \rvert Dv/D,样本越多影响越大,所以属性 a a a 对样本集 D D D 划分的“信息增益”定义为
G a i n ( D , a ) = E n t ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) Gain(D,a)=Ent(D)-\sum_{v=1}^{V}\frac {\lvert D^v \rvert} {\lvert D \rvert}Ent(D^v) Gain(D,a)=Ent(D)v=1VDDvEnt(Dv)信息增益越大,则使用属性 a a a 来进行划分所得的“纯度提升”越大,其中 D D D 是要进行本次划分计算的集合。

2.3 增益率

信息增益对可取值数目较多的属性有一定的偏好,为了减少这种影响,可使用增益率来作为指标,增益率如下所示
G a i n _ r a t i o ( D , a ) = G a i n ( D , a ) I V ( a ) Gain\_ratio(D,a)=\frac{Gain(D,a)}{IV(a)} Gain_ratio(D,a)=IV(a)Gain(D,a)其中
I V ( a ) = − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ l o g 2 ∣ D v ∣ ∣ D ∣ IV(a)=-\sum_{v=1}^V\frac {\lvert D^v \rvert} {\lvert D \rvert}log_2\frac {\lvert D^v \rvert} {\lvert D \rvert} IV(a)=v=1VDDvlog2DDv称为属性 a a a 的固有值。

增益率对属性可能取值少的属性比较有偏好,所以一般是先从候选属性中找出信息增益高于平均水平的属性,再从中选择增益率高的。

3. 决策树生成

3.1 ID3算法

ID3 算法的核心是在决策树各个结点上应用信息增益准则选择特征,递归地构建决策树。具体方法是:从根结点开始,对结点计算所有可能的特征的信息增益, 选择信息增益最大的特征作为结点的特征,由该特征的不同取值建立子结点;再对子结点递归地调用以上方法,构建决策树;直到所有特征的信息增益均很小或没有特征可以选择为止。最后得到一棵决策树。

ID3 算法只有树的生成,所以该算法生成的树容易产生过拟合。

具体例子在这里截取李航老师的《统计学习方法》来做理解:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3.2 C4.5生成算法

C4.5 算法与ID3 算法相似, C4.5 算法对ID3 算法进行了改进。C4.5 在生成的过程中,用信息增益比来选择特征,除此之外没有不同

4. 决策树剪枝

决策树生成算法递归地产生决策树,直到不能继续下去为止。这样产生的树往往对训练数据的分类很准确,但对未知的测试数据的分类却没有那么准确,即出现过拟合现象。解决这个问题的办法是考虑决策树的复杂度,对已生成的决策树进行简化。

剪枝时可以按照类似正则化的方法对决策树进行剪枝。

设决策树 T T T 的叶节点个数是 ∣ T ∣ \vert T \vert T ,该叶节点有 N t N_t Nt 个样本点,其中 k k k 的样本点有 N t k N_{tk} Ntk 个, k = 1 , 2 , ⋯   , K k=1,2,\cdots,K k=1,2,,K H t ( T ) H_t(T) Ht(T) 为叶节点 t t t 上的熵, α ≥ 0 \alpha \geq 0 α0 为参数,则决策树的损失函数定义如下:
C α ( T ) = ∑ t = 1 ∣ T ∣ N t H t ( T ) + α ∣ T ∣ C_{\alpha}(T)=\sum_{t=1}^{\vert T \vert}N_tH_t(T)+ \alpha \vert T \vert Cα(T)=t=1TNtHt(T)+αT其中熵为
H t ( T ) = − ∑ k N t k N t log ⁡ N t k N t H_t(T)=-\sum_k \frac{N_{tk}}{N_t} \log \frac{N_{tk}}{N_t} Ht(T)=kNtNtklogNtNtk在损失函数中,将 C α ( T ) C_{\alpha}(T) Cα(T) 等式的右端第一项可以记作
C ( T ) = ∑ t = 1 ∣ T ∣ N t H t ( T ) = − ∑ t = 1 ∣ T ∣ ∑ k = 1 K N t k log ⁡ N t k N t C(T)=\sum_{t=1}^{\vert T \vert}N_tH_t(T)=-\sum_{t=1}^{\vert T \vert} \sum_{k=1}^{ K } N_{tk} \log \frac{N_{tk}}{N_t} C(T)=t=1TNtHt(T)=t=1Tk=1KNtklogNtNtk此时即有
C α ( T ) = C ( T ) + α ∣ T ∣ C_{\alpha}(T)=C(T)+ \alpha \vert T \vert Cα(T)=C(T)+αT C ( T ) C(T) C(T)表示模型对训练数据的预测误差,即模型与训练数据的拟合程度, ∣ T ∣ \vert T \vert T表示模型复杂度,参数 α \alpha α 控制两者之间的影响。较大的 α \alpha α 促使选择较简单的模型,较小的 α \alpha α 促使选择较复杂的模型。 α = 0 \alpha=0 α=0 意味着只考虑模型与训练数据的拟合程度,不考虑模型的复杂度。

剪枝, 就是当 α \alpha α 确定时,选择损失函数最小的模型,即损失函数最小的子树。当 α \alpha α 值确定时,子树越大,往往与训练数据的拟合越好,但是模型的复杂度就越高;相反,子树越小,模型的复杂度就越低,但是往往与训练数据的拟合不好。损失函数正好表示了对两者的平衡。

5. CART算法

5.1 CART概述

分类与回归树(CART) 模型是应用广泛的决策树学习方法。CART 同样由特征选择、树的生成及剪枝组成,既可以用千分类也可以用千回归。以下将用于分类与回归的树统称为决策树。

决策树的生成就是递归地构建二叉决策树的过程。对回归树用平方误差最小化准则,对分类树用基尼指数(Gini index) 最小化准则,进行特征选择,生成二叉树。

5.1 CART回归树生成

假设 X = { x 1 , x 2 , ⋯   , x n } X=\{x_1,x_2,\cdots,x_n\} X={x1,x2,,xn} Y = { y 1 , y 2 , ⋯   , y n } Y=\{y_1,y_2,\cdots,y_n\} Y={y1,y2,,yn}分别为输入和输出变量,并且 Y Y Y 是连续变量, X X X n n n 维的,设 x i x_i xi k k k 个特征,为 d 1 , d 2 , ⋯   , d k d_1,d_2, \cdots, d_k d1,d2,,dk ,将输入的序列 ( x i , y i ) (x_i,y_i) (xi,yi) 按照 y i {y_i} yi 的顺序进行排列。

(1) 遍历每个特征 d h d_h dh ,以及每个取值 s s s ,计算每个切分点 ( d h , y i ) (d_h, y_i) (dh,yi) 的损失函数,选择损失函数最小的切分点,损失函数如下
m i n d h , s [ m i n c 1 ∑ x i ∈ R 1 ( d h , s ) ( y i − c 1 ) 2 + m i n c 2 ∑ x i ∈ R 2 ( d h , s ) ( y i − c 2 ) 2 ] \mathop{min}\limits_{d_h,s} \left[\mathop{min}\limits_{c_1} \sum_{x_i \in R_1(d_h,s)}(y_i-c_1)^2+ \mathop{min}\limits_{c_2} \sum_{x_i \in R_2(d_h,s)}(y_i-c_2)^2 \right] dh,smin c1minxiR1(dh,s)(yic1)2+c2minxiR2(dh,s)(yic2)2 其中 R 1 , R 2 R_1,R_2 R1,R2 为切分点划分的两个区域, c 1 , c 2 c_1,c_2 c1,c2 定义如下:
c 1 = 1 N 1 ∑ x i ∈ R 1 y i , c 2 = 1 N 2 ∑ x i ∈ R 2 y i c_1= \frac{1}{N_1} \sum_{x_i \in R_1}y_i,c_2= \frac{1}{N_2} \sum_{x_i \in R_2}y_i c1=N11xiR1yi,c2=N21xiR2yi其中 N 1 , N 2 N_1,N_2 N1,N2 分别为 R 1 , R 2 R_1,R_2 R1,R2 中序列的个数。
(2) 每个区域的预测值是所有样本 y y y 值的均值;
(3) 对每个区域重复(1)(2)步骤直至不能划分;
(4) 最后将空间划分为 R 1 , R 2 , ⋯   , R m R_1,R_2, \cdots,R_m R1,R2,,Rm c i c_i ci 为区域 i i i 的输出值的平均值,生成决策树 f ( x ) = ∑ i = 1 m c i I ( x ∈ R i ) f(x)= \sum_{i=1}^{m}c_iI(x \in R_i) f(x)=i=1mciI(xRi)

5.2 CART分类树生成

分类树用基尼指数选择最优特征,同时决定该特征的最优二值切分点。

数据集 D D D 的纯度可以用基尼值来进行度量,设 p k p_k pk 为第 k k k 个类别的比例,即
G i n i ( D ) = 1 − ∑ k = 1 N p k 2 Gini(D)=1-\sum_{k=1}^Np_{k}^2 Gini(D)=1k=1Npk2基尼值越小,数据集的纯度越高。

假设离散属性 a a a V V V 个可能的取值,若采用 a a a 进行划分时,会产生 V V V 个分支,每个分支包含了取值的所有样本,记其中一个分支为 D v D^v Dv,对属性 a a a 进行基尼指数的定义可表示为
G i n i _ i n d e x ( D , a ) = ∑ v = 1 V ∣ D v ∣ ∣ D ∣ G i n i ( D v ) Gini\_index(D,a)=\sum_{v=1}^V\frac {\lvert D^v \rvert} {\lvert D \rvert}Gini(D^v) Gini_index(D,a)=v=1VDDvGini(Dv)一般情况,选择使得划分后基尼指数最小的属性作为最优的划分属性。

算法如下:
输入:训练数据集 D D D, 停止计算的条件;
输出 C A R T CART CART 决策树。
(1) 设结点的训练数据集为 D D D, 计算现有特征对该数据集的基尼指数。此时,对每一个特征 A A A, 对其可能取的每个值 a a a, 根据样本点对 A = a A=a A=a 的测试为“是”或“否",将 D D D 分割成 D 1 D_1 D1 D 2 D_2 D2 两部分,计算 A = a A=a A=a 时的基尼指数。
(2) 在所有可能的特征 A A A 以及它们所有可能的切分点 a a a 中,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点。依最优特征与最优切分点,从现结点生成两个子结点,将训练数据集依特征分配到两个子结点中去。
(3) 对两个子结点递归地调用(1), (2) ,直至满足停止条件。
(4) 生成 C A R T CART CART 决策树。.
算法停止计算的条件是结点中的样本个数小千预定阙值,或样本集的基尼指数小于预定阙值(样本基本属于同一类),或者没有更多特征。

例题如下:

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

5.3 CART剪枝

C A R T CART CART 剪枝算法由两步组成:首先从生成算法产生的决策树 T 0 T_0 T0 底端开始不断剪枝,直到 T 0 T_0 T0 的根结点,形成一个子树序列 { T 0 , T 1 , ⋯   , T n } \{T_0,T_1,\cdots,T_n \} {T0,T1,,Tn} ;然后通过交叉验证法在独立的验证数据集上对子树序列进行测试,从中选择最优子树。

从整体树 T 0 T_0 T0 开始剪枝。对 T 0 T_0 T0 的任意内部结点 t t t, 以 t t t 为单结点树的损失函数是
C α ( t ) = C ( t ) + α C_{\alpha}(t)=C(t)+ \alpha Cα(t)=C(t)+α t t t 为根结点的子树 T t T_t Tt 的损失函数是
C α ( T t ) = C ( T t ) + α ∣ T t ∣ C_{\alpha}(T_t)=C(T_t)+ \alpha \vert T_t \vert Cα(Tt)=C(Tt)+αTt α = 0 \alpha= 0 α=0 α \alpha α 充分小时,有不等式
C α ( t ) > C α ( T t ) C_{\alpha}(t)>C_{\alpha}(T_t) Cα(t)>Cα(Tt)随着 α \alpha α 的增大,在某一刻有
C α ( t ) = C α ( T t ) C_{\alpha}(t)=C_{\alpha}(T_t) Cα(t)=Cα(Tt)此时有
α = C ( t ) − C ( T t ) ∣ T t ∣ − 1 \alpha = \frac{C(t)-C(T_t)}{ \vert T_t \vert - 1} α=Tt1C(t)C(Tt)为此,对 T 0 T_0 T0 的每一个内部节点 t t t ,计算
g ( t ) = C ( t ) − C ( T t ) ∣ T t ∣ − 1 g(t) = \frac{C(t)-C(T_t)}{ \vert T_t \vert - 1} g(t)=Tt1C(t)C(Tt)它表示剪枝后整体损失函数减少的程度。在 T 0 T_0 T0 中剪去 g ( t ) g(t) g(t) 最小的 T t T_t Tt, 将得到的子树作为 T 1 T_1 T1 ,同时将最小的 g ( t ) g(t) g(t) 设为 α 1 \alpha_1 α1 T 1 T_1 T1 为区间 [ α 1 , α 2 ) [\alpha_1,\alpha_2) [α1,α2) 的最优子树。如此剪枝下去,直至得到根结点。在这一过程中,不断地增加 α \alpha α 的值,产生新的区间。

利用独立的验证数据集,测试子树序列 T 0 , T 1 , ⋯   , T n T_0,T_1,\cdots,T_n T0,T1,,Tn 中各棵子树的平方误差或基尼指数。平方误差或基尼指数最小的决策树被认为是最优的决策树,每一棵子树都对应着一个参数 α 0 , α 1 , ⋯   , α n \alpha_0,\alpha_1,\cdots,\alpha_n α0,α1,,αn ,当最优子树 T k T_k Tk 确定时,对应的 α k \alpha_k αk 也确定了,即得到最优决策树 T α T_{\alpha} Tα

C A R T CART CART 剪枝算法如下:

输入: CART 算法生成的决策树 T 0 T_0 T0;
输出:最优决策树 T α T_{\alpha} Tα
(1) 设 k = 0 , T = T 0 k=0,T=T_0 k=0,T=T0
(2) 设 α = + ∞ \alpha=+\infty α=+
(3) 自下而上地对各内部结点 t t t 计算 C ( T t ) , ∣ T t ∣ C(T_t), \vert T_t \vert C(Tt),Tt以及
g ( t ) = C ( t ) − C ( T t ) ∣ T t ∣ − 1 α = m i n ( α , g ( t ) ) \begin{align} g(t) &= \frac{C(t)-C(T_t)}{ \vert T_t \vert - 1} \notag \\ \alpha &= min(\alpha,g(t))\notag \end{align} g(t)α=Tt1C(t)C(Tt)=min(α,g(t))这里, T t T_t Tt 表示以 t t t 为根结点的子树, C ( T t ) C(T_t) C(Tt) 是对训练数据的预测误差, ∣ T t ∣ \vert T_t \vert Tt T t T_t Tt 的叶结点个数;
(4) 对 g ( t ) = a g(t) = a g(t)=a 的内部结点 t t t 进行剪枝,并对叶结点 t t t 以多数表决法决定其类,得到树 T T T
(5) 设 k = k + 1 , α k = a , T k = T k = k + 1, \alpha_k = a, T_k = T k=k+1,αk=a,Tk=T
(6) 如果 T k T_k Tk 不是由根结点及两个叶结点构成的树,则回到步骤(2) ;否则令 T k = T n T_k=T_n Tk=Tn
(7) 采用交叉验证法在子树序列 T 0 , T 1 , ⋯   , T n T_0,T_1,\cdots,T_n T0,T1,,Tn 中选取最优子树 T α T_{\alpha} Tα

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
XGBoost(eXtreme Gradient Boosting)是一种基于梯度提升树的机器学习算法,它在各种机器学习竞赛中表现出色。下面是XGBoost的原理和公式推导: 1. 原理: XGBoost是一种集成学习算法,通过组合多个弱学习器(决策树)来构建一个强学习器。它采用了梯度提升的思想,每一轮迭代都通过拟合前一轮模型的残差来训练新的模型,然后将新模型加入到集成中。 2. 损失函数: XGBoost使用了一种特殊的损失函数,称为目标函数。目标函数由两部分组成:损失函数和正则化项。常用的损失函数有平方损失函数、逻辑损失函数等。 3. 梯度提升: 在XGBoost中,每个决策树都是通过梯度提升来构建的。梯度提升的过程可以简单描述为以下几个步骤: - 初始化模型:将初始预测值设置为常数,通常为训练集样本的平均值。 - 计算残差:计算当前模型对训练集样本的预测值与真实值之间的差异,得到残差。 - 拟合决策树:使用残差作为目标变量,拟合一个决策树模型。 - 更新模型:将新的决策树模型加入到集成中,并更新模型的预测值。 - 重复以上步骤,直到达到预定的迭代次数或满足停止条件。 4. 正则化: 为了防止过拟合,XGBoost引入了正则化项。正则化项由两部分组成:树的复杂度和叶子节点权重的L1或L2正则化。通过控制正则化参数,可以平衡模型的复杂度和拟合能力。 5. 公式推导: XGBoost的公式推导涉及到目标函数、损失函数、正则化项等,具体推导过程较为复杂。你可以参考XGBoost的论文《XGBoost: A Scalable Tree Boosting System》中的相关推导部分,详细了解公式推导的细节。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值