一文详解决策树:ID3与C4.5算法
1. 决策树是什么?
想象一下,你要判断一个水果是苹果、橙子还是香蕉,你可能会通过一系列问题来推理:
它是红色的吗?
如果是,摸起来光滑吗?
光滑 -> 可能是苹果
不光滑 -> 可能是橙子(但橙子不红?这里只是举例)
如果不是,它是黄色的吗?
是,且是长条状 -> 可能是香蕉
不是 -> 其他水果
这个过程就是一个简单的决策树。在机器学习中,决策树是一种模拟人类这种决策过程的模型,它通过一系列“如果...那么...”的规则对数据进行分类或回归。
结构:树形结构,包含三种节点:
根节点:包含全部数据集的顶层节点。
内部节点:代表一个特征或属性上的测试。
叶节点:代表最终的决策结果(类别或数值)。
2. 决策树的核心:如何选择划分特征?
构建决策树的关键在于,每一步如何从众多特征中选择一个“最佳”特征来对数据进行划分。这个“最佳”的标准是不同的,也就引出了不同的算法。ID3和C4.5算法的核心区别就在于这个选择标准的不同。
在深入算法之前,必须先理解一个至关重要的概念:信息熵。
2.1 信息熵
熵源于热力学,在信息论中由香农提出,用于度量系统的不确定性。
定义:对于一个数据集 DD,其类别标签有 CC 种。熵的计算公式为:
其中 pk 是第 k 类样本在数据集 D 中所占的比例。
如何理解?
熵值越高,不确定性越大。例如,一个袋子里的球红蓝各一半,你随机抽一个,猜中颜色的不确定性最高,此时熵为
熵值越低,纯度越高。例如,袋子里全是红球,你抽一个肯定是红色,不确定性为0,此时熵为
。
我们的目标就是通过选择特征进行划分,使得划分后子集的纯度越来越高,即熵值越来越低。
2.2 信息增益 - ID3算法的准则
信息增益直接衡量了使用某个特征 aa 进行划分后,数据集不确定性减少的程度。
定义:
其中:
D 是父节点的数据集。
V 是特征 aa 的取值个数(例如,“颜色”有红、黄、蓝3种取值)。
是 D 中在特征 a 上取值为 v 的样本子集。
是该子集的权重。
核心思想:选择那个能带来最大信息增益的特征作为划分标准。因为增益越大,意味着不确定性降低得越多。
ID3算法的局限性:
信息增益虽然直观,但存在一个明显缺陷:它倾向于选择取值数目较多的特征。
极端例子:如果将“样本ID”作为一个特征,那么每个ID都会划分出一个唯一的子集,这些子集的纯度极高(熵为0),这将导致信息增益最大。但用“ID”来分类是毫无意义的,因为它没有任何泛化能力,导致了过拟合。
2.3 信息增益率 - C4.5算法的改进
为了克服信息增益的偏向性,C4.5算法引入了信息增益率。
定义:
其中 IV(a) 是特征 a 的固有值,其计算公式为:
**如何理解 IV(a) **:
仔细观察,IV(a) 的公式其实就是数据集 D 在特征 a 上的熵。
特征 a 的取值越多,V 越大,其本身的熵 IV(a) 通常也越大。
信息增益率 = 信息增益 / 特征本身的熵。这相当于对取值多的特征进行了“惩罚”。当一个特征的取值非常多时(如“ID”),其 IV(a) 会非常大,从而使得增益率变得很小,避免了被选为划分特征。
C4.5的具体操作:
C4.5并非直接选择增益率最大的特征,而是先找出信息增益高于平均水平的特征,然后再从这些特征中选择信息增益率最高的那个。这是一种启发式方法,在避免偏向性和保留有效信息之间取得平衡。
3. 算法流程与对比
ID3算法流程
从根节点开始,计算当前数据集中所有特征的信息增益。
选择信息增益最大的特征作为当前节点的划分特征。
根据该特征的每个取值,建立分支,并将数据集划分到对应的子节点中。
对每个子节点递归地重复步骤1-3,直到满足终止条件(如:所有样本属于同一类别、没有剩余特征可用、或节点样本数过少)。
算法:ID3(数据集 D, 特征集 A) 输入:训练数据集 D,特征集合 A 输出:决策树 T1. 创建节点 node 2. IF D 中所有样本属于同一类别 C THEN 3. 将 node 标记为 C 类叶节点 4. RETURN node 5. END IF 6. IF A = ∅ OR D 中样本在 A 上取值相同 THEN 7. 将 node 标记为 D 中样本数最多的类叶节点 8. RETURN node 9. END IF10. // 选择最优划分特征 11. FOR EACH 特征 a ∈ A DO 12. 计算信息增益 Gain(D, a) 13. END FOR 14. 选择信息增益最大的特征 a_best = argmaxₐ(Gain(D, a))15. // 以 a_best 创建分支 16. FOR EACH a_best 的取值 v DO 17. 为 node 生成一个分支,令 D_v 表示 D 中在 a_best 上取值为 v 的子集 18. IF D_v = ∅ THEN 19. 将分支节点标记为 D 中样本最多的类叶节点 20. ELSE 21. 以 ID3(D_v, A \ {a_best}) 为分支节点 // 递归调用,移除已用特征 22. END IF 23. END FOR 24. RETURN 以 node 为根的决策树
C4.5算法流程
C4.5的流程与ID3完全一致,唯一的区别在于第2步:
2. 选择信息增益率最大(采用先筛选后选择的方法)的特征作为当前节点的划分特征。
4. C4.5的其他重要改进
除了用信息增益率替代信息增益,C4.5还针对ID3的其他不足进行了重要改进:
处理连续特征:
ID3只能处理离散型特征。
C4.5通过二分法处理连续特征。它会将连续特征的所有取值排序,然后尝试所有可能的分割点(如相邻取值的中间值),计算以每个分割点划分数据后的信息增益率,并选择最佳分割点。这样,连续特征就被离散化了。
处理缺失值:
ID3无法处理有缺失值的数据。
C4.5允许数据中存在缺失值。在计算信息增益(率)时,它只使用该特征上没有缺失的样本。同时,在划分样本时,会将有缺失值的样本同时划分到所有子节点,并赋予不同的权重(例如,根据各子节点样本数量的比例)。在预测时,也会类似地处理。
剪枝:
ID3没有剪枝步骤,容易过拟合。
C4.5引入了悲观剪枝,在树构建完成后,自底向上地评估子树是否可以被叶节点替代,以避免过拟合,提升模型的泛化能力。
算法:C4.5(数据集 D, 特征集 A) 输入:训练数据集 D,特征集合 A 输出:决策树 T1. 创建节点 node 2. IF D 中所有样本属于同一类别 C THEN 3. 将 node 标记为 C 类叶节点 4. RETURN node 5. END IF 6. IF A = ∅ OR D 中样本在 A 上取值相同 THEN 7. 将 node 标记为 D 中样本数最多的类叶节点 8. RETURN node 9. END IF10. // 选择最优划分特征 11. 初始化候选特征集合 candidate_features = ∅ 12. 初始化 avg_gain = 0 13. 14. // 步骤1:计算所有特征的信息增益,并找出平均信息增益 15. FOR EACH 特征 a ∈ A DO 16. gain[a] = Gain(D, a) 17. avg_gain = avg_gain + gain[a] 18. END FOR 19. avg_gain = avg_gain / |A| 20. 21. // 步骤2:筛选信息增益高于平均值的特征 22. FOR EACH 特征 a ∈ A DO 23. IF gain[a] ≥ avg_gain THEN 24. 将 a 加入 candidate_features 25. END IF 26. END FOR 27. 28. // 步骤3:从候选特征中选择信息增益率最大的 29. FOR EACH 特征 a ∈ candidate_features DO 30. 计算固有值 IV(a) = -Σ(|Dᵥ|/|D| * log₂(|Dᵥ|/|D|)) 31. 计算信息增益率 Gain_ratio(D, a) = gain[a] / IV(a) 32. END FOR 33. 选择信息增益率最大的特征 a_best = argmaxₐ(Gain_ratio(D, a))34. // 处理连续特征(如果是连续特征) 35. IF a_best 是连续特征 THEN 36. 找到最佳分割点 split_point 37. 将 D 划分为 D_left (a_best ≤ split_point) 和 D_right (a_best > split_point) 38. // 为两个子集递归构建子树 39. ELSE 40. // 离散特征:按取值创建分支 41. FOR EACH a_best 的取值 v DO 42. 为 node 生成一个分支,令 D_v 表示 D 中在 a_best 上取值为 v 的子集 43. IF D_v = ∅ THEN 44. 将分支节点标记为 D 中样本最多的类叶节点 45. ELSE 46. 以 C4.5(D_v, A \ {a_best}) 为分支节点 47. END IF 48. END FOR 49. END IF 50. RETURN 以 node 为根的决策树
5. 总结与对比
特性 | ID3算法 | C4.5算法 |
---|---|---|
划分准则 | 信息增益 | 信息增益率 |
对多值特征的偏向 | 有,倾向于选择取值多的特征 | 克服了此偏向 |
处理连续特征 | 不支持 | 支持,通过二分法 |
处理缺失值 | 不支持 | 支持 |
剪枝 | 无 | 有,悲观剪枝 |
核心贡献 | 奠定了用信息论构建决策树的基础 | 是ID3的全面升级版,更实用、更强大 |
6. 结语
ID3和C4.5是决策树发展史上里程碑式的算法。ID3提出了利用信息熵来量化决策过程的思想,而C4.5则在继承这一思想的基础上,通过引入信息增益率、支持连续值和缺失值处理以及剪枝技术,极大地完善了决策树模型,使其成为一个真正强大且实用的机器学习工具。
尽管如今像CART(Classification and Regression Trees)和集成学习(如随机森林、XGBoost)更为流行,但理解ID3和C4.5是深入理解决策树家族乃至整个树模型世界的坚实基础。