RBF、GRNN 和 PNN 神經網絡在Matlab中的用法


一、RBF神經網絡

  1. RBF神經網絡概述
    • 徑向基函數神經網絡
    • 與 BP 神經網絡的區別在於訓練過程——其參數初始化具有一定方法,並非隨機,隱含層的末尾使用了徑向基函數,它的輸出經過加權和得到 L W 2.1

這里寫圖片描述

  1. RBF神經網絡重點函數介紹

    • newrbe()——創建精確的徑向基網絡
      • net = newrbe(P , T , Spread)
      • P: 輸入向量
      • T:輸出向量
      • Spread:徑向基的擴展速度
  2. RBF代碼使用實例

%% I. 清空環境變量
clear all
clc

%% II. 訓練集/測試集產生
%%
% 1. 導入數據
load spectra_data.mat

%%
% 2. 隨機產生訓練集和測試集
temp = randperm(size(NIR,1));
% 訓練集——50個樣本
P_train = NIR(temp(1:50),:)’;
T_train = octane(temp(1:50),:)’;
% 測試集——10個樣本
P_test = NIR(temp(51:end),:)’;
T_test = octane(temp(51:end),:)’;
N = size(P_test,2);

%% III. RBF神經網絡創建及仿真測試
%%
% 1. 創建網絡
net = newrbe(P_train,T_train,30);

%%
% 2. 仿真測試
T_sim = sim(net,P_test);

%% IV. 性能評價
%%
% 1. 相對誤差error
error = abs(T_sim - T_test)./T_test;

%%
% 2. 決定系數R^2
R2 = (N * sum(T_sim .* T_test) - sum(T_sim) * sum(T_test))^2 / ((N * sum((T_sim).^2) - (sum(T_sim))^2) * (N * sum((T_test).^2) - (sum(T_test))^2));

%%
% 3. 結果對比
result = [T_test’ T_sim’ error’]

%% V. 繪圖
figure
plot(1:N,T_test,’b:*’,1:N,T_sim,’r-o’)
legend(‘真實值’,’預測值’)
xlabel(‘預測樣本’)
ylabel(‘辛烷值’)
string = {‘測試集辛烷值含量預測結果對比’;[‘R^2=’ num2str(R2)]};
title(string)

  1. 其余函數描述和問題描述

二、GRNN、PNN神經網絡

  1. GRNN神經網絡概述

    • 廣義回歸神經網絡

    • 輸入層和隱含層與 RBF 神經網絡一致,這里的 L W 2.1 直接由輸出矩陣代替,並在隱含層與輸出層之間和激活函數進行點乘

這里寫圖片描述

  1. PNN神經網絡概述

    • 概率神經網絡

    • 輸入層和隱含層與RBF神經網絡一致,不同點是最后的輸出環節使用了一個競爭函數

這里寫圖片描述

  1. GRNN、PNN神經網絡重點函數介紹

    • newgrnn()——創建廣義回歸神經網絡
      • net = newgrnn(P,T)
      • P,T 和RBF神經網絡一致
    • newpnn()——創建概率神經網絡
      • net = newpnn(P,T)
      • P,T 同上
  2. 代碼使用實例

%% I. 清空環境變量
clear all
clc

%% II. 訓練集/測試集產生
%%
% 1. 導入數據
load iris_data.mat

%%
% 2 隨機產生訓練集和測試集
P_train = [];
T_train = [];
P_test = [];
T_test = [];
for i = 1:3
temp_input = features((i-1)*50+1:i*50,:);
temp_output = classes((i-1)*50+1:i*50,:);
n = randperm(50);
% 訓練集——120個樣本
P_train = [P_train temp_input(n(1:40),:)’];
T_train = [T_train temp_output(n(1:40),:)’];
% 測試集——30個樣本
P_test = [P_test temp_input(n(41:50),:)’];
T_test = [T_test temp_output(n(41:50),:)’];
end

%% III. 模型建立
result_grnn = [];
result_pnn = [];
time_grnn = [];
time_pnn = [];
for i = 1:4
for j = i:4
p_train = P_train(i:j,:);
p_test = P_test(i:j,:);
%%
% 1. GRNN創建及仿真測試
t = cputime;
% 創建網絡
net_grnn = newgrnn(p_train,T_train);
% 仿真測試
t_sim_grnn = sim(net_grnn,p_test);
T_sim_grnn = round(t_sim_grnn);
t = cputime - t;
time_grnn = [time_grnn t];
result_grnn = [result_grnn T_sim_grnn’];
%%
% 2. PNN創建及仿真測試
t = cputime;
Tc_train = ind2vec(T_train);
% 創建網絡
net_pnn = newpnn(p_train,Tc_train);
% 仿真測試
Tc_test = ind2vec(T_test);
t_sim_pnn = sim(net_pnn,p_test);
T_sim_pnn = vec2ind(t_sim_pnn);
t = cputime - t;
time_pnn = [time_pnn t];
result_pnn = [result_pnn T_sim_pnn’];
end
end

%% IV. 性能評價
%%
% 1. 正確率accuracy
accuracy_grnn = [];
accuracy_pnn = [];
time = [];
for i = 1:10
accuracy_1 = length(find(result_grnn(:,i) == T_test’))/length(T_test);
accuracy_2 = length(find(result_pnn(:,i) == T_test’))/length(T_test);
accuracy_grnn = [accuracy_grnn accuracy_1];
accuracy_pnn = [accuracy_pnn accuracy_2];
end

%%
% 2. 結果對比
result = [T_test’ result_grnn result_pnn]
accuracy = [accuracy_grnn;accuracy_pnn]
time = [time_grnn;time_pnn]

%% V. 繪圖
figure(1)
plot(1:30,T_test,’bo’,1:30,result_grnn(:,4),’r-*’,1:30,result_pnn(:,4),’k:^’)
grid on
xlabel(‘測試集樣本編號’)
ylabel(‘測試集樣本類別’)
string = {‘測試集預測結果對比(GRNN vs PNN)’;[‘正確率:’ num2str(accuracy_grnn(4)*100) ‘%(GRNN) vs ’ num2str(accuracy_pnn(4)*100) ‘%(PNN)’]};
title(string)
legend(‘真實值’,’GRNN預測值’,’PNN預測值’)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM