資源簡介
pso_lssvm回歸預測matlab代碼pso_lssvm回歸預測matlab代碼
代碼片段和文件信息
%%==================清空環境=============
clc
clear
%%導入訓練數據和測試數據
load?data1.mat
%其中train_data?test_data分別為訓練集和測試集
%train_result?test_result為訓練結果和測試結果
%%數據歸一化
%%歸一化方法1(利用libsvm工具箱函數歸一化)
[train_xtest_x]=scaleForSVM(train_datatest_data01)
[train_ytest_ypstrain1]=scaleForSVM(train_resulttest_result01)
%%歸一化方法2(利用svm自帶mapminmax函數歸一化)
%[train_data?pstrain0]?=?mapminmax(train‘01);
%[test_data]?=?mapminmax(‘apply‘test‘pstrain0);
%[train_resultpstrain1]?=?mapminmax(train_out01);
%[test_result]?=?mapminmax(‘apply‘test_outpstrain1);
%train_data?=?train_data‘
%train_result=train_result‘
%test_data?=?test_data‘
%%?參數初始化
%粒子群算法中的兩個參數
c1?=?1.5;?%?c1?belongs?to?[02]?c1:初始為1.5pso參數局部搜索能力
c2?=?1.5;?%?c2?belongs?to?[02]?c2:初始為1.7pso參數全局搜索能力
maxgen=300;?%?進化次數?
sizepop=30;?%?種群規模
popcmax=10^(3);?%?popcmax:初始為1000SVM?參數c的變化的最大值.
popcmin=10^(-1);?%?popcmin:初始為0.1SVM?參數c的變化的最小值.
popgmax=10^(2);?%?popgmax:初始為1000SVM?參數g的變化的最大值
popgmin=10^(-1);?%?popgmin:初始為0.01SVM?參數c的變化的最小值.
k?=?0.5;?%?k?belongs?to?[0.11.0];
Vcmax?=?k*popcmax;%參數?c?迭代速度最大值
Vcmin?=?-Vcmax?;
Vgmax?=?k*popgmax;%參數?g?迭代速度最大值
Vgmin?=?-Vgmax?;?
eps?=?10^(-7);
%%定義lssvm相關參數
type?=?‘function?estimation‘;?
kernel?=?‘RBF_kernel‘;
proprecess=‘original‘
%%?產生初始粒子和速度
for?i=1:sizepop
%?隨機產生種群
pop(i1)?=?(popcmax-popcmin)*rand(11)+popcmin?;?%?初始種群
pop(i2)?=?(popgmax-popgmin)*rand(11)+popgmin;
V(i1)=Vcmax*rands(11);?%?初始化速度
V(i2)=Vgmax*rands(11);
%?計算初始適應度
gam?=?pop(i1)
sig2?=?pop(i2)
model=initlssvm(train_xtrain_ytypegamsig2kernelproprecess)
model=trainlssvm(model)?%?訓練svm模型
%求出訓練集和測試集的預測值
[ptrainztmodel]=simlssvm(modeltrain_x);
%預測數據反歸一化
%?train_predict=mapminmax(‘reverse‘train_predict_ypstrain1)%訓練集預測值
%計算均方差
trainmse=sum((ptrain-train_y).^2)/length(train_y)
fitness(i)=trainmse%以訓練集的預測值計算的均方差為適應度值
end
%?找極值和極值點
[global_fitness?bestindex]=min(fitness)?%?全局極值
local_fitness=fitness?%?個體極值初始化?
global_x=pop(bestindex:)?%?全局極值點
local_x=pop?%?個體極值點初始化
%?每一代種群的平均適應度
avgfitness_gen?=?zeros(1maxgen);
tic
%%?迭代尋優
for?i=1:maxgen
for?j=1:sizepop
%速度更新
wV?=?1;?%?wV?best?belongs?to?[0.81.2]為速率更新公式中速度前面的彈性系數
V(j:)?=?wV*V(j:)?+?c1*rand*(local_x(j:)?-?pop(j:))?+?c2*rand*(global_x?-?pop(j:));
if?V(j1)?>?Vcmax?%以下幾個不等式是為了限定速度在最大最小之間
V(j1)?=?Vcmax;
end
if?V(j1)?V(j1)?=?Vcmin;
end
if?V(j2)?>?Vgmax
V(j2)?=
評論
共有 條評論