从数学到编程,从零教你 Python 实现基于C4.5算法的决策树+后剪枝算法
代码见:https://github.com/KevinTungs/C4.5-Python.git
背景信息
什么是决策树?
决策树可以想象成是一个巨大的“如果-那么”规则集合,组织成一个树形结构。它从一个根节点开始,每一次决策就是选择一个分支,直到达到叶节点,叶节点代表了最终的决策结果。你可以将其视为一个问答游戏:每个内部节点代表一个问题,每个分支代表这个问题的一个可能答案,而每个叶节点则代表游戏的最终结果。比如,在判断一个动物是什么的决策树中,一个节点可能问:“它有羽毛吗?”如果答案是“是”,那么你沿着“是”的分支走下去,接下来的问题可能是“它会飞吗?”;如果答案是“否”,你可能就走向了另一个分支,比如进一步询问它是否有鳞片。通过这种方式,决策树能够帮助我们根据一系列问题的答案来分类或者预测事物。
专家系统
专家系统,是人工智能的一个分支,模仿人类专家的决策能力,提供专门领域内的决策支持。它主要由三个部分组成:知识库(存储领域知识和事实)、推理机(模拟专家的推理过程,根据知识库中的规则对问题进行推理)、用户界面(与用户交互,获取问题并展示推理结果)。专家系统依赖于领域专家提供的规则和知识,通过逻辑推理来解决复杂的问题。
决策树和专家系统的决策过程很像。下面是他们的差异:
- 相似性:
- 模拟决策过程:决策树和专家系统都旨在模拟(或辅助)人类的决策过程。决策树通过数据学习产生决策路径,而专家系统通过规则和逻辑推理来进行决策。
- 规则表示:在某种程度上,决策树的路径可以视为决策规则,这与专家系统使用的基于规则的推理相似。
- 差异:
- 知识来源:决策树的知识是通过分析训练数据自动学习得到的,而专家系统的知识来自于人类专家的直接输入。
- 构建过程:决策树的构建是一个自动化的过程,主要依赖于算法从数据中学习;而专家系统的构建需要领域专家明确定义规则和知识。
- 应用领域:决策树广泛应用于各种分类和回归任务中,专家系统则更多应用于特定领域的问题解决,如医疗诊断、金融分析等。
决策树的最优划分属性选择
决策树学习的关键是如何选择最优划分属性。一般而言,我们希望决策树的分支节点所包含的样本尽可能属于同一类别,也就是说节点的“纯度”越来越高。
最优属性选择的标准主要包括信息增益(Information Gain)、信息增益比(Gain Ratio)、基尼指数(Gini Index)等,它们分别适用于不同的决策树算法,如ID3、C4.5和CART。
信息增益(ID3算法)
信息增益是最常用的选择方法之一,它基于香农的信息论。
信息熵
假定当前样本集合 D D D中第 k k k类样本所占的比例为 p k p_k pk,则 D D D的信息熵定义为:
E n t ( D ) = p k ∑ k = 1 y − l o g 2 p k Ent(D)=p_k\sum_{k=1}^y-log_2p_k Ent(D)=pkk=1∑y−log2pk
信息熵满足下面三个性质:
- 单调性,发生概率越高的事件,其携带的信息量越低;
- 非负性,信息熵可以看作为一种广度量,非负性是一种合理的必然;
- 累加性,即多随机事件同时发生存在的总不确定性的量度是可以表示为各事件不确定性的量度的和,这也是广度量的一种体现。
信息增益
信息增益是基于熵的概念,熵是一个衡量数据集随机性(或不确定性)的指标。信息增益测量的是在知道属性 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{|D_v|}{|D|} Ent(D_v) Gain(D,A)=Ent(D)−v=1∑V∣D∣∣Dv∣Ent(Dv)
其中:
- D D D是数据集
- D v D_v Dv是 D D D中 A A A取值为 V V V的子集
- ∣ D v ∣ ∣ D ∣ \frac{|D_v|}{|D|}