【PNN分類】基于麻雀算法優(yōu)化pnn神經(jīng)網(wǎng)絡實現(xiàn)數(shù)據(jù)分類附matlab代碼
1 簡介
概率神經(jīng)網(wǎng)絡(Probabilistic Neural Network,簡稱PNN)是利用貝葉斯定理和基于風險最小的貝葉斯決策規(guī)則對新樣本進行分類的神經(jīng)網(wǎng)絡,具有訓練時間短且不易收斂到局部極值的優(yōu)點,但是傳統(tǒng)PNN采用相同平滑系數(shù)容易導致識別率低和誤分類的問題,其次平滑系數(shù)對分類結果影響巨大并且難以確定,模式層神經(jīng)元數(shù)目由訓練樣本數(shù)目確定,當訓練樣本集規(guī)模巨大時,導致網(wǎng)絡結構復雜。本文麻雀算法選擇PNN網(wǎng)絡的平滑系數(shù)向量并優(yōu)化PNN的網(wǎng)絡結構.
2 部分代碼
function [fMin , bestX, Convergence_curve] = SSA(X, N, M, c, d, dim, fobj)
P_percent = 0.2; ? ?% 發(fā)現(xiàn)者的種群規(guī)模占總種群規(guī)模的百分比
pNum = round(N*P_percent); ? ?% 發(fā)現(xiàn)者數(shù)量20%
SD = pNum/2; ? ? ?% 警戒者數(shù)量10%
ST = 0.8; ? ? ? ? ? % 安全閾值
lb = c.*ones(1, dim); ? ? % 下限
ub = d.*ones(1,dim); ? ?% 上限
% 初始化
for i = 1:N
% ? ? X(i, :) = lb + (ub - lb) .* rand(1, dim);
? ?fitness(i) = fobj(X(i, :));
end
pFit = fitness;
pX = X; ? ? ? ? ? ? ? ? ? ? ? ? ? ?% 與pFit相對應的個體最佳位置
[fMin, bestI] = min(fitness); ? ? ?% fMin表示全局最優(yōu)解
bestX = X(bestI, :); ? ? ? ? ? ? % bestX表示全局最優(yōu)位置
%% 迭代尋優(yōu)
for t = 1 : M ? ? ?
? ?[~, sortIndex] = sort(pFit); ? ? ? ? ? ?% 排序
? ?[fmax, B] = max(pFit);
? ?worst = X(B, :);
? ?%% 發(fā)現(xiàn)者位置更新
? ?r2 = rand(1);
? ?if r2 < ST
? ? ? ?for i = 1:pNum ? ? ?% Equation (3)
? ? ? ? ? ?r1 = rand(1);
? ? ? ? ? ?X(sortIndex(i), :) = pX(sortIndex(i), :)*exp(-(i)/(r1*M));
? ? ? ? ? ?X(sortIndex(i), :) = Bounds(X(sortIndex(i), :), lb, ub);
? ? ? ? ? ?fitness(sortIndex(i)) = fobj(X(sortIndex(i), :));
? ? ? ?end
? ?else
? ? ? ?for i = 1:pNum
? ? ? ? ? ?X(sortIndex(i), :) = pX(sortIndex(i), :)+randn(1)*ones(1, dim);
? ? ? ? ? ?X(sortIndex(i), :) = Bounds(X(sortIndex(i), :), lb, ub);
? ? ? ? ? ?fitness(sortIndex(i)) = fobj(X(sortIndex(i), :));
? ? ? ?end
? ?end
? ?[~, bestII] = min(fitness);
? ?bestXX = X(bestII, :);
? ?%% 跟隨者位置更新
? ?for i = (pNum+1):N ? ? ? ? ? ? ? ? ? ? % Equation (4)
? ? ? ?A = floor(rand(1, dim)*2)*2-1;
? ? ? ?if i > N/2
? ? ? ? ? ?X(sortIndex(i), :) = randn(1)*exp((worst-pX(sortIndex(i), :))/(i)^2);
? ? ? ?else
? ? ? ? ? ?X(sortIndex(i), :) = bestXX+(abs((pX(sortIndex(i), :)-bestXX)))*(A'*(A*A')^(-1))*ones(1, dim);
? ? ? ?end
? ? ? ?X(sortIndex(i), :) = Bounds(X(sortIndex(i), :), lb, ub);
? ? ? ?fitness(sortIndex(i)) = fobj(X(sortIndex(i), :));
? ?end
? ?%% 警戒者位置更新
? ?c = randperm(numel(sortIndex));
? ?b = sortIndex(c(1:SD));
? ?for j = 1:length(b) ? ? ?% Equation (5)
? ? ? ?if pFit(sortIndex(b(j))) > fMin
? ? ? ? ? ?X(sortIndex(b(j)), :) = bestX+(randn(1, dim)).*(abs((pX(sortIndex(b(j)), :) -bestX)));
? ? ? ?else
? ? ? ? ? ?X(sortIndex(b(j)), :) = pX(sortIndex(b(j)), :)+(2*rand(1)-1)*(abs(pX(sortIndex(b(j)), :)-worst))/(pFit(sortIndex(b(j)))-fmax+1e-50);
? ? ? ?end
? ? ? ?X(sortIndex(b(j)), :) = Bounds(X(sortIndex(b(j)), :), lb, ub);
? ? ? ?fitness(sortIndex(b(j))) = fobj(X(sortIndex(b(j)), :));
? ?end
? ?for i = 1:N
? ? ? ?% 更新個體最優(yōu)
? ? ? ?if fitness(i) < pFit(i)
? ? ? ? ? ?pFit(i) = fitness(i);
? ? ? ? ? ?pX(i, :) = X(i, :);
? ? ? ?end
? ? ? ?% 更新全局最優(yōu)
? ? ? ?if pFit(i) < fMin
? ? ? ? ? ?fMin = pFit(i);
? ? ? ? ? ?bestX = pX(i, :);
? ? ? ?end
? ?end
? ?Convergence_curve(t) = fMin;
? ?disp(['SSA: At iteration ', num2str(t), ' ,the best fitness is ', num2str(fMin)]);
end
%% 邊界處理
function s = Bounds(s, Lb, Ub)
% 下界
temp = s;
I = temp < Lb;
temp(I) = Lb(I);
% 上界
J = temp > Ub;
temp(J) = Ub(J);
% 更新
s = temp;
3 仿真結果


4 參考文獻
[1]李海洋, 范文義. 基于概率神經(jīng)網(wǎng)絡的遙感圖像分類MATLAB實現(xiàn)[J]. 東北林業(yè)大學學報, 2008, 36(06).
博主簡介:擅長智能優(yōu)化算法、神經(jīng)網(wǎng)絡預測、信號處理、元胞自動機、圖像處理、路徑規(guī)劃、無人機等多種領域的Matlab仿真,相關matlab代碼問題可私信交流。
部分理論引用網(wǎng)絡文獻,若有侵權聯(lián)系博主刪除。
