机器学习理论 | 周志华西瓜书 第四章:决策树

文章提炼周志华《机器学习》中决策树的核心要点。介绍了决策树的基本流程、划分选择的不同方法及对应著名算法,如 ID3、C4.5、CART 等;阐述剪枝处理以应对过拟合,包括预剪枝和后剪枝;还提及连续与缺失值的处理,以及多变量决策树。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第四章 决策树

此系列文章旨在提炼周志华《机器学习》的核心要点,不断完善中…


4.1 基本流程

  • 概要
    • 决策树组成
      一个根节点:包含样本全集
      若干个内部节点:对应于一个属性测试
      若干个叶节点:对应于决策结果
    • 决策树的目的:为了产生一棵泛化能力强,即处理未见示例能力强的决策树
    • 遵循的策略:分而治之
  • 决策时学习基本算法
    在这里插入图片描述

4.2 划分选择:如何选择最优划分属性

  • 原则:提高结点的纯度(purity)——结点所包含的样本尽可能属于同一类别
  • 信息增益(information gain)
    • 信息熵(information entropy):Ent(D)=−∑k=1∣Y∣pklog2pkEnt(D)=-\sum_{k=1}^{|\mathcal{Y}|}p_klog_2 p_kEnt(D)=k=1Ypklog2pk(其中Ent(D)Ent(D)Ent(D)越低则数据集纯度越高,Ent(D)∈[0,log2∣Y∣]Ent(D)\in [0,log_2|\mathcal{Y}|]Ent(D)[0,log2Y])
    • 信息增益:Gain(D,a)=Ent(D)−∑v=1V∣Dv∣∣D∣Ent(Dv)Gain(D,a)=Ent(D)-\sum_{v=1}^V \frac{|D^v|}{|D|}Ent(D^v)Gain(D,a)=Ent(D)v=1VDDvEnt(Dv)(其中分支节点权重为∣Dv∣∣D∣\frac{|D^v|}{|D|}DDv
    • 著名决策树学习算法:ID3(以信息增益为准则来选择划分属性)
    • 偏好(不利影响):对可取值数目较多的属性有偏好
  • 增益率
    • 定义:Gain_ratio(D,a)=Gain(D,a)IV(a), IV(a)=−∑v=1V∣Dv∣∣D∣log2∣Dv∣∣D∣Gain\_ratio(D,a)=\frac{Gain(D,a)}{IV(a)},\ IV(a)=-\sum_{v=1}^V\frac{|D^v|}{|D|}log_2\frac{|D^v|}{|D|}Gain_ratio(D,a)=IV(a)Gain(D,a), IV(a)=v=1VDDvlog2DDv
    • 著名决策树学习算法:C4.5(使用增益率划分最优属性)
    • 偏好:对可取值数目较少的属性有所偏好
  • 基尼指数(Gini index)
    • 数据集的纯度可用基尼值来度量:Gini(D)=∑k=1∣Y∣∑k′=k̸pkpk′=1−∑k=1∣Y∣pk2Gini(D)=\sum_{k=1}^{|\mathcal{Y}|}\sum_{k'=\not k}p_kp_k'=1-\sum_{k=1}^{|\mathcal{Y}|}p_k^2Gini(D)=k=1Yk=kpkpk=1k=1Ypk2
    • 属性a的基尼指数:
      Gini_index(D,a)=∑v=1V∣Dv∣∣D∣Gini(Dv)(A)Gini\_index(D,a)=\sum_{v=1}^V\frac{|D^v|}{|D|}Gini(D^v) \tag{A}Gini_index(D,a)=v=1VDDvGini(Dv)(A)
    • 著名决策树学习算法:Classification and Regression Tree(CART)
    • 偏好:在候选属性集合A中,选择那个使得划分后基尼指数最小的属性作为最优划分属性

4.3 剪枝处理:决策树学习算法对付“过拟合”的主要手段

  • 预剪枝

    • 过程:
       1)预在决策树生成的过程中,对每个结点在划分前先进行估计
       2)判断当前结点划分能否带来决策树泛化性能的提升
       3)决定是否停止划分并将当前结点标记为叶节点

    • 决策树桩(decision stump):一棵仅有一层划分的决策树

    • 优点:降低过拟合风险,显著减少训练时间和测试时间

  • 后剪枝

    • 过程:
       1)先从训练集生成一棵完整的决策树
       2)自底向上对非叶结点进行考察,判断将该结点对应的子树替换为叶节点能否带来决策树泛化性能提升
       3)决定是否将该子树替换为叶节点

    • 特点:通常比预剪枝保留更多的分支

    • 优缺点:欠拟合风险小,泛化性能优,但训练时间长

4.4 连续与缺失值

  • 连续值处理
    离散优化:二分法(bi-partition)

    将公式(A)(A)(A)进行改造,DDD为基于划分点t划分后的信息增益
    Ta={ai+ai+12∣1≤i≤n−1}Gain(D,a)=maxt∈TaGain(D,a,t)=maxt∈TaEnt(D)−∑λ∈{−,+}∣Dtλ∣∣D∣Ent(Dtλ)\begin{aligned} Ta&=\{ \frac{a^i+a^{i+1}}{2}| 1≤i≤n-1\}\\ &\\ Gain(D,a)&=max_{t\in T_a} Gain(D,a,t)\\&=max_{t\in T_a}Ent(D)-\sum_{\lambda \in \{-,+\}}\frac{|D_t^\lambda|}{|D|}Ent(D_t^\lambda) \end{aligned}TaGain(D,a)={2ai+ai+11in1}=maxtTaGain(D,a,t)=maxtTaEnt(D)λ{,+}DDtλEnt(Dtλ)
    注意:与离散属性不同,若当前结点划分属性为连续属性,该属性可作为其后代结点的划分属性

  • 缺失值处理

    • 1)如何在属性值缺失的情况下进行划分属性的选择
      根据D中没有缺失值的样本自己判断a的优劣
    • 2)给定划分属性,若样本在该属性上的值缺失,如何对样本进行划分
      • 样本x在划分属性a上取值已知:将x划入与其取值对应的子结点,且样本权值在子结点保持wx
      • 取值未知:让同一个样本以不同的概率划入到不同的子结点中

4.5 多变量决策树:斜决策树

  • 轴平行:形成的分类边界由若干个与坐标轴平行的分段组成
    在这里插入图片描述

复杂,属性测试预测时间开销大

  • 方案:对复杂分类边界进行分段近似
    在这里插入图片描述

多变量决策树的学习过程中,不为每个非叶结点寻找一个最优划分属性,而是试图建立一个合适的线性分类器

### 关于《机器学习周志华西瓜课后习题解析 #### 不同章节的习题特点与解决方法 对于不同章节中的具体题目,解决方案各有侧重。例如,在第九章中提到的内容涉及较为复杂的模型评估和技术应用[^1]。 #### 构建不剪枝决策树的具体案例分析 当处理特定的数据集如西瓜数据3.0α时,构建不剪枝决策树的过程不同于简单的决策桩。这里需要考虑更多的节点分裂标准以及如何全面地利用特征属性进行划分,而不是仅仅依赖单一条件做出判断[^2]。 #### 计算假设空间大小的方法探讨 针对西瓜分类问题中的假设空间计算,如果采用最多包含k个合取式的析合范式,则可以通过组合数学的方式估计可能存在的假设数量。这涉及到对给定条件下所有潜在模式的理解和量化[^3]。 #### 版本空间的概念及其解过程说明 版本空间是指既能够解释已有观察又尽可能泛化到未见实例的一组假设集合。通过移除那些无法匹配已知正例或反而能解释负例的候选方案,可以逐步缩小这一范围直至找到最优解[^4]。 ```python def calculate_hypothesis_space_size(attributes, values_per_attribute): """ Calculate the size of hypothesis space given attributes and their possible value counts. :param attributes: List of attribute names :param values_per_attribute: Dictionary mapping each attribute to its number of distinct values :return: Total number of hypotheses in the space """ total_combinations = 1 for attr in attributes: if attr in values_per_attribute: total_combinations *= (values_per_attribute[attr] + 1) # Include wildcard '*' return total_combinations - 1 # Exclude completely wild card case '* * ...' # Example usage based on provided information from reference [3] attributes = ["色泽", "根蒂", "敲声"] value_counts = {"色泽": 2, "根蒂": 2, "敲声": 2} print(f"The estimated number of possible hypotheses is {calculate_hypothesis_space_size(attributes, value_counts)}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值