warning off
close all
clear
clc
res = xlsread('');
num_class = length(unique(res(:, end)));
num_res = size(res, 1);
num_size = 0.7;
res = res(randperm(num_res), :);
flag_conusion = 1;
P_train = []; P_test = [];
T_train = []; T_test = [];
for i = 1 : num_class
mid_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 = T_train;
t_test = T_test ;
p_train = p_train'; p_test = p_test';
t_train = t_train'; t_test = t_test';
trees = 50;
leaf = 1;
OOBPrediction = 'on';
OOBPredictorImportance = 'on';
Method = 'classification';
net = TreeBagger(trees,p_train, t_train,'OOBPredictorImportance',OOBPredictorImportance,...
'Method',Method,'OOBPrediction',OOBPrediction,'minleaf',leaf);
importance = net.OOBPermutedPredictorDeltaError;
figure
bar(importance)
legend('重要性')
xlabel('特征')
ylabel('重要性')
k = 16;
[~, index] = sort(importance, "descend");
save_index = sort(index(1: k));
disp('经过特征选择后,保留特征的序号为:')
disp(save_index)
p_train = p_train(:, save_index);
p_test = p_test (:, save_index);
p_train = p_train'; p_test = p_test';
t_train = t_train'; t_test = t_test';
t_train = ind2vec(t_train);
t_test = ind2vec(t_test );
net = newff(p_train, t_train, 5);
net.trainParam.epochs = 1000;
net.trainParam.goal = 1e-6;
net.trainParam.lr = 0.01;
net = train(net, p_train, t_train);
t_sim1 = sim(net, p_train);
t_sim2 = sim(net, p_test );
T_sim1 = vec2ind(t_sim1);
T_sim2 = vec2ind(t_sim2);
error1 = sum((T_sim1 == T_train))/M * 100 ;
error2 = sum((T_sim2 == T_test)) /N * 100 ;
figure
plot(1: M, T_train, 'r-*', 1: M, T_sim1, 'b-o', 'LineWidth', 1)
legend('真实值', '预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'训练集预测结果对比'; ['准确率=' num2str(error1) '%']};
title(string)
grid
figure
plot(1: N, T_test, 'r-*', 1: N, T_sim2, 'b-o', 'LineWidth', 1)
legend('真实值', '预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'测试集预测结果对比'; ['准确率=' num2str(error2) '%']};
title(string)
grid
if flag_conusion == 1
figure
cm = confusionchart(T_train, T_sim1);
cm.Title = 'Confusion Matrix for Train Data';
cm.ColumnSummary = 'column-normalized';
cm.RowSummary = 'row-normalized';
figure
cm = confusionchart(T_test, T_sim2);
cm.Title = 'Confusion Matrix for Test Data';
cm.ColumnSummary = 'column-normalized';
cm.RowSummary = 'row-normalized';
end
评论0