% 清空环境变量
clc
clear
%% 训练数据预测数据提取及归一化
%下载四类语音信号
try
load 'data1' c1
load 'data2' c2
load 'data3' c3
load 'data4' c4
catch ErrorInfo
disp('请您务必在当前文件夹下运行!!!,或者将数据重新加载');
end
addpath(genpath(pwd))
%四个特征信号矩阵合成一个矩阵
data(1:500,:)=c1(1:500,:);
data(501:1000,:)=c2(1:500,:);
data(1001:1500,:)=c3(1:500,:);
data(1501:2000,:)=c4(1:500,:);
%输入输出数据
input=data(:,2:end);
output1 =data(:,1);
for i=1:size(output1,1)
switch output1(i)
case 1
output(i,1)=1;
case 2
output(i,2)=1;
case 3
output(i,3)=1;
case 4
output(i,4)=1;
case 5
output(i,5)=1;
case 6
output(i,6)=1;
case 7
output(i,7)=1;
case 8
output(i,8)=1;
case 9
output(i,9)=1;
case 10
output(i,10)=1;
end
end
jg = 500; %每组500个样本
tn = 420; %选前tn个样本进行训练,剩下的100个用于测试
input_train = []; output_train = [];
input_test = []; output_test = [];
for i = 1:4 %一共有4类
input_train=[input_train;input(1+jg*(i-1):jg*(i-1)+tn,:)];
output_train=[output_train;output(1+jg*(i-1):jg*(i-1)+tn,:)];
input_test=[input_test;input(jg*(i-1)+tn+1:i*jg,:)];
output_test=[output_test;output(jg*(i-1)+tn+1:i*jg,:)];
end
%输入数据归一化
input_train = input_train';
output_train = output_train';
input_test = input_test';
output_test = output_test';
%归一化
[inputn,inputps]=mapminmax(input_train);
[inputn_test,inputtestps]=mapminmax('apply',input_test,inputps);
%% 网络结构初始化
% 获取输入层节点、输出层节点个数
inputnum=size(inputn,1);
outputnum=size(output,2);
hiddennum_best = 10; %需要手动赋值
disp('/////////////////////////////////')
disp('神经网络结构...')
disp(['输入层的节点数为:',num2str(inputnum)])
disp(['输出层的节点数为:',num2str(outputnum)])
disp(' ')
%% 优化算法寻最优权值阈值
%初始化参数
pop=8; %初始种群规模
maxgen=30; %最大进化代数
dim=inputnum*hiddennum_best+hiddennum_best+hiddennum_best*outputnum+outputnum; %自变量个数
lb = -2.*ones(1,dim); %神经网络权值阈值的下限
ub = 2.*ones(1,dim); %神经网络权值阈值的上限
fobj = @(x)fitness(x,inputnum,hiddennum_best,outputnum,inputn,output_train,inputn_test,output_test);
disp('正在调用优化算法对BP进行优化,请稍等……')
[Best_score,Best_pos,curve]=GWO(pop, maxgen,lb,ub,dim,fobj);
setdemorandstream(2*pi);
%将最佳值Best_pos带入目标函数
[error,predict_label] = fitness(Best_pos,inputnum,hiddennum_best,outputnum,inputn,output_train,inputn_test,output_test);
outputt=zeros(1,size(output_test,2));
for i=1:size(output_test,2)
outputt(i)=find(output_test(:,i)==max(output_test(:,i)));
end
fprintf('test is over and plot begining……\n');
accuracy=sum(outputt==predict_label)/length(predict_label); %计算预测的确率
%输出准确率
disp('---------------------------测试准确率-------------------------')
disp(['优化BP神经网络诊断准确率:',num2str(accuracy*100),'%'])
% 标准作图
% 画方框图
figure('Position',[10,50,800,600])
set(gca,'looseInset',[0 0 0 0])
confMat = confusionmat(outputt,predict_label); %output_test是真实值标签
zjyanseplotConfMat(confMat.');
xlabel('Predicted label')
ylabel('Real label')
title(['优化BP的测试集正确率 = ',num2str(accuracy*100),' %'])
% 作图
figure('Position',[50,50,800,600])
set(gca,'looseInset',[0 0 0 0])
plot(1:1:length(predict_label),outputt,'*-','Color',[0 0.4470 0.7410],'LineWidth',1)
hold on
plot(1:1:length(predict_label),predict_label,'p-','Color',[0.9290 0.6940 0.1250],'LineWidth',0.1,'MarkerSize',3)
legend('预测类别','真实类别','NorthWest')
title(['优化BP的测试集正确率 = ',num2str(accuracy*100),' %'])
xlabel('预测样本编号')
ylabel('分类结果')
box on
set(gca,'fontsize',12)
机器学习之心
- 粉丝: 2w+
- 资源: 1031
最新资源
- (源码)基于C语言的系统服务框架.zip
- (源码)基于Spring MVC和MyBatis的选课管理系统.zip
- (源码)基于ArcEngine的GIS数据处理系统.zip
- (源码)基于JavaFX和MySQL的医院挂号管理系统.zip
- (源码)基于IdentityServer4和Finbuckle.MultiTenant的多租户身份认证系统.zip
- (源码)基于Spring Boot和Vue3+ElementPlus的后台管理系统.zip
- (源码)基于C++和Qt框架的dearoot配置管理系统.zip
- (源码)基于 .NET 和 EasyHook 的虚拟文件系统.zip
- (源码)基于Python的金融文档智能分析系统.zip
- (源码)基于Java的医药管理系统.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈