|
以前寫的改進(jìn)pso算法,附件包含源代碼
MATLAB源程序如下:
- %% No-dealing LOO RBF
- % 程序運行完以后,觀察一下數(shù)據(jù)
- %QPSO輸出
- % Validation_err(curCount,Swarmsize) %每一代每一個粒子的驗證數(shù)據(jù)錯誤率
- % Test_err(curCount,Swarmsize) %每一代每一個粒子的測試數(shù)據(jù)錯誤率(有可能比驗證集。
- % Position{curCount,Swarmsize} %每一代每一個粒子的位置,即所尋找的參數(shù)
- % BestFitness(curCount,:)=gbest; %每一代得到的驗證集全局最小誤差,即適應(yīng)度函數(shù)的迭代指標(biāo),越小越好
- % BestPosition(curCount,:)=Pg; %每一代得到的對應(yīng)驗證集全局最小誤差的最優(yōu)參數(shù)
- % BestFitness2(curCount,:)=gbest2; %每一代得到的驗證集取得全局最小誤差所對應(yīng)的最優(yōu)參數(shù)取得的測試集誤差(不一定最。
- % Bestlabel1(curCount,:)=z1_best; %每一代得到的驗證集全局最小誤差的預(yù)測標(biāo)簽
- % Bestlabel2(curCount,:)=z2_best; %每一代得到的驗證集取得全局最小誤差所對應(yīng)的最優(yōu)參數(shù)取得的測試集誤差的預(yù)測標(biāo)簽
- % best_position=Pg; %迭代完成以后驗證集取得最小誤差所對應(yīng)的最優(yōu)參數(shù)值
- % best_accuracy=1-gbest; %迭代完成以后驗證集取得是識別率最大值
- % best_accuracy2=1-gbest2; %迭代完成以后驗證集取得最大識別率對應(yīng)的最優(yōu)參數(shù)取得的測試集識別率
- % best_validation_lable=z1_best; %迭代完成以后驗證集取得最大識別率的預(yù)測標(biāo)簽
- % best_test_lable=z2_best; %迭代完成以后驗證集取得最大識別率對應(yīng)的最優(yōu)參數(shù)取得的測試集識別率的預(yù)測標(biāo)簽
- %用最優(yōu)參數(shù)模型對驗證集和測試機(jī)進(jìn)行識別輸出
- % V_label %QPSO輸出最優(yōu)參數(shù)對應(yīng)的驗證集最大識別率的預(yù)測標(biāo)簽和驗證集原始標(biāo)簽,第二列等于best_validation_lable=z1_best
- % T_label %QPSO輸出最優(yōu)參數(shù)對應(yīng)的測試集識別率的預(yù)測標(biāo)簽和測試集原始標(biāo)簽,第二列等于best_test_lable=z2_best
- % accuracy %QPSO輸出最優(yōu)參數(shù)對應(yīng)的驗證集識別率等于best_accuracy=1-gbest
- % accuracy2 %QPSO輸出最優(yōu)參數(shù)對應(yīng)的測試集識別率等于best_accuracy2=1-gbest2
- %% 載入數(shù)據(jù)
- clear
- global X
- X=[];
- load wound_data_max
- % %% 歸一化
- % X1=mapminmax(wound_data_max',0,1); %要進(jìn)行一次轉(zhuǎn)置,這樣的歸一化是對列(也就是每個傳感器響應(yīng)曲線)的歸一化,也有的是對每一次采樣得到的數(shù)據(jù)進(jìn)行歸一化。
- % X1=X1';
- X=wound_data_max;
- %%
- Swarmsize=20; %種群規(guī)模
- particlesize=2; %待優(yōu)化的參數(shù)個數(shù)
- LoopCount=200; %迭代次數(shù)
- W=rand(Swarmsize,particlesize);
-
- tic %計時開始
- for i=1:Swarmsize
- lbest(i)=inf;
- end % the values of local fitness
- gbest=inf; % the valuse of global fitness
- Pl=W; % storgae W value to P, the best local eight values
- Pg=W(1,:); % the best adaptation weight values (mininum mean square error)
- %% The starting of Particle Swarm Optimization Algorithm
- for curCount=1:LoopCount
-
- %calculate the adapting value
- for i=1:Swarmsize
- [err,y,z]= fit_sqpso_m_rbf_LOO_2(W(i,:)); %對應(yīng)的要優(yōu)化的函數(shù)的名稱,本論文中對應(yīng)的就是fit_sqpso_fda_m_svm,fit_sqpso_kfda_m_svm等六個函數(shù)。
- %err是錯誤率
- %a是矩陣,包含兩列第一列是給出的標(biāo)簽類別信息,第二列是分類器預(yù)測出的標(biāo)簽類別信息
-
- Validation_err(curCount,i)=err; %每一次迭代每一個粒子的留一法錯誤率
- Position{curCount,i}=W(i,:); %每一次迭代每一個粒子的位置,即所尋找的參數(shù)
-
- J(i)=err; %驗證集錯誤率
- zz1(i,:)=y; %第i個粒子時80個樣本的實際標(biāo)簽
- zz2(i,:)=z; %第i個粒子時80個樣本的預(yù)測標(biāo)簽
-
- if lbest(i)>J(i)
- lbest(i)=J(i); %每個粒子到目前為止的最優(yōu)值
- Pl(i,:)=W(i,:); %Updated local optimal
- end
- end
- % Search global optimal weight
- [fitness, index]=sort(J); % arrange in order of size from mininum to maxinum
- if gbest>fitness(1)
- gbest=fitness(1); %到目前為止的全局最優(yōu)值
- Pg=W(index(1),:); %到目前為止的取得全局最優(yōu)值的最優(yōu)參數(shù)
- z1_best=zz1(index(1),:); %到目前為止的全局最優(yōu)值對應(yīng)的80個樣本實際標(biāo)簽
- z2_best=zz2(index(1),:); %到目前為止的全局最優(yōu)值對應(yīng)的80個樣本預(yù)測標(biāo)簽
- end
-
- BestFitness(curCount,:)=gbest; %每一次迭代得到的全局最小誤差,即每一代中適應(yīng)度函數(shù)值最小的一個
- BestPosition(curCount,:)=Pg; %每一次迭代得到的對應(yīng)全局最小誤差的最優(yōu)參數(shù)
- Bestlabel1(curCount,:)=z1_best; %每一次迭代得到的80個樣本實際標(biāo)簽
- Bestlabel2(curCount,:)=z2_best; %每一次迭代得到的80個樣本預(yù)測標(biāo)簽
- %save('gbest.txt','gbest','Pg','z1_best','z2_best','-ascii','-double')
- % Expressions of updated location and speed
- for i=1:particlesize
- P=0;
- for j=1:Swarmsize
- P=P+Pl(j,i);
- end
- Mbest(i)=P/Swarmsize;
- end
- % Updated particle locations
- beta=0.5+0.5*(LoopCount-curCount)/LoopCount;
- for i=1:Swarmsize
- for j=1:particlesize
- fai1=rand;
- fai2=rand;
- % p=(fai1*Pl(i,j)+fai2*Pg(j))/(fai1+fai2);
- p=fai1*Pl(i,j)+(1-fai2)*Pg(j);
- u=rand;
- if u>0.5
- W(i,j)=p+beta*abs(Mbest(j)-W(i,j))*log(1/u);
- else
- W(i,j)=p-beta*abs(Mbest(j)-W(i,j))*log(1/u);
- end
- end
- end
- if curCount==LoopCount
- best_position=Pg; %最優(yōu)參數(shù)值
- best_accuracy=1-gbest; %全局最大值
- best_actual_lable=z1_best;
- best_test_lable=z2_best;
- % disp('times of iteration is not enough');
- end
- end
- %best_fitness=BestFitness(curCount); %適應(yīng)度函數(shù)最小取值
- % plot( BestFitness,'o') %通過曲線顯示整個過程fitness函數(shù)的走勢
- % load train;y1=[y;y;y];Fs=5000;wavplay(y1,Fs); %起到提醒的作用,表示程序已經(jīng)運行完畢
- t=toc; %計時結(jié)束并且將時間值返回給t
- save workspace_qpso_m_rbf_LOO(2)
復(fù)制代碼
所有資料51hei提供下載:
PSO.zip
(25.99 KB, 下載次數(shù): 13)
2019-3-12 19:06 上傳
點擊文件名下載附件
|
|