Processing math: 100%

决策树 ID3\C4.5\CART

ID3 C4.5 CART
特征选择 信息增益 信息增益比 基尼不纯度
连续值处理 只能处理离散值 排序后找到不同类别的分割线 二分
特征在层级之间复用
树形式 多叉 多叉 二叉树
剪枝
适用问题 分类 分类 分类/回归
  • 关于特征选择方式与熵?

    熵反映了信息量大小(混乱程度),熵越大信息量越大。我们的目标是熵减少方向

树模型原理

ID3

(1)计算数据集D 的经验熵 H(D)

H(D)=Kk=1|Ck||D|log2|Ck||D|

K 表示数据类别,Ck 表示第 k 类样本的个数
(2)计算特征 A 对数据集 D 的经验条件熵 H(D|A)

H(D|A)=ni=1|Di||D|H(Di)=ni=1|Di|D|Kk=1|Dk||Di|log2|Dk||Di|

Di 表示根据特征 A 划分后的数据子集

(3)计算信息增益

g(D,A)=H(D)H(D|A)

C4.5

信息增益比

HA(D)=nj=1N(Dj)N(D)log(N(Dj)N(D))gr(D,A)=g(D,A)HA(D)

其中 n表示特征 A取值的个数

CART

分类树

基尼不纯度(gini impurity)

gini(p)=Ki=1pk(1pk)=1Ki=1p2k

pk 表示两个第 k类样本的数量比。

基尼不纯度的(1pk) 相当于信息熵中log项的泰勒展开
ln(x)=(x1)

根据特征 A的取值a划分两个子集(二叉)

gini(D)=1Ki=1(|Ck||D|)2gini(D,A)=|D1||D|gini(D1)+|D2||D|gini(D2)D1={(x,y)D|A(x)=a},D2=DD1

回归树

  • 回归树如何选择节点分裂方式?

    使用平方误差 (yif(xi))2

  • 树模型怎么得到平方误差呢?

    根据叶子节点值作为作为输出。将输入空间划分为多个单元,每个单元有一个固定输出值(对应输入空间输出值的平均)

  • 具体怎么划分?

    类似分类树,根据划分前后的误差选取。选取切分变量和切分点(特征及特征取值)

回归树构建流程:

  1. 选择切分变量j和切分点s,划分子区域:

    R1(j,s)={x|x(j)s},R2(j,s)={x|x(j)>s}

  2. 计算对应特征与特征值下的误差:

    xiR1(j,s)(yic1)2+xiR2(j,s)(yic2)2

    其中 c1=ave(yi|xiR1(j,s))

    1. 遍历,寻找最优切分变量j和最优切分点s(使平方误差最小)

    2. 根据选定的(j,s)划分区域:

    R1,R2,cm=1NmxiRm(j,s)yi,m{1,2}

树创建

ID3、C4.5 多叉树

createTree

CART分类树(二叉)

CART

CART回归树

CART_reg

不同树的基本创建过程只有两点不同:

  • 划分节点的评价方式
  • 子集的划分

references:

[1] 统计学习方法

[2] 机器学习实战

posted @   鱼与鱼  阅读(213)  评论(0编辑  收藏  举报
编辑推荐:
· 为什么 .NET8线程池 容易引发线程饥饿
· golang自带的死锁检测并非银弹
· 如何做好软件架构师
· 记录一次线上服务OOM排查
· Linux实时系统Xenomai宕机问题的深度定位过程
阅读排行:
· 2025年广告第一单,试试这款永久免费的开源BI工具
· o3 发布了,摔碎了码农的饭碗
· 用 2025 年的工具,秒杀了 2022 年的题目。
· 为什么 .NET8线程池 容易引发线程饥饿
· .NET 响应式编程 System.Reactive 系列文章(一):基础概念
点击右上角即可分享
微信分享提示