【机器学习基础算法系列】【叁】全面详解决策树(Decision Tree)

符号定义

  • D D D为训练数据集, ∣ D ∣ |D| D为训练数据集样本个数
  • C C C为样本所属类别, C k C_k Ck表示样本所属为第 k k k类, ∣ C k ∣ |C_k| Ck表示所属第 k k k类的样本数, ∑ k = 1 K ∣ C k ∣ = ∣ D ∣ \sum_{k=1}^K|C_k|=|D| k=1KCk=D
  • A A A为特征集, A k A_k Ak表示第 k k k个特征,$a_i\in {a_1,a_2, … , a_n} 是 是 A_k 的 所 有 取 值 , 的所有取值, a_i 可 以 把 数 据 集 分 为 可以把数据集分为 n 个 子 集 , 个子集, D_i \in {D_1,D_2, … , D_n} , , \sum_{k=1}^K|D_k|=|D|$
  • D i k D_{ik} Dik为子集 D i D_i Di属于 C k C_k Ck的样本集合,即 D i k = D i ∩ C k D_{ik}=D_i \cap C_k Dik=DiCk ∣ D i k ∣ |D_{ik}| Dik为子集 D i D_i Di属于 C k C_k Ck的样本个数

增益计算

  • 数据集 D D D的经验熵 H ( D ) H(D) H(D)
    H ( D ) = − ∑ k = 1 K ∣ C k ∣ ∣ D ∣ l o g 2 ∣ C k ∣ ∣ D ∣ H(D)=-\sum_{k=1}^K \frac {|C_k|}{|D|}log_2\frac {|C_k|}{|D|} H(D)=k=1KDCklog2DCk

  • 特征 A A A对数据 D D D的经验条件熵 H ( D ∣ A ) H(D|A) H(DA)

H ( D ∣ A ) = ∑ i = 1 n ∣ D i ∣ ∣ D ∣ H ( D i ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ ∑ k = 1 K ∣ D i k ∣ ∣ D i ∣ l o g 2 ∣ D i k ∣ ∣ D i ∣ H(D|A)=\sum_{i=1}^n \frac {|D_i|}{|D|}H(D_i)=-\sum_{i=1}^n \frac {|D_i|}{|D|}\sum_{k=1}^K\frac {|D_{ik}|}{|D_i|}log_2\frac {|D_{ik}|}{|D_i|} H(DA)=i=1nDDiH(Di)=i=1nDDik=1KDiDiklog2DiDik

​ 其中 n n n为特征A的取值个数。

  • 信息增益 g ( D , A ) = H ( D ) − H ( D ∣ A ) g(D,A)=H(D)-H(D|A) g(D,A)=H(D)H(DA)
  • 信息增益率 g r ( D , A ) = g ( D , A ) H A ( D ) g_r(D,A)=\frac {g(D,A)} {H_A(D)} gr(D,A)=HA(D)g(D,A),其中 H A ( D ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ l o g 2 ∣ D i ∣ ∣ D ∣ H_A(D)=-\sum_{i=1}^n \frac {|D_i|} {|D|} log_2 \frac {|D_i|} {|D|} HA(D)=i=1nDDilog2DDi,其中 n n n为特征A的取值个数。

树的生成

  • ID3:特征选择靠信息增益
  • C4.5:特征选择靠信息增益率
  • CART:回归树靠均方误差,分类树靠Gini系数
  1. 如果该节点上的数据仅有一种类别,则停止生长置T为单节点树,并将该类别作为节点的输出,返回树T
  2. 如果特征集 A = ∅ A=\emptyset A=,则停止生长置T为单节点树,并将属于该节点样本数最多的类别作为节点的输出,返回树T
  3. 否则,在特征集中计算增益,ID3计算信息增益,C4.5计算信息增益率,选择最大增益的特征作为父节点
  4. 如果3中增益小于预设的某一阈值 ϵ \epsilon ϵ,则停止生长置T为单节点树,并选择属于该节点样本数最多的类别作为该节点的输出,返回树T
  5. 否则,对该特征 A g A_g Ag的每一个取值,将样本分割成若干非空子集 D i D_i Di并设置为子节点 i i i,父子节点构成树T,返回T
  6. 对节点 i i i,以 D i D_i Di为训练集,以 A − A g A-A_g AAg为特征集递归的调用1~5

树的剪枝

  • 决策树的剪枝

已生成的整数T,给定的参数α

  1. 计算每个节点的经验熵, H t ( T ) = − ∑ k ( N t k N t ) ∗ l o g ( N t k N t ) H_t(T)=-\sum_{k}(\frac {N_{tk}}{N_t})*log(\frac {N_{tk}}{N_t}) Ht(T)=k(NtNtk)log(NtNtk),损失函数为 C α ( T ) = ∑ t = 1 ∣ T ∣ N t H t ( T ) + α ∣ T ∣ C_{\alpha}(T)=\sum_{t=1}^{|T|}N_tH_t(T)+\alpha|T| Cα(T)=t=1TNtHt(T)+αT
  2. 递归的从叶节点回溯,自下而上的比较回溯前树 T b T_b Tb和回溯后 T a T_a Ta的损失函数,如果 C α ( T a ) ≤ C α ( T b ) C_{\alpha}(T_a) \le C_{\alpha}(T_b) Cα(Ta)Cα(Tb),即剪枝后整树的损失函数减小了,那么将该叶子节点以下的树剪枝,将该叶子设置为新的父节点
  3. 返回(2),直到不能继续位置,得到损失最小的子树 T α T_{\alpha} Tα

以上过程可以使用动态规划实现

  • CART树的剪枝

同ID3和C4.5一样,自下而上的剪枝,比较剪枝前后的loss变化,如果减小了就剪枝,否则保留

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值