AdaBoost强分类器集成学习系统
项目介绍
本项目实现了一个基于AdaBoost算法的集成学习框架,旨在将多个弱分类器(单层决策树)组合成一个高精度的强分类器。系统通过动态调整样本权重,使后续的基学习器能够专注于先前被错误分类的样本。该系统能够处理非线性分布的二分类任务,并提供完整的训练、评估与结果可视化流程,非常适合用于理解集成学习的权重更新机制和分类决策原理。
功能特性
- 自动生成非线性分布的合成数据集(中心区域与外围环形分布)。
- 实现单层决策树(Decision Stump)作为基学习器,支持自动寻找最优特征、切分阈值及其分类方向。
- 动态权重调整机制,根据每一轮弱分类器的分类误差率更新样本权重和基学习器的投票权重。
- 训练过程监控,实时记录并展示随迭代次数增加而变化的训练损失。
- 多维度结果可视化,包括分类精度统计、误差收敛曲线以及强分类器的二维决策边界。
系统要求
- MATLAB R2016b 或更高版本。
- 无需额外安装工具箱,核心算法基于MATLAB基础函数实现。
- 建议显示器分辨率不低于1280x720,以获得最佳的可视化图表展示效果。
实现逻辑说明
系统运行遵循以下核心步骤:
- 数据准备:
程序首先生成200个非线性分布的二维样本点。类别1位于圆心区域,类别2分布在外部环形区域。数据按70%用于训练,30%用于测试的比例进行随机划分。
- 弱分类器构建:
系统采用“单层决策树”作为基学习器。在每一轮训练中,它会遍历数据的所有特征维度,并通过预设的步长在特征取值范围内寻找最佳的切分阈值。同时,它会尝试两种分类方向(小于阈值为-1或大于阈值为-1),最终选取使加权错误率最低的模型参数。
- 权重迭代更新:
在AdaBoost训练循环中,每个弱分类器被赋予一个重要度权重(alpha),其值取决于该分类器的训练误差率。随后,系统更新所有训练样本的分布权重:被错误分类的样本权重将增加,而正确分类的样本权重将减小。更新后的权重经归一化后用于下一轮弱分类器的训练。
- 强分类器生成:
最终的强分类器是一个线性组合模型。在进行预测时,系统将待分类数据输入所有训练好的弱分类器,根据各弱分类器的输出进行加权投票,通过取符号函数(Sign)决定最终的类别归属。
- 性能评估与可视化:
训练完成后,系统遍历测试集计算准确率,并绘制两张核心图表:左侧为训练误差随迭代次数下降的收敛曲线,右侧为叠加了样本分布的决策边界色块图,直观展示强分类器对非线性空间的划分能力。
关键函数与实现细节分析
弱分类器寻找逻辑:
在寻找最优决策点时,系统会在特征的最小值和最大值之间划分20个等间距步长。通过二重循环遍历“特征维度”与“切分点”,并在每个切分点对比两种不等式方向(小于等于 vs 大于),确保找到全局最优的单层决策划分。
AdaBoost核心公式实现:
- 弱分类器权重:alpha = 0.5 * log((1 - err) / err)。
- 样本权重更新:使用指数映射更新,即 D = D * exp(-alpha * y * pred)。
- 异常处理:在计算alpha时对分母采取极小值补偿,防止因误差率为0导致的对数计算溢出。
- 早停机制:如果在迭代过程中训练误差率达到0,系统将提前终止迭代。
决策边界可视化方案:
为了绘制平滑的决策边界,系统在特征空间内生成100x100的网格点,利用训练好的强分类器对所有网格点进行预测。通过等高线填充函数展示不同类别的判定区域,从而形象地展示出AdaBoost如何通过多个线性边界组合出复杂的非线性判定面。
使用方法
- 启动MATLAB。
- 将包含相关函数的文件所在文件夹设为当前工作路径。
- 在命令行窗口直接输入主函数名并回车。
- 系统将自动执行数据生成、模型训练及性能评估,最后弹出包含性能指标和决策边界的可视化窗口。
- 实验结果(训练/测试准确率)将同步在MATLAB命令行窗口中输出。