C4.5决策树分类算法MATLAB程序
项目介绍
本项目是一个基于MATLAB环境开发的C4.5决策树分类器。该程序旨在实现Ross Quinlan提出的经典机器学习算法,通过引入信息增益比、连续属性离散化处理、缺失值处理以及悲观剪枝技术,构建一个具备高泛化能力的预测模型。该算法是对ID3算法的深度演变,能够有效处理实际应用场景中常见的数据异构性和噪声问题。
功能特性
- 核心评估准则:采用信息增益比作为分裂标准,克服了传统增益准则偏向于选择取值较多属性的固有缺陷。
- 连续变量处理:内置二分法处理机制,通过计算所有可能的分割点,动态地对数值型特征进行离散化。
- 缺失值鲁棒性:在计算信息增益阶段仅针对已知值进行权重归一化,在样本分发阶段根据各分支已知样本占比对缺失值样本进行权重重分配。
- 过拟合防御:实现了悲观错误率估计(PEP)后剪枝技术,利用统计学修正方法在无需验证集的情况下对树结构进行修整。
- 多维可视化:程序自动生成分类混淆矩阵与ROC曲线,直观展示模型的查准率、查全率及综合判别性能。
系统要求
- 运行环境:MATLAB R2016b 或更高版本。
- 依赖工具箱:主要使用MATLAB基础函数。绘图及评估部分使用了统计与机器学习工具箱的部分内置函数(如confusionmat)。
使用方法
- 数据准备:在主函数中配置特征矩阵X和标签向量y。需指明每个特征属于连续属性还是离散属性。
- 模型训练:调用构建函数,输入训练数据与属性说明,程序将递归生成树形结构。
- 执行剪枝:将训练好的树输入剪枝函数,程序会自动化遍历非叶子节点并根据PEP逻辑决定是否简化。
- 预测与评估:通过预测函数获取预测标签及分类得分,进而通过内置的可视化模块查阅训练/测试准确率及ROC表现。
核心功能逻辑分析
1. 决策树构建逻辑
程序通过递归方式构建决策树。在每个节点,算法遍历所有备选特征:
- 对于连续特征,先对取值进行排序并计算相邻值的均值作为候选分裂点,寻找使信息增益比最大的切分位置。
- 对于离散特征,按照该特征的所有取值进行全分支划分。
- 在面临缺失值时,算法引入权系数rho(非缺失样本占比)来调整信息增益,确保评估的公正性。
2. 缺失值处理机制
- 计算增益:仅使用在该属性上非空的样本计算熵和增益,最后结果乘以非空比例系数。
- 训练集分发:若样本在分裂属性上取值缺失,则将其同时分发至所有子节点,但在各子节点中的权重会根据已知样本在各个分支的分布比例进行缩减。
- 预测阶段:若待测样本特征缺失,程序通过查阅子节点的分布情况,选择概率分布最大的路径作为预测方向。
3. 悲观剪枝(PEP)算法
这是一种自底向上的后剪枝技术。程序会对每个非叶节点进行如下评估:
- 统计当前子树在训练集上的错误数,并赋予每个叶子节点0.5的惩罚常数。
- 计算若将当前节点强行变为叶子节点后的错误数(加上0.5的惩罚)。
- 引入标准差(SE)概念,若剪枝后的错误估计在子树错误估计的一倍标准差范围内,则执行剪枝,从而简化模型结构,防止过拟合。
4. 评估指标实现
- 混淆矩阵:通过对比真实标签与预测标签,使用热力图形式展现分类器在各类别上的分类效果。
- ROC曲线与得分:预测函数不仅输出类别,还输出正类概率(得分)。计算模块通过不断移动阈值获取FPR与TPR的坐标序列,从而绘制出ROC曲线,用于评估模型在不同截断点下的表现。
重要实现细节
- 基础熵计算:基于加权概率分布计算信息熵,支持浮点权重。
- 分裂指标:实现了Intrinsic Value(固有值)的计算,用于消除ID3算法对多值属性的偏好。
- 递归终止条件:当样本完全属于同一类别、深度超过上限、或在当前属性下无法获得正向增益比时,节点自动转为叶节点。