代码功能
该MATLAB代码实现了一个数据增强与分类验证流程:
- 合成数据生成:使用遗传算法(GA)优化BP神经网络,基于鸢尾花数据集生成多组合成数据
- 模型验证:用生成的合成数据训练多类SVM分类器,并在原始数据上验证性能
- 可视化分析:对比原始数据与合成数据的分布特征
算法步骤与技术路线
第一阶段:数据准备
- 数据导入:加载鸢尾花数据集(fisheriris.mat)
- 标签编码:将文本标签转为数值标签(Setosa=1, Versicolor=2, Virginica=3)
- 数据预处理 :
- 展平4维特征数据为列向量
- 归一化处理(范围[-1,1])
- 创建伪输出目标
第二阶段:GA-BP合成数据生成
matlab
for i = 1:SyntheticGen
Network = TrainUsing_GA_Fcn(...); % GA优化网络权重
Synthetic{i} = abs(YtrNet.*Data); % 生成合成数据
end
- 神经网络构建:创建双层前馈网络(输入层 → 50神经元隐层 → 输出层)
- 遗传算法优化 :
- 搜索空间:[-5, 10]
- 种群大小:8
- 最大迭代:18次
- 数据合成:取网络预测值的绝对值缩放原始数据
第三阶段:数据重构与可视化
- 结构重组:将合成数据转为150×4矩阵(匹配原始数据结构)
- 标签附加:为每个合成数据集添加原始标签
- 特征可视化 :
- 原始/合成数据曲线对比
- 特征散点图(萼片宽度 vs 花瓣长度)
第四阶段:SVM验证
matlab
Mdlsvm = fitcecoc(SyntheticData,SyntheticLbl); % 多类SVM训练
SVMAccAugTest = 100 - TestErrAugsvm; % 原始数据测试准确率
- 模型训练:使用合成数据训练多类SVM(fitcecoc)
- 交叉验证:计算合成数据训练准确率
- 原始数据测试:评估模型泛化能力
关键参数设定
参数类别 | 参数名 | 值 | 说明 |
---|---|---|---|
合成数据 | SyntheticGen | 7 | 生成7组新数据 |
遗传算法 | PopSize | 8 | 种群大小 |
MaxGenerations | 18 | 最大迭代次数 | |
VarRange | [-5, 10] | 优化变量范围 | |
神经网络 | 隐层节点 | 50 | tansig激活函数 |
输出层 | 1 | tansig激活函数 |
运行环境要求
MATLAB版本2020b
应用场景
- 小样本数据增强:当原始数据集不足时生成新样本
- 分类模型鲁棒性验证:测试模型在合成数据上的泛化能力
- 多类分类问题:验证多类SVM在增强数据上的表现