生活随笔
收集整理的這篇文章主要介紹了
MATLAB机器学习系列-5 RBF、GRNN和PNN神经网络原理及其例子代码
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
RBF(徑向基神經(jīng)網(wǎng)絡(luò))
GRNN廣義神經(jīng)網(wǎng)絡(luò)
PNN概率神經(jīng)網(wǎng)絡(luò)
RBF算例實(shí)現(xiàn)(回歸)
數(shù)據(jù)集
% 1. 導(dǎo)入數(shù)據(jù)
load spectra_data.mat
NIR輸入,octane輸出
%% I
. 清空環(huán)境變量
clear
all
clc
%% II
. 訓(xùn)練集
/測(cè)試集產(chǎn)生
%%
% 1. 導(dǎo)入數(shù)據(jù)
load spectra_data
.mat
%%
% 2. 隨機(jī)產(chǎn)生訓(xùn)練集和測(cè)試集
temp
= randperm
(size
(NIR
,1));
% 訓(xùn)練集——
50個(gè)樣本
P_train
= NIR
(temp
(1:50),:)'
;
T_train
= octane
(temp
(1:50),:)'
;
% 測(cè)試集——
10個(gè)樣本
P_test
= NIR
(temp
(51:end
),:)'
;
T_test
= octane
(temp
(51:end
),:)'
;
N
= size
(P_test
,2);%% III
. RBF神經(jīng)網(wǎng)絡(luò)創(chuàng)建及仿真測(cè)試
%%
% 1. 創(chuàng)建網(wǎng)絡(luò)
net
= newrbe
(P_train
,T_train
,30);%30為speend
%%
% 2. 仿真測(cè)試
T_sim
= sim
(net
,P_test
);%% IV
. 性能評(píng)價(jià)
%%
% 1. 相對(duì)誤差error
error
= abs(T_sim
- T_test
)./T_test
;%%
% 2. 決定系數(shù)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. 結(jié)果對(duì)比
result
= [T_test
' T_sim' error'
]%% V
. 繪圖
figure
plot
(1:N
,T_test
,'b:*',1:N
,T_sim
,'r-o')
legend
('真實(shí)值','預(yù)測(cè)值')
xlabel
('預(yù)測(cè)樣本')
ylabel
('辛烷值')
string
= {'測(cè)試集辛烷值含量預(yù)測(cè)結(jié)果對(duì)比';['R^2=' num2str
(R2
)]};
title
(string
)
GRNN和PNN神經(jīng)網(wǎng)絡(luò)(分類)
數(shù)據(jù)集:經(jīng)典案例鳶尾花分類
feature有4維數(shù)據(jù):花萼長(zhǎng)度,花萼寬度,花瓣長(zhǎng)度,花瓣寬度
classes花的種類
‘setosa’, ‘versicolor’, ‘virginica’
%% I
. 清空環(huán)境變量
clear
all
clc
%% II
. 訓(xùn)練集
/測(cè)試集產(chǎn)生
%%
% 1. 導(dǎo)入數(shù)據(jù)
load iris_data
.mat
%%
% 2 隨機(jī)產(chǎn)生訓(xùn)練集和測(cè)試集
P_train
= [];
T_train
= [];
P_test
= [];
T_test
= [];
for i
= 1:3temp_input
= features
((i
-1)*50+1:i
*50,:);temp_output
= classes
((i
-1)*50+1:i
*50,:);n
= randperm
(50);% 訓(xùn)練集——
120個(gè)樣本P_train
= [P_train temp_input
(n
(1:40),:)'
];T_train
= [T_train temp_output
(n
(1:40),:)'
];% 測(cè)試集——
30個(gè)樣本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:4for j
= i
:4p_train
= P_train
(i
:j
,:);p_test
= P_test
(i
:j
,:);%% % 1. GRNN創(chuàng)建及仿真測(cè)試t
= cputime
;% 創(chuàng)建網(wǎng)絡(luò)net_grnn
= newgrnn
(p_train
,T_train
);% 仿真測(cè)試t_sim_grnn
= sim
(net_grnn
,p_test
);T_sim_grnn
= round(t_sim_grnn
);%取整操作,因?yàn)槭欠诸?#xff0c;目標(biāo)是整數(shù)t
= cputime
- t
;time_grnn
= [time_grnn t
];result_grnn
= [result_grnn T_sim_grnn'
];%%% 2. PNN創(chuàng)建及仿真測(cè)試t
= cputime
;Tc_train
= ind2vec
(T_train
);% 創(chuàng)建網(wǎng)絡(luò)net_pnn
= newpnn
(p_train
,Tc_train
);% 仿真測(cè)試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
. 性能評(píng)價(jià)
%%
% 1. 正確率accuracy
accuracy_grnn
= [];
accuracy_pnn
= [];
time
= [];
for i
= 1:10accuracy_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. 結(jié)果對(duì)比
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
('測(cè)試集樣本編號(hào)')
ylabel
('測(cè)試集樣本類別')
string
= {'測(cè)試集預(yù)測(cè)結(jié)果對(duì)比(GRNN vs PNN)';['正確率:' num2str
(accuracy_grnn
(4)*100) '%(GRNN) vs ' num2str
(accuracy_pnn
(4)*100) '%(PNN)']};
title
(string
)
legend
('真實(shí)值','GRNN預(yù)測(cè)值','PNN預(yù)測(cè)值')
figure
(2)
plot
(1:10,accuracy
(1,:),'r-*',1:10,accuracy
(2,:),'b:o')
grid on
xlabel
('模型編號(hào)')
ylabel
('測(cè)試集正確率')
title
('10個(gè)模型的測(cè)試集正確率對(duì)比(GRNN vs PNN)')
legend
('GRNN','PNN')
figure
(3)
plot
(1:10,time
(1,:),'r-*',1:10,time
(2,:),'b:o')
grid on
xlabel
('模型編號(hào)')
ylabel
('運(yùn)行時(shí)間(s)')
title
('10個(gè)模型的運(yùn)行時(shí)間對(duì)比(GRNN vs PNN)')
legend
('GRNN','PNN')
代碼解析:
因?yàn)榛ㄓ腥N,所以需要分段劃分
for i
= 1:3temp_input
= features
((i
-1)*50+1:i
*50,:);temp_output
= classes
((i
-1)*50+1:i
*50,:);n
= randperm
(50);% 訓(xùn)練集——
120個(gè)樣本P_train
= [P_train temp_input
(n
(1:40),:)'
];T_train
= [T_train temp_output
(n
(1:40),:)'
];% 測(cè)試集——
30個(gè)樣本P_test
= [P_test temp_input
(n
(41:50),:)'
];T_test
= [T_test temp_output
(n
(41:50),:)'
];
end
因?yàn)榛ㄓ兴膫€(gè)特征,我們將兩兩特征組合
for i
= 1:4for j
= i
:4p_train
= P_train
(i
:j
,:);p_test
= P_test
(i
:j
,:);
代碼和數(shù)據(jù)百度云
鏈接:https
://pan
.baidu
.com
/s
/1Z1txLCFJ_Iif_skcb57PiQ
提取碼:yn6c
復(fù)制這段內(nèi)容后打開百度網(wǎng)盤手機(jī)App,操作更方便哦
作者:電氣工程計(jì)算機(jī)萌新:余登武
總結(jié)
以上是生活随笔為你收集整理的MATLAB机器学习系列-5 RBF、GRNN和PNN神经网络原理及其例子代码的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。