clc,clear,close all % 清屏+清理工作区+关闭图形窗口
warning off % 取消警告
feature jit off % 加速通道
tic
global popmin1 popmax1 popmin2 popmax2 nvar
% 加载数据
load('data.mat')
data0 = data;
for i=1:size(data,2) % 样本归一化
minmax(i,1) = min(data(:,i));
minmax(i,2) = max(data(:,i));
data(:,i) = (minmax(i,2)-data(:,i))./(minmax(i,2)-minmax(i,1));
end
%% 构造训练预测数据
train_data = data(136:end,1:4);
train_output_data = data(136:end,5);
test_data = data(1:135,1:4);
test_output_data = data(1:135,5);
%% 粒子群PSO算法参数设置
maxgen = 20; % 最大迭代次数
sizepop = 5; % 种群数量
Vmax = 1; % 粒子速度上限
Vmin = -1; % 粒子速度下限
c1 = 1.4995; % 学习因子1
c2 = 1.4995; % 学习因子2
% 变量坐标取值范围
nvar = 2; % 未知量数量
popmin1 = 0.1; popmax1 = 2; % SVM惩罚系数C
popmin2 = 0.1; popmax2 = 2; % SVM径向基函数基宽sigma
%% 初始化粒子群PSO种群位置
pop=[];
for i=1:sizepop
pop1.C = unifrnd(popmin1,popmax1,1,1); % 均匀分布解
pop1.sigma = unifrnd(popmin2,popmax2,1,1); % 均匀分布解
pop = [pop; pop1];
fitness(i) = fun( pop(i,:),train_data,train_output_data );
end
clear pop1
V = Vmax*rands(sizepop,2); % 初始化速度
[bestfitness,bR]= max(fitness); % 亮度最高的保留
zbest = pop(bR,:); % 全局最佳
fitnesszbest = bestfitness; % 全局最佳适应度值
gbest = pop; % 个体最佳
fitnessgbest = fitness; % 个体最佳适应度值
trace = zbest; % 记录最优的种群
%% 粒子群PSO算法迭代寻优
for i=1:maxgen
disp(['Iteration ' num2str(i)]);
% 计算适应度值
for j=1:sizepop
% 速度更新
V(j,:) = V(j,:) + c1*rand*([gbest(j).C,gbest(j).sigma] - [pop(j).C,pop(j).sigma] ) +...
c2*rand*([zbest.C,zbest.sigma] - [pop(j).C,pop(j).sigma] );
V(j,find(V(j,:)>Vmax))=Vmax; % 上限
V(j,find(V(j,:)<Vmin))=Vmin; % 下限
% 种群更新
pop(j).C = pop(j).C + 0.5*V(j,1);
pop(j).sigma = pop(j).sigma + 0.5*V(j,2);
% pop个体取值范围约束
if pop(j).C > popmax1 % 上限
pop(j).C = popmax1 ;
elseif pop(j).C < popmin1 % 下限
pop(j).C = popmin1;
end
if pop(j).sigma > popmax2 % 上限
pop(j).sigma = popmax2 ;
elseif pop(j).sigma < popmin2 % 下限
pop(j).sigma = popmin2;
end
fitness(j) = fun( pop(j,:) ,train_data,train_output_data ); % 计算适应度值
% 个体最优更新
if fitness(j) > fitnessgbest(j)
gbest(j,:) = pop(j,:);
fitnessgbest(j) = fitness(j);
end
% 群体最优更新
if fitness(j) > fitnesszbest
zbest = pop(j,:);
fitnesszbest = fitness(j);
end
end
trace = [trace,zbest]; % 记录最优的种群
fitness_iter(i) = fitnesszbest; % 最优适应度值
end
time = toc;
disp(['CPU计算时间 = ' num2str(time)])
save PSO_iter_result.mat fitness_iter trace zbest gbest train_data train_output_data data0 data test_data test_output_data minmax
figure(1),
plot(fitness_iter,'b.-','linewidth',2);grid on;
xlabel('迭代次数');ylabel('适应度值');axis tight;
% 计算适应度值
[fitnessZ,predict_result]= fun_predict( zbest,train_data,train_output_data,test_data );
disp(['最优惩罚因子C = ' num2str(zbest.C)])
disp(['最优径向基函数基宽sigma = ' num2str(zbest.sigma)])
figure(2),
plot(data0(136:end,end),'r.-','linewidth',2);axis tight;
hold on
% 反归一化
plot(minmax(end,2) - predict_result{1}*(minmax(end,2)-minmax(end,1)),'b.-','linewidth',2);axis tight;
legend('原始训练样本','训练样本预测值');hold off;
xlabel('样本序列');ylabel('预测值');axis tight;
figure(3),
plot(data0(1:135,end),'r.-','linewidth',2);axis tight;
hold on
% 反归一化
plot(minmax(end,2) - predict_result{2}*(minmax(end,2)-minmax(end,1)),'b.-','linewidth',2);axis tight;
legend('原始测试样本','测试样本预测值');hold off;
xlabel('样本序列');ylabel('预测值');axis tight;
RMSE = sqrt(mean((data(1:135,end)'-predict_result{2}).^2));
% R2 = 1-sum(data(1:135,end)'-predict_result{2})./sum(data(1:135,end)-mean(data(1:135,end)));
disp(['RMSE = ' num2str(RMSE)])
% disp(['R2 = ' num2str(R2)])
%% rmse迭代画图
for i=1:length(trace)
gbest_iter = trace(:,i);
[fitnessZ,predict_result]= fun_predict( gbest_iter,train_data,train_output_data,test_data );
RMSEiter = sqrt(mean((data(1:135,end)'-predict_result{2}).^2));
RMSE_iter(i) = RMSEiter;
end
figure(4),
plot(RMSE_iter,'b.-','linewidth',2);grid on;
xlabel('迭代次数');ylabel('RMSE值');axis tight;
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
1、资源内容:基于Matlab实现粒子群算法SVM(源码+数据).rar 2、适用人群:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业或毕业设计,作为“参考资料”使用。 3、解压说明:本资源需要电脑端使用WinRAR、7zip等解压工具进行解压,没有解压工具的自行百度下载即可。 4、免责声明:本资源作为“参考资料”而不是“定制需求”不一定能够满足所有人的需求,需要有一定的基础能够看懂代码,能够自行调试代码并解决报错,能够自行添加功能修改代码。由于作者大厂工作较忙,不提供答疑服务,如不存在资源缺失问题概不负责,谢谢理解。
资源推荐
资源详情
资源评论
收起资源包目录
基于Matlab实现粒子群算法SVM(源码+数据).rar (5个子文件)
基于Matlab实现粒子群算法SVM(源码+数据)
fun_predict.m 1KB
PSO_iter_result.mat 4KB
PSO_SVM_ysw2.m 5KB
fun.m 1KB
data.mat 1KB
共 5 条
- 1
资源评论
- wsadqqwwee2023-11-29支持这个资源,内容详细,主要是能解决当下的问题,感谢大佬分享~
- laotanglinjv2024-05-04感谢资源主的分享,这个资源对我来说很有用,内容描述详尽,值得借鉴。
- 766289362024-03-04这个资源内容超赞,对我来说很有价值,很实用,感谢大佬分享~
Matlab仿真实验室
- 粉丝: 2w+
- 资源: 2180
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功