本人分析住院费用数据,705样本 7个影响因素,训练和验证效果不好,请帮忙检查下程序代码有无错误
[m,n]=size(data);
for j=1:n
minv(j)=min(data(:,j));
maxv(j)=max(data(:,j));
distance(j)=maxv(j)-minv(j);
data(:,j)=(data(:,j)-minv(j))/distance(j);
ai(j)=min(data(:,j));
bi(j)=max(data(:,j));
end
%
t=data(:,end);
p=data(:,1:end-1);
t=t';
p=p';
%
iitst=2:5:m;
iival=4:5:m;
iitr=[1:5:m 3:5:m 5:5:m];
val.P =p (:,iival); val.T = t(:,iival);
test.P = p (:,iitst); test.T = t(:,iitst);
ptr = p(:,iitr); ttr = t(:,iitr);
numy=5;
BPNet0=newff(minmax(ptr),[numy 1],{'logsig'
'logsig'},'trainlm');
d=0.01;
BPNet0.lw{2,1}=BPNet0.lw{2,1}*d;
BPNet0.iw{1,1}=BPNet0.iw{1,1}*d;
BPNet0.b{1}=BPNet0.b{1}*d;
BPNet0.b{2}=BPNet0.b{2}*d;
BPNet0.trainParam.epochs=10000;
BPNet0.trainParam.goal=0.05;
BPNet0.trainParam.lr=0.01;
BPNet0.performFcn='sse';
BPNet0.trainParam.show=2;
[net,tr]=train(BPNet0,ptr,ttr,[],[],val,test);
y=sim(net,test.P);
Y=y*distance(end)+minv(end);
T=test.T*distance(end)+minv(end);
ea=T-Y;
ssea=sse(ea);
C=Y-8691.13;
msea=ssea/(420-(7*numy+1));
rmsea=sqrt(msea);
eas=sumsqr(C);
ra=1-ssea/eas;
r2a=ra^2;
ajustr2a=1-419/(420-(7*numy+1))*(1-r2a);
figure;
[ma,ba,ra]=postreg(Y,T);
ou=sim(net,ptr);
OU=ou*distance(end)+minv(end);
TTR=ttr*distance(end)+minv(end);
eb=TTR-OU;
sseb=sse(eb);
mseb=sseb/ (705-(7*numy+1));
rmseb=sqrt(mseb);
ebs=sumsqr(eb);
rb=1-sseb/ebs;
r2b=rb^2;
ajustr2b=1- 704/(705-(7*numy+1))*(1-r2b);
figure;
[mb,bb,rb]=postreg(OU,TTR);