%% 基于BP神经网络的帕金森病诊断
%% 清空环境变量
clc
clear
%% 导入训练数据和预测数据
data=xlsread('pjs2');
%从1到1040间随机排序
k=rand(1,195);
[m,n]=sort(k);
%确认输入输出数据
input=data(:,2:23);
output =data(:,24);
%随机提取900个样本为训练样本,140个样本为预测样本
input_train=input(n(1:140),:)';
output_train=output(n(1:140),:)';
input_test=input(n(141:195),:)';
output_test=output(n(141:195),:)';
%输入数据归一化
[inputn,inputps]=mapminmax(input_train);
%% BP网络训练
%初始化网络
net=newff(inputn,output_train,50);
net.trainParam.epochs=1000;
net.trainParam.lr=0.1;
net.trainParam.goal=0.001;
%% 网络训练
net=train(net,inputn,output_train);
%% BP网络预测
%预测数据归一化
inputn_test=mapminmax('apply',input_test,inputps);
%网络预测输出
BPoutput=sim(net,inputn_test);
%% 结果分析
%根据网络输出找出数据属于哪类
BPoutput(find(BPoutput<0.5))=0;
BPoutput(find(BPoutput>=0.5))=1;
%% 结果分析
%画出预测结果和实际结果的分类图
figure(1)
plot(BPoutput,'og')
hold on
plot(output_test,'r*');
legend('预测类别','输出类别')
title('BP网络预测分类与实际类别比对','fontsize',12)
ylabel('类别标签','fontsize',12)
xlabel('样本数目','fontsize',12)
ylim([-0.5 1.5])
%预测正确率
rightnumber=0;
for i=1:size(output_test,2)
if BPoutput(i)==output_test(i)
rightnumber=rightnumber+1;
end
end
rightratio=rightnumber/size(output_test,2)*100;
sprintf('测试准确率=%0.2f',rightratio)