時系列予測 | MATLAB は PSO-LSSVM 粒子群アルゴリズムの最適化を実装、最小二乗サポート ベクター マシンの時系列予測将来
目次
予測効果
基本的な紹介
1. Matlab は、将来を予測する PSO-LSSVM 時系列を実装しています (粒子群最適化最小二乗サポート ベクター マシン、RBF カーネル関数の gam と sig を最適化); 2. 動作環境は Matlab2018 以降であり、データはデータ セットであり
、単変量時系列予測、メインプログラム PSO_LSSVMTSF を実行するだけで、残りは関数ファイルなので実行する必要はありません; 3.
将来のデータを再帰的に予測し、予測される将来のサイズの数を制御でき、周期的および定期的なデータ予測に適しています;
4 . コマンド ウィンドウ出力 R2、MAE、MAPE、MBE、MSE およびその他の評価指標。
モデルの説明
LSSVM パラメータの最適化問題には、決定的な方法や一般的に合意された方法はありません。予測モデルパラメータの選択と決定におけるインテリジェントアルゴリズムの堅牢性と多用途性により、遺伝的アルゴリズム、ショウジョウバエ最適化アルゴリズム、ホタルアルゴリズム、粒子群最適化アルゴリズム(PSO)、およびグリッド探索アルゴリズムが主に最適化プロセスで使用されます。予測モデルパラメータ、ニューラルネットワークおよびその他のインテリジェントアルゴリズム。粒子群最適化アルゴリズムは、粒子群最適化アルゴリズム自体と集団の最適な位置との関係を常に調整し、より強力な最適化機能を備えています。したがって、信頼性の高いモデルパラメータをさらに取得するために、粒子群最適化アルゴリズムを試用検証に使用できます。
プログラミング
- 完全なプログラムとデータのダウンロード方法 プライベート メッセージ ブロガーの返信: MATLAB は、将来を予測するために最小二乗サポート ベクター マシン時系列を最適化する PSO-LSSVM 粒子群最適化アルゴリズムを実装しています。
%% 参数设置
pop = 5; % 种群数目
Max_iter = 50; % 迭代次数
dim = 2; % 优化参数个数
lb = [10, 10]; % 下限
ub = [1000, 1000]; % 上限
%% 优化函数
fobj = @(x)fitnessfunclssvm(x, p_train, t_train);
%% 优化
[Best_pos, Best_score, curve] = PSO(pop, Max_iter, lb, ub, dim, fobj);
%% LSSVM参数设置
type = 'f'; % 模型类型 回归
kernel = 'RBF_kernel'; % RBF 核函数
proprecess = 'preprocess'; % 是否归一化
%% 建立模型
gam = Best_score(1);
sig = Best_score(2);
model = initlssvm(p_train, t_train, type, gam, sig, kernel, proprecess);
%% 训练模型
model = trainlssvm(model);
%% 模型预测
t_sim1 = simlssvm(model, p_train);
t_sim2 = simlssvm(model, p_test);
%% 数据反归一化
T_sim1 = mapminmax('reverse', t_sim1, ps_output);
T_sim2 = mapminmax('reverse', t_sim2, ps_output);
%% 定义粒子群算法参数
% N 种群 T 迭代次数
%% 随机初始化种群
D=dim; %粒子维数
c1=1.5; %学习因子1
c2=1.5; %学习因子2
w=0.8; %惯性权重
Xmax=ub; %位置最大值
Xmin=lb; %位置最小值
Vmax=ub; %速度最大值
Vmin=lb; %速度最小值
%%
%%%%%%%%%%%%%%%%初始化种群个体(限定位置和速度)%%%%%%%%%%%%%%%%
x=rand(N,D).*(Xmax-Xmin)+Xmin;
v=rand(N,D).*(Vmax-Vmin)+Vmin;
%%%%%%%%%%%%%%%%%%初始化个体最优位置和最优值%%%%%%%%%%%%%%%%%%%
p=x;
pbest=ones(N,1);
for i=1:N
pbest(i)=fobj(x(i,:));
end
%%%%%%%%%%%%%%%%%%%初始化全局最优位置和最优值%%%%%%%%%%%%%%%%%%
g=ones(1,D);
gbest=inf;
for i=1:N
if(pbest(i)<gbest)
g=p(i,:);
gbest=pbest(i);
end
end
%%%%%%%%%%%按照公式依次迭代直到满足精度或者迭代次数%%%%%%%%%%%%%
for i=1:T
i
for j=1:N
%%%%%%%%%%%%%%更新个体最优位置和最优值%%%%%%%%%%%%%%%%%
if (fobj(x(j,:))) <pbest(j)
p(j,:)=x(j,:);
pbest(j)=fobj(x(j,:));
end
%%%%%%%%%%%%%%%%更新全局最优位置和最优值%%%%%%%%%%%%%%%
if(pbest(j)<gbest)
g=p(j,:);
gbest=pbest(j);
end
%%%%%%%%%%%%%%%%%跟新位置和速度值%%%%%%%%%%%%%%%%%%%%%
v(j,:)=w*v(j,:)+c1*rand*(p(j,:)-x(j,:))...
+c2*rand*(g-x(j,:));
x(j,:)=x(j,:)+v(j,:);
%%%%%%%%%%%%%%%%%%%%边界条件处理%%%%%%%%%%%%%%%%%%%%%%
if length(Vmax)==1
for ii=1:D
if (v(j,ii)>Vmax) | (v(j,ii)< Vmin)
v(j,ii)=rand * (Vmax-Vmin)+Vmin;
end
if (x(j,ii)>Xmax) | (x(j,ii)< Xmin)
x(j,ii)=rand * (Xmax-Xmin)+Xmin;
end
end
else
for ii=1:D
if (v(j,ii)>Vmax(ii)) | (v(j,ii)< Vmin(ii))
v(j,ii)=rand * (Vmax(ii)-Vmin(ii))+Vmin(ii);
end
if (x(j,ii)>Xmax(ii)) | (x(j,ii)< Xmin(ii))
x(j,ii)=rand * (Xmax(ii)-Xmin(ii))+Xmin(ii);
end
end
end
end
%%%%%%%%%%%%%%%%%%%%记录历代全局最优值%%%%%%%%%%%%%%%%%%%%%
Convergence_curve(i)=gbest;%记录训练集的适应度值
参考文献
[1] https://blog.csdn.net/article/details/126072792?spm=1001.2014.3001.5502
[2] https://blog.csdn.net/article/details/126044265?spm=1001.2014.3001.5502