决策树构建思路与修正
决策树基本思路的标准化步骤
决策树的构建是一个自顶向下的递归过程(称为“贪心算法”),从根节点开始,逐层分裂,直到形成叶节点。以下是详细步骤,结合了您的描述并修正了不准确之处:
计算整个数据集的初始信息熵(标签熵):
- 信息熵(Entropy)用于衡量数据集的不纯度(impurity)。计算公式为:
其中 (S) 是当前数据集,(c) 是类别标签的数量,(p_i) 是第 (i) 类在数据集中的比例。
- 这一步是“对标签信息熵进行计算”,而不是“对全部特征的信息熵进行计算”。特征本身没有信息熵;我们只关心标签(目标变量)的熵。例如,在一个二分类问题中,如果数据集有50%正例和50%负例,熵为1(最大不纯度);如果100%正例,熵为0(完全纯净)。
- 您的描述修正:您提到“先对全部特征的信息熵进行计算”,这可能是个误解。实际上,我们只计算标签的熵(即“标签信息熵”),作为基准。
- 信息熵(Entropy)用于衡量数据集的不纯度(impurity)。计算公式为:
计算各个特征的信息增益(Information Gain):
- 对于每个特征,计算它对减少标签熵的贡献,即信息增益。信息增益衡量了使用该特征进行分裂后,不纯度的下降程度。
- 先计算该特征划分后的条件熵(Conditional Entropy):对于特征 (A),假设它有 (v) 个取值,将数据集分为 (v) 个子集 (S_1, S_2, \dots, S_v)。条件熵为:
- 然后,信息增益为:
- 先计算该特征划分后的条件熵(Conditional Entropy):对于特征 (A),假设它有 (v) 个取值,将数据集分为 (v) 个子集 (S_1, S_2, \dots, S_v)。条件熵为:
- 信息增益越大,表示该特征对分类的贡献越强。
- 您的描述修正:您说“根据标签信息熵计算各个特征信息增益”,这部分基本正确,但需注意:信息增益是直接从标签熵和条件熵推导出的,不需要单独“对全部特征的信息熵进行计算”。
- 对于每个特征,计算它对减少标签熵的贡献,即信息增益。信息增益衡量了使用该特征进行分裂后,不纯度的下降程度。
选择最优特征作为分裂点(如根节点或子节点):
- 比较所有特征的信息增益,选择增益最大的特征作为当前节点的分裂特征。
- 这个特征成为当前节点的决策点(例如,根节点是树的起点)。
- 您的描述修正:您提到“根据最优特征筛选根节点作为开始”,这正确。但注意,根节点是第一个分裂点,之后每个子节点都可能成为新的分裂点。
根据特征取值创建子节点并递归分裂:
- 使用选定的最优特征,将数据集按特征取值分割成子集(例如,如果特征是“天气”,取值“晴”“雨”“阴”,则创建三个子节点)。
- 对每个子节点(子集)递归重复上述过程(计算子集的标签熵、计算特征信息增益、选择最优特征分裂)。
- 您的描述修正:您说“根据第二节点的信息增益筛选出子集如此往复”,意思正确,但需注意:每个子节点在递归中成为新的“当前节点”,其信息增益计算基于该子集的数据,而不是整个数据集。
递归停止条件:直到叶节点完全纯净或满足其他条件:
- 递归分裂的终止条件是当子集(节点)满足以下任一情况:
- 完全纯净:节点中所有实例属于同一类别(即熵为0),则该节点成为叶节点(leaf node),并标记为该类别。
- 无特征可用:所有特征都已用于分裂,或没有特征能进一步减少不纯度。
- 其他停止条件:如达到预设的最大树深度、节点中实例数过少(避免过拟合)等。
- 您的描述修正:您提到“直到叶节点完全获得同一标签的小类为结束”,这正确且是理想情况(完全纯净)。但在实践中,由于噪声数据或提前停止,叶节点可能不绝对纯净,此时使用多数类标签(见下一步)。
- 递归分裂的终止条件是当子集(节点)满足以下任一情况:
为叶节点分配多数类标签(不是内部节点):
- 当节点成为叶节点时(无论是因为完全纯净还是提前停止),它被分配该节点中多数实例的类别标签。这用于后续预测:新数据从根节点遍历到叶节点,预测结果为叶节点的标签。
- 您的描述修正:您提到“对于前几个节点以多数类标签作为子集的标签”,这有误解:
- 错误点:决策树的内部节点(非叶节点,如根节点或中间节点)不分配类别标签!它们仅用于特征分裂(决策规则),例如“如果特征A>阈值,则走左分支”。内部节点不做预测;只有叶节点存储标签。
- 正确理解:您可能意指在构建过程中,如果一个子集(节点)无法进一步分裂(如由于停止条件),它成为叶节点并分配多数类标签。但这不是“前几个节点”特有的,而是所有叶节点的通用规则。另外,“子集的标签”应理解为叶节点对应的类别标签。
- 为什么误解可能发生:在可视化决策树时,内部节点有时会显示多数类分布(用于解释),但这不是算法的一部分。构建算法中,内部节点只存储分裂特征和阈值。
完整流程示例(简单说明)
假设一个数据集,特征为年龄、收入,标签是“是否购买”。决策树构建过程:
- 根节点:计算整个数据集的标签熵(如购买比例)。
- 计算每个特征(年龄、收入)的信息增益。
- 假设“年龄”信息增益最大,选为根节点分裂特征(如年龄<30、30-50、>50)。
- 创建子节点:每个年龄分组对应一个子节点。
- 递归子节点:对每个子节点,重复步骤1-4(例如,在“年龄<30”子集,计算标签熵,再选最优特征(如收入)分裂)。
- 停止:如果某个子节点所有实例都是“购买”,则成为叶节点标记为“购买”;如果混合但停止分裂(如实例太少),则标记多数类(如60%购买,则标记“购买”)。
- 预测:新数据根据特征值从根向下走,最终到达叶节点,输出其标签。
