分類預測 | Matlab實現CPO-PNN冠豪豬算法優化概率神經網絡多特征分類預測
目錄
- 分類預測 | Matlab實現CPO-PNN冠豪豬算法優化概率神經網絡多特征分類預測
- 分類效果
- 基本介紹
- 程序設計
分類效果
基本介紹
1.Matlab實現CPO-PNN冠豪豬算法優化概率神經網絡多特征分類預測,運行環境Matlab2018b及以上;
2.輸入12個特征,輸出分4類,可視化展示分類準確率,可在下載區獲取數據和程序內容;
3.優化參數為PNN的散布值;
4.data為數據集,main為主程序,分類效果如下:
注:程序和數據放在一個文件夾。
程序設計
- 私信回復Matlab實現CPO-PNN冠豪豬算法優化概率神經網絡多特征分類預測
%% 基于冠豪豬優化算法-概率神經網絡(CPO-PNN)的多分類代碼
%% 清空環境變量
warning off % 關閉報警信息
close all % 關閉開啟的圖窗
clear % 清空變量
clc % 清空命令行%% 讀取數據
res = xlsread('data.xlsx');%% 分析數據
num_class = length(unique(res(:, end))); % 類別數(Excel最后一列放類別)
num_res = size(res, 1); % 樣本數(每一行,是一個樣本)
num_size = 0.7; % 訓練集占數據集的比例
res = res(randperm(num_res), :); % 打亂數據集(不打亂數據時,注釋該行)
flag_conusion = 1; % 標志位為1,打開混淆矩陣(要求2018版本及以上)%% 設置變量存儲數據
P_train = []; P_test = [];
T_train = []; T_test = [];%% 劃分數據集
for i = 1 : num_classmid_res = res((res(:, end) == i), :); % 循環取出不同類別的樣本mid_size = size(mid_res, 1); % 得到不同類別樣本個數mid_tiran = round(num_size * mid_size); % 得到該類別的訓練樣本個數P_train = [P_train; mid_res(1: mid_tiran, 1: end - 1)]; % 訓練集輸入T_train = [T_train; mid_res(1: mid_tiran, end)]; % 訓練集輸出P_test = [P_test; mid_res(mid_tiran + 1: end, 1: end - 1)]; % 測試集輸入T_test = [T_test; mid_res(mid_tiran + 1: end, end)]; % 測試集輸出
end%% 數據轉置
P_train = P_train'; P_test = P_test';
T_train = T_train'; T_test = T_test';%% 得到訓練集和測試樣本個數
M = size(P_train, 2);
N = size(P_test , 2);%% 數據歸一化
[p_train, ps_input] = mapminmax(P_train, 0, 1);
p_test = mapminmax('apply', P_test, ps_input);t_train = ind2vec(T_train);
t_test = ind2vec(T_test );%% 優化算法參數設置%% 性能評價
error1 = sum((T_sim1 == T_train)) / M * 100 ;
error2 = sum((T_sim2 == T_test )) / N * 100 ;%% 繪圖
figure()
plot(T_sim1,'ro','linewidth',1)
hold on
plot(T_train,'b-+','linewidth',1)
legend('預測值','真實值')
xlabel('預測樣本')
ylabel('預測結果')
string = {'訓練集預測結果對比'; ['準確率=' num2str(error1) '%']};
title(string)
xlim([1, M])
gridfigure
plot(T_sim2,'ro','linewidth',2)
hold on
plot(T_test,'b-+','linewidth',2)
legend('預測值','真實值')
xlabel('預測樣本')
ylabel('預測結果')
string = {'測試集預測結果對比'; ['準確率=' num2str(error2) '%']};
title(string)
xlim([1, N])
grid%% 適應度曲線
figure
plot(1 : length(BestCost), BestCost,'r', 'LineWidth', 1.5);
title('適應度曲線', 'FontSize', 15);
xlabel('迭代次數', 'FontSize', 15);
ylabel('適應度值', 'FontSize', 15);
xlim([1, length(BestCost)]);
grid on;%% 混淆矩陣
if flag_conusion == 1figurecm = confusionchart(T_train, T_sim1);cm.Title = 'Confusion Matrix for Train Data';cm.ColumnSummary = 'column-normalized';cm.RowSummary = 'row-normalized';figurecm = confusionchart(T_test, T_sim2);cm.Title = 'Confusion Matrix for Test Data';cm.ColumnSummary = 'column-normalized';cm.RowSummary = 'row-normalized';
end