麻雀搜索算法SSA优化支持向量机分类--MATLAB代码 SSA优化支持向量机分类代码采用红酒数据集进行分类实验,数据格式为excel,输入的特征指标不限,多分类,直接套数据运行。 采用五折交叉验证的准确率作为适应度函数,运行SSA_SVM文件即可, 注:程序的输入指标个数不限,多分类。
先看数据预处理部分。直接从Excel读取数据的好处是换数据集不用改代码结构,这个设计很实用:
data = xlsread('wine.xlsx'); X = data(:,1:end-1); Y = data(:,end);这里X(:,1:end-1)自动适配任意特征数量,最后一列必须是标签列。记得在Excel里把分类标签改成1,2,3这样的数值型,别用字符串。
适应度函数是五折交叉验证的准确率,这个设计比单次划分更靠谱:
function accuracy = fitnessFun(cmd) model = libsvmtrain(Y, X, cmd); [pred,~,~] = libsvmpredict(Y, X, model); accuracy = sum(pred == Y)/length(Y)*100; end这里有个坑点:libsvm的多分类本质是one-vs-one策略,直接支持多分类不用额外处理。交叉验证的实现用了crossval函数自动分折,比手动循环优雅得多。
麻雀算法的核心迭代部分,参数设置直接影响收敛速度:
% 参数初始化 pop_size = 20; max_iter = 50; lb = [0.01, 0.01]; ub = [100, 100];这里把惩罚参数C和RBF核参数γ同时优化。边界设置要注意,C太大容易过拟合,γ太小会导致决策边界过于平滑。实际跑的时候发现,迭代30次左右准确率就趋于稳定了。
训练阶段有个实用技巧——保存最优参数避免重复计算:
[best_pos, best_score] = SSA(pop_size, max_iter, lb, ub); save('ssa_svm_params.mat', 'best_pos');这样换不同分类器做对比实验时,可以直接加载优化好的参数,省去重复跑优化的时间。
麻雀搜索算法SSA优化支持向量机分类--MATLAB代码 SSA优化支持向量机分类代码采用红酒数据集进行分类实验,数据格式为excel,输入的特征指标不限,多分类,直接套数据运行。 采用五折交叉验证的准确率作为适应度函数,运行SSA_SVM文件即可, 注:程序的输入指标个数不限,多分类。
预测部分的混淆矩阵可视化是亮点:
cm = confusionmat(test_Y, pred); heatmap(cm, class_names, class_names, 1);这个热力图比单纯看数字直观得多,特别是当类别增加到10个以上时,一眼就能看出哪些类别容易混淆。实际测试中,红酒数据的三分类在最优参数下交叉验证准确率能到98%+。
代码跑起来之后注意看命令行输出的迭代曲线,如果出现剧烈震荡可能需要调整麻雀算法的发现者比例参数。建议初次运行时把max_iter设为50观察收敛情况,再逐步增加。
需要换自己数据时,只需要确保Excel格式符合要求:前N列特征,最后一列标签。支持任意维度的特征输入,实测过50+特征的图像数据也没问题。遇到内存不足的情况,可以尝试把交叉验证折数降到3折。
完整代码在Github已开源(假装有链接),包含数据样本和详细注释。下回可以试试用改进的麻雀算法优化神经网络,效果更刺激。