基于MATLAB的自动化决策树建模与分析系统
项目简介
本项目是一个基于MATLAB开发的高度封装的决策树分析工具。其核心目标是简化从原始数据处理到决策模型构建与优化的全过程。系统内置了自动化的数据模拟与预处理机制,采用经典的CART算法(分类回归树)构建模型,并通过交叉验证进行自动剪枝优化以防止过拟合。该工具特别强调结果的可视化与可解释性,能够生成包含树结构图、混淆矩阵、特征重要性排序及ROC曲线在内的全方位评估报告,适用于金融风控、客户分类等数据挖掘场景。
主要功能特性
- 全流程自动化:覆盖数据生成、清洗、建模、优化、评估及可视化的完整机器学习工作流。
- 智能数据预处理:自动识别数据类型,对数值型缺失数据进行均值填充,将文本/字符型变量自动转换为分类(Categorical)格式。
- CART算法建模:基于MATLAB统计与机器学习工具箱,使用Gini指数作为分裂准则构建二叉分类树。
- 自动剪枝优化:集成K折交叉验证(K-Fold Cross-Validation),自动计算不同树深度的误差,选取最佳剪枝级别,有效平衡模型复杂度与泛化能力。
- 多维可视化仪表盘:单窗口集成决策树拓扑图、混淆矩阵和特征重要性条形图。
- 性能评估体系:自动计算准确率(Accuracy)、AUC值,并绘制独立的ROC曲线。
代码实现逻辑与核心算法细节
本项目完全通过 main 主程序及其内部子函数实现,具体逻辑如下:
1. 数据获取与模拟
系统首先通过内部算法生成模拟数据集(默认为1000个样本),模拟真实世界的数据分布:
- 特征变量:包含数值型变量(年龄、收入、信用评分)和分类型变量(教育程度)。
- 非线性逻辑:目标变量(是否违约)通过复杂的非线性逻辑与特征关联(包含年龄、收入比例、信用评分扣分及教育程度的加权),并引入随机噪声。
- 脏数据模拟:人为在“收入”字段中引入5%的随机缺失值(NaN),用于测试预处理模块的健壮性。
2. 数据预处理机制
在进入建模前,程序自动执行数据清洗:
- 数值型处理:遍历所有列,检测到数值型变量中存在NaN时,利用该列的非空均值(Mean imputation)进行填充。
- 类型转换:检测字符串、元胞数组或字符数组,将其强制转换为MATLAB的
categorical 类型,确保fitctree函数能正确处理离散特征。
3. 初始模型构建 (CART)
系统使用
fitctree 函数构建初始分类树:
- 算法配置:采用精确算法(Exact)处理分类变量,使用Gini多样性指数(gdi)作为节点分裂准则。
- 生长策略:设定最小叶节点样本数(MinLeafSize)为5,且初始不进行剪枝(Prune='off'),目的是先构建一棵较深、较复杂的树,为后续的剪枝优化提供基础。
4. 自动剪枝优化
为了提升模型的泛化能力,系统实现了自动剪枝逻辑:
- 交叉验证:对初始树模型执行10折交叉验证。
- 误差分析:计算所有可能的子树序列的交叉验证误差(Cross-validation Error)。
- 最优决策:自动定位使交叉验证误差最小的树深度(Best Pruning Level)。
- 剪枝执行:基于计算出的最佳级别,对原始树进行剪枝操作,生成最终优化模型。还将绘制“剪枝级别 vs 交叉验证误差”的趋势图,直观展示优化过程。
5. 模型评估与可视化
系统通过图形界面和命令行输出展示最终结果:
*
树结构图谱:以图形化方式展示节点分裂条件、样本流向。
*
混淆矩阵:对比预测标签与真实标签,直观展示分类准确性及误判情况。
*
特征重要性:计算并排序各特征对模型的贡献度(Predictor Importance),以条形图展示,帮助理解关键驱动因素(如收入或信用评分的影响力)。
* 计算测试集上的整体准确率。
* 针对二分类问题,计算并打印AUC值(Area Under Curve)。
* 单独绘制ROC曲线,展示真阳性率与假阳性率的权衡关系。
- 规则提取:在命令行以文本形式输出决策树的判断规则逻辑。
系统要求
- MATLAB版本:建议 R2014b 或更高版本(需支持
categorical 数组及新版图形对象)。 - 工具箱支持:必须安装 Statistics and Machine Learning Toolbox(统计与机器学习工具箱)。
使用说明
- 直接运行
main.m 脚本。 - 程序将自动开始初始化环境、生成数据并执行全流程分析。
- 输出结果:
*
命令行窗口:显示数据预处理进度、数据集划分详情、最佳剪枝级别、最终准确率、AUC值以及文本化的决策规则。
*
图形窗口 1:展示剪枝优化过程中的误差变化曲线。
*
图形窗口 2:综合仪表盘,包含决策树结构、混淆矩阵和特征重要性分析。
*
图形窗口 3:独立的ROC曲线图(仅在二分类情况下生成)。