基于MATLAB的AdaBoost算法及其级联分类器实现
项目简介
本项目是一个基于MATLAB环境开发的强分类器构建系统,核心采用AdaBoost(Adaptive Boosting)自适应增强算法结合级联(Cascade)架构实现。该系统能够将多个性能较弱的“决策桩”(Decision Stump)弱分类器通过迭代训练,组合成具有高检测率和低误报率的级联分类器。项目不仅实现了权重调整、弱学习器选择等标准AdaBoost逻辑,还重点通过级联结构模拟了Viola-Jones框架中的快速检测机制,显著提高了处理大规模数据集时的筛选速度,非常适合人脸检测、目标识别及二分类预测等应用场景。
功能特性
- 自动生成模拟数据集:系统内置了基于二维高斯分布的模拟数据生成器,可模拟具有重叠特征的正负样本簇,用于验证分类器的有效性。
- 完整的AdaBoost训练逻辑:实现了针对弱分类器的加权训练、误差计算、模型权重(Alpha)更新以及样本权重的重分配。
- 级联结构设计:支持多阶段(Stage)训练,每一阶段在上一个阶段筛选出的“难样本”基础上进行进一步训练,实现逐层过滤。
- 动态阈值调整:在每一层训练中,系统会根据预设的最小检测率(Detection Rate)目标,自动调整强分类器的判定阈值,确保目标尽可能通过。
- 负样本过滤机制:各阶段训练完成后,仅保留被当前模型误判为正样本的负样本进入下一轮训练,从而优化计算资源并提高模型判别力。
- 综合性能评估:内置混淆矩阵计算与多种评估指标,并提供决策边界可视化及ROC曲线分析功能。
核心算法流程
1. 数据预处理与划分
程序首先在二维空间内生成指定数量的正、负样本,并按照70%训练、30%测试的比例随机划分,确保模型评估的客观性。
2. 多阶段级联训练
系统执行多轮级联阶段训练,每个阶段包含以下逻辑:
- 初始化样本权重:初始权值均等分配。
- 弱学习器迭代:在当前阶段内,迭代训练决策桩,根据最小化加权误差准则选择最优特征维度和分裂阈值。
- 更新与归一化:计算分类器权重Alpha,并根据分类结果指数级调整样本权值,让后续训练集中关注被错分的样本。
- 阈值修正:提取正样本在当前强分类器下的得分,通过排序寻找能够保证预设检测率(如98%)的最低得分作为该阶段的级联阈值。
- 阶段性终止:若当前层通过增加弱分类器达到了预设的阶段误报率,则提前结束该层迭代。
3. 级联判定与过滤
在每一级训练结束后,程序将测试所有负样本。只有通过了当前级以及之前所有层判定的负样本(即被误认为正样本的干扰项)才会进入下一级的训练集。如果所有负样本被排干,训练将自动收敛。
4. 测试与验证
待所有级联阶段训练完成后,将整个级联模型应用于测试集。样本必须依次通过所有阶段的判定阈值才会被最终标注为“正”,否则在任何一级被拒绝都将被直接判定为“负”。
函数与实现细节分析
弱分类器:决策桩(Decision Stump)
系统实现了基于简单特征维度的分裂算法。
- 训练函数:通过遍历所有特征维度,在每个维度上对样本特征值进行排序并取相邻点中点作为候选阈值,寻找能使加权错误率最小的维度、阈值及极性(Polarity)。
- 预测函数:根据训练出的模型参数,对输入数据进行一维比较得出-1或1的预测结果。
级联判定逻辑
在推理阶段,系统并未计算所有弱分类器的总得分,而是采用了“先拒绝”策略。每经过一个阶段,计算该阶段所有弱分类器的加权和,并与该阶段的动态阈值对比。这种结构在大规模背景(负样本占绝大多数)的检测任务中,能让大部分负样本在首层就被排除,极大提升了算法效率。
评估指标计算
- 混淆矩阵:从测试结果中提取真阳性(TP)、真阴性(TN)、假阳性(FP)和假阴性(FN)。
- 统计分数:计算准确率(Accuracy)、查准率(Precision)、召回率(Recall)以及衡量前两者平衡性的F1分数。
可视化呈现
- 决策区域图:通过对采样点进行网格预测,绘制出级联分类器在二维特征空间形成的非线性判定边界,并以颜色填充区分正负判定区域,同时叠加显示原始测试数据点。
- ROC曲线:通过对样本在级联过程中的累计得分进行置信度分析,计算不同阈值下的真阳性率(TPR)和假阳性率(FPR),展示分类器在不同敏感度下的整体性能表现。
系统要求
- 软件支持:MATLAB R2016b 或更高版本。
- 硬件要求:通用配置即可,由于算法经过优化,在处理提供的模拟数据集时具有较低的计算开销。
使用方法
- 打开MATLAB软件,将工作目录切换至本项目文件夹。
- 运行主函数,系统将自动开始执行数据生成、级联训练及性能评估。
- 观察命令行输出的各阶段训练日志,包括当前级弱分类器数量、剩余负样本数以及累积误报率。
- 训练完成后,系统将自动弹出两个可视化图表,分别展示决策边界和ROC曲线,并在命令行显示最终的测试指标。