旋转森林算法与决策树集成分类系统
项目介绍
本项目是一个基于MATLAB环境实现的旋转森林(Rotation Forest)集成学习系统。旋转森林是一种旨在增强基分类器之间“差异性”与“准确性”的集成算法。它通过随机特征子集划分和主成分分析(PCA)技术对原始特征空间进行线性变换,为每一个决策树基分类器创建一个独特的旋转特征空间。相比于传统的随机森林,旋转森林在处理小样本、高维数据时往往能表现出更优的泛化能力。
功能特性
- 特征空间旋转:通过随机划分特征子空间并应用PCA变换,实现坐标轴旋转,充分挖掘特征间的相关性。
- 多样性增强:在PCA计算过程中引入自助采样(Bootstrap)机制,进一步提升集成模型中各基分类器的独立性。
- 决策树集成:使用CART决策树作为弱学习器,通过多数投票法合成最终预测结果。
- 全流程评估:系统提供自动化的训练/测试集划分、模型预测、以及多维度的性能评价。
- 可视化呈现:生成混淆矩阵热图和各类别分类指标(精确率、召回率)对比图,直观展现分类效果。
系统要求
- MATLAB R2016b 或更高版本。
- 统计与机器学习工具箱(Statistics and Machine Learning Toolbox)。
算法实现逻辑
代码严格遵循旋转森林的原始算法流程,主要步骤如下:
- 数据预处理:
* 加载内置的鸢尾花(Iris)数据集,将字符型标签转换为数值型编码。
* 按照 70% 训练集、30% 测试集的比例进行随机划分,并固定随机数种子以保证实验可重复性。
- 集成模型构建:
*
参数配置:设置集成规模(L=20棵决策树)和特征子集数量(K=2)。
*
特征划分子空间:对于每一棵树,随机打乱所有特征索引,并将其均匀分成互不相交的K个子集。
*
构建旋转矩阵:
* 对每个特征子集,从训练集中提取对应的特征列。
* 使用自助采样(Bootstrap)从当前样本中进行有放回抽取,以增加PCA变换的差异性。
* 执行主成分分析,保留所有主成分对应的系数向量(载荷矩阵)。
* 将各子集的PCA系数填入一个块对角矩阵中,构建该分类器专属的旋转矩阵。
*
投影与训练:将原始训练数据与旋转矩阵相乘,得到旋转后的新特征空间,在此空间上训练一棵决策树。
- 预测与集成:
* 预测阶段,待测样本需分别通过每棵树对应的旋转矩阵进行空间变换。
* 所有决策树输出预测类别。
* 系统收集所有预测结果,通过取众数(多数投票法)决定最终的分类标签。
- 性能分析:
* 计算总准确率、混淆矩阵。
* 针对每一个类别分别计算精确率(Precision)和召回率(Recall)。
关键函数与实现细节分析
- 主成分分析实现:代码中自拟了PCA逻辑,通过数据中心化处理(减去均值)和奇异值分解(SVD)获取特征向量。这种方式保留了特征空间的所有维度(没有降维),确保信息不丢失,仅改变观察数据的视角。
- 块对角旋转矩阵:旋转矩阵的构造是算法的核心,不同子空间的PCA系数按块排列。这种设计保证了特征重组仅在定义的子空间内发生,同时维持了变换后的特征正交性。
- 自助重采样:通过辅助函数从训练集中随机有放回地抽取样本索引。这一步是确保即便两个基分类器选择了相同的特征子集,由于PCA基于不同的样本观测值计算,最终生成的坐标轴旋转方向也会有所不同。
- 鲁棒性可视化:使用图像矩阵展现预测分类与真实分类的关系,并利用条形图量化不同类别的分类质量,便于识别模型在特定类别上的性能短板。
- 端到端推理:代码末尾包含了针对单一样本的完整预测演示,展示了从原始特征输入到模型集成投票的闭环流程。