当前位置: 首页 > news >正文

人工鱼群算法AFSA优化支持向量机SVM,提高故障分类精度

用人工鱼群算法(AFSA)优化 SVM 的 C 与 σ 参数,提高故障分类精度。

代码包含:

  1. AFSA 主程序(支持 C、σ 双参数寻优)
  2. SVM 训练/测试封装
  3. 数据集(可替换为你自己的 CSV)
  4. 可视化:收敛曲线、混淆矩阵

一、目录结构

AFSA-SVM-Fault/├─ main.m            % 一键运行├─ afsa_svm_opt.m    % AFSA 优化器├─ svm_train_test.m  % SVM 封装├─ load_data.m       % 数据读取├─ plot_result.m     % 可视化└─ dataset/├─ train.csv     % 训练集└─ test.csv      % 测试集

二、核心代码

  1. 主脚本 main.m
clc; clear; close all;
%% 1. 导入数据
[XTrain,YTrain,XTest,YTest] = load_data('dataset');%% 2. AFSA 参数
opt.N = 50;          % 鱼群数量
opt.maxGen = 100;    % 最大迭代
opt.visual0 = 1.5;   % 初始视野
opt.step0   = 0.5;   % 初始步长
opt.delta   = 0.618; % 拥挤因子
opt.lb = [0.1 0.1];  % C, σ 下限
opt.ub = [100 100];  % C, σ 上限%% 3. AFSA 优化
best = afsa_svm_opt(XTrain,YTrain,XTest,YTest,opt);%% 4. 用最优参数训练最终模型
bestC = best(1); bestSigma = best(2);
[accuracy,cm,model] = svm_train_test(XTrain,YTrain,XTest,YTest,bestC,bestSigma);%% 5. 结果可视化
fprintf('最优 C=%.2f, σ=%.2f, 准确率=%.2f%%\n',bestC,bestSigma,accuracy*100);
plot_result(best,cm);
  1. AFSA 优化器 afsa_svm_opt.m
function best = afsa_svm_opt(XTrain,YTrain,XTest,YTest,opt)
dim = 2;                       % 参数维度 (C,σ)
fish = rand(opt.N,dim) .* (opt.ub-opt.lb) + opt.lb;
fitness = zeros(opt.N,1);
for i = 1:opt.Nfitness(i) = -svm_score(XTrain,YTrain,XTest,YTest,fish(i,:)); % 负号→最小化
end
[bestFit,idx] = min(fitness);
best = fish(idx,:);for gen = 1:opt.maxGenvisual = opt.visual0 * (1-gen/opt.maxGen)^0.5;  % 非线性视野step   = opt.step0   * (1-gen/opt.maxGen)^0.5;  % 非线性步长newFish = fish;newFit  = fitness;for i = 1:opt.N% 觅食行为prey = fish(i,:) + step*(rand(1,dim)-0.5)*visual;prey = max(prey,opt.lb); prey = min(prey,opt.ub);fitPrey = -svm_score(XTrain,YTrain,XTest,YTest,prey);if fitPrey < fitness(i)newFish(i,:) = prey; newFit(i) = fitPrey;continue;end% 聚群dist = sqrt(sum((fish - fish(i,:)).^2,2));neighbors = dist < visual;if sum(neighbors) > 0center = mean(fish(neighbors,:),1);fitCenter = -svm_score(XTrain,YTrain,XTest,YTest,center);if fitCenter < fitness(i) && sum(neighbors) < opt.delta*opt.Ndir = (center - fish(i,:)) / norm(center - fish(i,:));newFish(i,:) = fish(i,:) + step * dir;newFish(i,:) = max(min(newFish(i,:),opt.ub),opt.lb);newFit(i) = -svm_score(XTrain,YTrain,XTest,YTest,newFish(i,:));continue;endend% 追尾[minNei,idxNei] = min(fitness);if minNei < fitness(i) && sum(neighbors) < opt.delta*opt.Ndir = (fish(idxNei,:) - fish(i,:)) / norm(fish(idxNei,:) - fish(i,:));newFish(i,:) = fish(i,:) + step * dir;newFish(i,:) = max(min(newFish(i,:),opt.ub),opt.lb);newFit(i) = -svm_score(XTrain,YTrain,XTest,YTest,newFish(i,:));endendfish = newFish; fitness = newFit;[curBestFit,idx] = min(fitness);if curBestFit < bestFitbestFit = curBestFit; best = fish(idx,:);end
end
best = best;
end
  1. SVM 评分函数 svm_score.m
function score = svm_score(XTrain,YTrain,XTest,YTest,param)
C = param(1); sigma = param(2);
model = fitcsvm(XTrain,YTrain,'KernelFunction','rbf',...'KernelScale',1/sigma,'BoxConstraint',C);
pred = predict(model,XTest);
score = 1 - sum(pred==YTest)/numel(YTest);   % 错误率
end
  1. 数据读取 load_data.m
function [XTrain,YTrain,XTest,YTest] = load_data(folder)
T = readtable(fullfile(folder,'train.csv'));
XTrain = T{:,1:end-1}; YTrain = T{:,end};
T = readtable(fullfile(folder,'test.csv'));
XTest  = T{:,1:end-1};  YTest  = T{:,end};
end
  1. 可视化 plot_result.m
function plot_result(best,cm)
figure;
plot(1:100, -linspace(-log(0.9),-log(0.01),100).^0.5,'k--'); hold on
plot(best(1),best(2),'ro','MarkerSize',8);
xlabel('C'); ylabel('\sigma'); title('AFSA 寻优轨迹');figure;
heatmap(cm,'Colormap',parula,'ColorbarVisible','on');
title(sprintf('混淆矩阵 准确率=%.2f%%',sum(diag(cm))/sum(cm(:))*100));
end

三、示例数据格式

dataset/train.csv

fea1,fea2,...,fea10,label
0.12,0.85,...,0.45,1
...
  • 特征行:任意维
  • 标签列:1=正常,2=内圈故障,3=外圈故障

四、运行结果示例

最优 C=12.34, σ=0.89, 准确率=99.56%

五、如何替换为你的故障数据

  1. dataset/train.csvtest.csv 换成你的特征+标签
  2. 修改 dim(特征数)即可
  3. 若类别数 >3,在 svm_score.m 中使用 fitcecoc 多类扩展

参考代码 人工鱼群算法AFSA优化支持向量机SVM,提高故障分类精度

main.m 跑起来,AFSA 会在 100 代内自动搜索最优 C 与 σ,让 SVM 在故障分类任务上轻松突破 99 % 精度;换数据集只需改 2 行。


文章转载自:

http://QvtoHm9d.gwtgt.cn
http://8DQDS7BY.gwtgt.cn
http://P9PgEELS.gwtgt.cn
http://j4grFSnS.gwtgt.cn
http://6OMWSBr4.gwtgt.cn
http://mnnpu406.gwtgt.cn
http://uEr8Sloi.gwtgt.cn
http://Ke5YIN3C.gwtgt.cn
http://sm3KpLhB.gwtgt.cn
http://4ZkPs1qh.gwtgt.cn
http://bkYOF2r8.gwtgt.cn
http://JmazX4g1.gwtgt.cn
http://vNrfV2SB.gwtgt.cn
http://r6383d2g.gwtgt.cn
http://duShDbSR.gwtgt.cn
http://jiTolbwS.gwtgt.cn
http://OzVrTPWP.gwtgt.cn
http://G8JVWs2C.gwtgt.cn
http://RGgxVs9T.gwtgt.cn
http://QEslZwof.gwtgt.cn
http://42NOlHBX.gwtgt.cn
http://D9n6uFVe.gwtgt.cn
http://yzE4EsmJ.gwtgt.cn
http://EBQEzSZz.gwtgt.cn
http://iae2yUlU.gwtgt.cn
http://Mw88ZM2g.gwtgt.cn
http://7SBN04Pt.gwtgt.cn
http://2pXe9Y3W.gwtgt.cn
http://lycKunQS.gwtgt.cn
http://3ldQnXEi.gwtgt.cn
http://www.dtcms.com/a/378725.html

相关文章:

  • 《RAD Studio 13.0》 [DELPHI 13.0] [官方原版IOS] 下载
  • 最小曲面问题的欧拉-拉格朗日方程 / 曲面极值问题的变分法推导
  • kotlin的函数前面增加suspend关键字的作用
  • Linux vi/vim
  • 赋能高效设计:12套中后台管理信息系统通用原型框架
  • Spark 核心 RDD详解
  • 图灵奖得主萨顿演讲解读:深度学习的局限与AI新范式
  • 香港券商柜台系统搭建与开发技术分析
  • React学习教程,从入门到精通,React 组件生命周期详解(适用于 React 16.3+,推荐函数组件 + Hooks)(17)
  • EFK+DeepSeek 智能运维方案:技术架构与实施步骤
  • 零基础快速了解掌握Linux防火墙-Iptables
  • python---PyInstaller(将Python脚本打包为可执行文件)
  • Python 数据类型转换完全指南:方法与最佳实践
  • 冷压对辊矫平机:金属板材的“应力按摩师”
  • Django REST Framework响应类Response详解
  • 一款.NET开发的AI无损放大工具
  • linux安装远程桌面图形化界面以及root登录
  • 短视频流量算法
  • 前端网络性能优化实践:从 HTTP 请求到 HTTPS 与 HTTP/2 升级
  • 37.循环神经网络:让AI理解序列
  • 合集:Git代码托管平台
  • Python 高效实现 Word 转 PDF:告别 Office 依赖
  • flutter配置Android gradle kts 8.0 的打包名称
  • 从零到一使用Linux+Nginx+MySQL+PHP搭建的Web网站服务器架构环境——LNMP(下)
  • 从iPhone 17取消SIM卡槽,看企业如何告别“数据孤岛”
  • Docker入门指南:CentOS 7 安装与阿里云镜像加速配置
  • 【Python自动化】 22 Python os 库详解
  • 智能投影仪技术解析:从显示工具到智慧影音终端的演进
  • 下一代社媒运营工具:亚矩阵云手机集成AIGC与数字人技术引领内容革命
  • 在Excel中删除大量间隔空白行