失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 基于粒子群优化算法的最小二乘支持向量机预测模型构建(MATLAB实现)

基于粒子群优化算法的最小二乘支持向量机预测模型构建(MATLAB实现)

时间:2024-04-21 18:24:10

相关推荐

基于粒子群优化算法的最小二乘支持向量机预测模型构建(MATLAB实现)

先去下载matlab的lssvm工具箱,网上可以搜到。这里不细说

先用PSO算法进行参数寻优,也就是gamma和sig2两个参数,LS-SVM的原理不细说。

pso.m

clc;clear all;n = 2; % n 是自变量的个数m = 1; % m 是因变量的个数%% 读取训练数据for train_num=2:34; %训练样本数train_Data = data(1:train_num,:);% 特征值归一化[train_Input,minI,maxI] = premnmx(train_Data(:,1:n)');% 构造输出矩阵[train_Output,minO,maxO] = premnmx(train_Data(:,n+1:end)');%% 读取测试数据test_Data = data(train_num+1:end,:);% 特征值归一化test_Input = tramnmx(test_Data(:,1:n)',minI,maxI);% 构造测试输出矩阵test_Output = tramnmx(test_Data(:,n+1:end)',minO,maxO);%PSO参数c1 = 2; %PSO局部搜索能力c2 = 2; %PSO全局搜索能力sizepop = 20; %种群规模k = 100;%最大迭代次数w = 0.9;%惯性因子%确定优化参数的数目length = 2;param = rand(sizepop,length);speed = rand(sizepop,length);popmin = 0.01;popmax = 100;vmin = -1;vmax = 1;type='f';for i=1:sizepopgamma = param(i,1);sig2 = param(i,2);[alpha,b] = trainlssvm({train_Input',train_Output',type,gamma,sig2,'RBF_kernel'});predict = simlssvm({train_Input',train_Output',type,gamma,sig2,'RBF_kernel'},{alpha,b},test_Input');score = sqrt(sum((predict-test_Output').^2)/size(test_Output',1));fitness(i,:) = score;lbest(i,:) = param(i,:);end[value,index] = min(fitness);gbest = param(index,:);fitnessbest = value;%PSO优化参数for T=1:kfor i=1:sizepopspeed(i,:) = w*speed(i,:)+c1*rand*(lbest(i,:)-param(i,:))+c2*rand*(gbest-param(i,:));speed(i,find(speed(i,:)>vmax)) = vmax;speed(i,find(speed(i,:)<vmin)) = vmin;param(i,:) = param(i,:)+speed(i,:);param(i,find(param(i,:)>popmax)) = popmax;param(i,find(param(i,:)<popmin)) = popmin;pick = rand;if pick > 0.9kk = ceil(2*pick);param(i,kk) = pick;endgamma = param(i,1);sig2 = param(i,2);[alpha,b] = trainlssvm({train_Input',train_Output',type,gamma,sig2,'RBF_kernel'});predict = simlssvm({train_Input',train_Output',type,gamma,sig2,'RBF_kernel'},{alpha,b},test_Input');fit = sqrt(sum((predict-test_Output').^2)/size(test_Output',1));if fit<fitness(i,:)fitness(i,:) = fit;lbest(i,:) = param(i,:);endif fit<fitnessbestgbest = param(i,:);fitnessbest = fit;endendMSE(T,:) = fitnessbest;w = w - (w-0.4)*T/k;endgamma = gbest(1,1);sig2 = gbest(1,2);disp(['best gamma = ',num2str(gamma),' best sig2 = ',num2str(sig2)])[alpha,b] = trainlssvm({train_Input',train_Output',type,gamma,sig2,'RBF_kernel'});predict_test = simlssvm({train_Input',train_Output',type,gamma,sig2,'RBF_kernel'},{alpha,b},test_Input');RMSE = sqrt(sum((predict_test-test_Output').^2)/size(test_Output',1));disp(['RMSE = ',num2str(RMSE)]);figure(1)plot(predict_test,'-b')hold onplot(test_Output,'--r')end

然后进行预测predict.m

clc;clear all;n = 2; % n 是自变量的个数m = 1; % m 是因变量的个数%% 读取训练数据train_num = 20; %训练样本数train_Data = data(1:train_num,:);% 特征值归一化[train_Input,minI,maxI] = premnmx(train_Data(:,1:n)');% 构造输出矩阵[train_Output,minO,maxO] = premnmx(train_Data(:,n+1:end)');gam = 16.6576;sig2 = 0.56056;type = 'function estimation';tic; %计时开始% 用trainlssvm()函数对训练数据进行训练[alpha,b] = trainlssvm({train_Input',train_Output',type,gam,sig2,'RBF_kernel'});SVMtrain_Output = simlssvm({train_Input',train_Output',type,gam,sig2,'RBF_kernel','preprocess'},{alpha,b},train_Input');toc; %计时结束train_Output = postmnmx(train_Output',minO,maxO);SVMtrain_Output = postmnmx(SVMtrain_Output',minO,maxO);% 训练数据误差train_err = train_Output - SVMtrain_Output';n1 = length(SVMtrain_Output);train_RMSE = sqrt(sum((train_err).^2)/n1);%% 读取测试数据test_Data = data(train_num+1:end,:);% 特征值归一化test_Input = tramnmx(test_Data(:,1:n)',minI,maxI)';% 构造测试输出矩阵test_Output = tramnmx(test_Data(:,n+1:end)',minO,maxO)';SVMtest_Output = simlssvm({train_Input',train_Output,type,gam,sig2,'RBF_kernel','preprocess'},{alpha,b},test_Input);test_Output = postmnmx(test_Output,minO,maxO);SVMtest_Output = postmnmx(SVMtest_Output',minO,maxO);% 测试数据误差test_err = test_Output - SVMtest_Output';n2 = length(SVMtest_Output');test_RMSE = sqrt(sum((test_err).^2)/n2);%% 预测结果可视化figure(6); % 绘制图1%subplot(2,1,1); % 图1包含2行1列个子图形,首先绘制子图1plot(SVMtest_Output,':og'); % 用绿色的o绘制测试数据的预测输出值hold on;plot(test_Output','-*b'); % 用蓝色的*绘制测试数据的期望输出值legend('预测输出','期望输出'); % 子图1的注释title('最小二乘支持向量机预测天然气结果','fontsize',12) %子图1的标题%plotlssvm({train_Input',train_Output,type,gam,sig2,'RBF_kernel','preprocess'},{alpha,b});

如果觉得《基于粒子群优化算法的最小二乘支持向量机预测模型构建(MATLAB实现)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。