⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 improvedranpropylene.asv

📁 改进RAN应用股票财务程序
💻 ASV
📖 第 1 页 / 共 3 页
字号:
2624.65
2539.05
2538.82
2551.21
2581.73
2560.04
2551.21
2502.10
2508.06
2495.90
2504.96
2514.50
2520.70
2520.70
2502.10
2514.50
2495.90
2538.82
2508.30
2501.86
2474.44
2425.56
2388.61
2413.41
2398.15
2379.79
2351.89
2343.07
2318.28
2318.28
2312.08
2391.95
2391.71
2376.69
2345.93
2349.03
2330.91
2315.18
2312.31
2290.86
2354.99
2413.41
2407.21
2391.71
2407.21
2401.01
2379.79
2343.07
2343.07
2343.07
2324.47
2330.43
2305.88
2318.28
2287.76
2303.02
2336.63
2324.71
2297.06
2318.04
2300.16
2293.96
2297.06
2284.66
2287.76
2293.96
2290.86
2293.72
2281.32
2254.14
2275.36
2281.80
2275.36
2278.94
2303.02
2263.20
2266.06
2223.62
2232.44
2257.24
2241.74
2257.24
2281.56
2260.10
2266.06
2284.42
2305.88
2308.98
2312.08
2318.04
2330.43
2305.88
2388.85
2398.15
2452.98
2440.82
2465.14
2514.26
]';
[pn,meanp,stdp,tn,meant,stdt]=prestd(p,t); %生成均值为0,方差为一的矩阵
[ptrans,transMat] = prepca(pn,0.01) ;%需调整的参数-2;主元分析
Tn=(t-min(t))/(max(t)-min(t));  
[s,l]=size(ptrans);
ptrans=(ptrans-repmat(min(ptrans')',1,l))./repmat(max(ptrans')'-min(ptrans')',1,l);  %  矩阵归一化
p1=ptrans(:,1:300);
p2=ptrans(:,301:396);
t1=Tn(:,1:300);
t2=Tn(:,301:396);
[InDim,TrainSamNum]=size(p1);
[OutDim,TrainSamNum]=size(t1);
[InDim,TestSamNum]=size(p2);
TrainSamNum;      %训练样本数
TestSamNum;       %测试样本数
InDim;            %样本输入维数
OutDim;           %样本输出维数

%根据目标函数获取样本输入输出

TestSTD=std(t2);  %  std(x),x为向量,std表示x方差的无偏估计平方根

OverLapCoe=0.8;  %重叠系数
Dist_Max=1.5;  %最大距离分辨率
Dist_Min=0.11;  %最小距离分辨率
ErrLimit=0.02;  %误差分辨率
Decay=0.977;  %分辨率衰减常数
lr=0.05;  %学习率
MaxEpoch=100;  %最大学习次数
DistLimit=Dist_Max;  %距离分辨率
b2=t1(:,1);
w2=[];
UnitCenters=[];
SpreadConstant=[]; 
UnitNum=0;
AllUnitNum=0;
AllTestRSME=[];
tp=[ErrLimit lr MaxEpoch];
for TrainedNum=2:TrainSamNum
    NewInput=p1(:,TrainedNum);
    NewOutput=t1(:,TrainedNum);
    NetOut=RBFNN(NewInput,UnitCenters,w2,b2,SpreadConstant);
    NewErr=NewOutput-NetOut;
    if (UnitNum==0),
        NewDist=Dist_Max;
    else
        AllDist=dist(UnitCenters',NewInput);
        NewDist=min(AllDist);
    end
    if(norm(NewErr)>=ErrLimit & NewDist>=DistLimit),  %判断是否添加隐节点
        [UnitCenters,w2,SpreadConstant]=AddNewUnit(NewInput,NewErr,NewDist,UnitCenters,w2,SpreadConstant,OverLapCoe);
        TrainedNum;
        UnitNum=UnitNum+1;
    else
        [UnitCenters,w2,b2]=FineTuning(NewInput,NewOutput,UnitCenters,w2,b2,SpreadConstant,tp);  %  参数精调的每一次迭代都是一个样本进入
    end
    
    if DistLimit>Dist_Min,  %分辨率衰减
        DistLimit=DistLimit*Decay;
    else
        DistLimit=Dist_Min;
    end
    AllUnitNum=[AllUnitNum UnitNum];
    
    TestNNOut=RBFNN(p2,UnitCenters,w2,b2,SpreadConstant);
    TestRSME=sqrt(sumsqr(TestNNOut-t2)/TestSamNum)/TestSTD;
    AllTestRSME=[AllTestRSME TestRSME];
end
%绘制目标曲线和神经网络输出曲线
TestNNOut=RBFNN(p2,UnitCenters,w2,b2,SpreadConstant);
[xxx,PtNum]=size(t2);  %此处的PtNum=201
figure
echo off  %turns off echoing.
axis([0 PtNum 0 1])
axis on  %turns axis labeling, tick marks and background back on.
%grid
plot(1:PtNum,t2,'*-')
hold on
plot(1:PtNum,TestNNOut,'r.-')
legend('Sample Outputs','RAN')
xlabel('样本数')
ylabel('归一化丙烷含量')
UnitNum
TestRSME

%绘制隐节点变化曲线
[xxx,PtNum]=size(AllUnitNum);  %此处的PtNum=400
figure
echo off
axis([0 PtNum 0 150])
axis on
grid
hold on
plot(1:PtNum,AllUnitNum,'b-')
xlabel('隐节点变化曲线')

%绘制RSME变化曲线
[xxx,PtNum]=size(AllTestRSME);  %此处的PtNum=399
figure
echo off
axis on
grid
hold on
plot(1:PtNum,AllTestRSME,'b-')
xlabel('RSME')
%w2
%b2
%UnitCenters
%SpreadConstant










%---------------------------------------------------------------------------------------------------------
%  下面是主函数中调用的函数,均以function定义,在主函数中没有function
%程序二段中调用的函数

%  隐层输出
function hiddenout=ho(p1,UnitCenters,SpreadConstant)
[xxx,InNum]=size(p1);
SpreadMat=repmat(SpreadConstant,1,InNum);
AllDist=dist(UnitCenters',p1);
hiddenout=radbas(AllDist./SpreadMat);

%  寻找需要合并的隐节点
function [hiddenunit1,hiddenunit2]=findunittocombine(hiddencorr,hiddenvar,...
    unitscombinethreshold,biascombinethreshold)
corrtri=triu(hiddencorr)-eye(size(hiddencorr));    %  TRIU Extract upper triangular part
while(1)
    [val,pos]=max(abs(corrtri));    %  [Y,I] = MAX(X) returns the indices of the maximum values in vector I and the maximum values in Y of X
    [maxcorr,hiddenunit2]=max(val);   %对于行向量X,[c,d]=max(X),返回c,d分别表示X中最大的数及其对应X的index
    if(maxcorr<unitscombinethreshold)
        hiddenunit1=0;hiddenunit2=0;
        break  %  用以退出while循环
    end
    hiddenunit1=pos(hiddenunit2);  %  如果该语句执行则说明maxcorr>unitscombinethreshold,if段没有执行
    
    if(hiddenvar(hiddenunit1)>biascombinethreshold &...
            hiddenvar(hiddenunit2)>biascombinethreshold)
        break
    else
        corrtri(hiddenunit1,hiddenunit2)=0;
    end
end

if(hiddenunit1>0)return;end   %  return与break不同,用以退出本函数

[minvar,unit]=min(hiddenvar);
if(minvar<biascombinethreshold)
    hiddenunit1=unit;
    hiddenunit2=0;
end

%  线性回归
function [a,b]=linearreg(vect1,vect2)
[xxx,n]=size(vect1);
meanv1=mean(vect1);
meanv2=mean(vect2);
a=(vect1*vect2'/n-meanv1*meanv2)/(vect1*vect1'/n-meanv1^2);
b=meanv2-a*meanv1;

%  绘制两相关隐节点对所有样本的输出
function drawcorrelatedunitsout(unitout1,unitout2)
[xxx,ptnum]=size(unitout1);
figure
echo off
axis([0 ptnum 0 1])
axis on
grid
hold on
plot(1:ptnum,unitout1,'b-')
plot(1:ptnum,unitout2,'k-')
    
%  两个隐节点合并
function [UnitCenters,SpreadConstant,w2ex]=combinetwounits(hiddenunit1,hiddenunit2,a,b,w2ex,UnitCenters,SpreadConstant)
[xxx,biascol]=size(w2ex);                         %  biascol=h1num+1,
w2ex(:,hiddenunit1)=w2ex(:,hiddenunit1)+a*w2ex(:,hiddenunit2);      %  节点unit1与下一层节点的连接权矢量
w2ex(:,biascol)=w2ex(:,biascol)+b*w2ex(:,hiddenunit2);  %  偏移权矢量更新
UnitCenters(:,hiddenunit2)=[];
SpreadConstant(hiddenunit2,:)=[];
w2ex(:,hiddenunit2)=[];                                 %  删除隐节点unit2    %  unit2与下一层的连接权值矢量

%  绘制标准差较小的单个隐节点输出
function  drawbiasedunitout(unitout)
[xxx,ptnum]=size(unitout);
figure('position',[300 300 400 300])
echo off
axis([0 ptnum 0 1])
axis on
grid
hold on
plot(1:ptnum,unitout,'k-')

%  将隐节点合并到偏移
function [UnitCenters,SpreadConstant,w2ex]=combineunittobias(hiddenunit1,unitmean,w2ex,UnitCenters,SpreadConstant)
[xxx,biascol]=size(w2ex);
w2ex(:,biascol)=w2ex(:,biascol)+unitmean*w2ex(:,hiddenunit1);
w2ex(:,hiddenunit1)=[];
UnitCenters(:,hiddenunit1)=[];
SpreadConstant(hiddenunit1,:)=[];
toc

%  ----------------------------------------------------------------------------------------
%  程序一段中调用的函数

%网络输出函数
function NetOut=RBFNN(NewInput,UnitCenters,w2,b2,SpreadConstant)
[OutDim,UnitNum]=size(w2);
[xxx,InNum]=size(NewInput);
if(UnitNum==0),
    NetOut=repmat(b2,1,InNum);
else
    SpreadMat=repmat(SpreadConstant,1,InNum);
    AllDist=dist(UnitCenters',NewInput);
    al=radbas(AllDist./SpreadMat);
    NetOut=w2*al+b2;
end

%增加新的隐节点
function[UnitCenters,w2,SpreadConstant]=AddNewUnit(NewInput,NewErr,NewDist,UnitCenters,w2,SpreadConstant,OverLapCoe)
UnitCenters=[UnitCenters NewInput];
w2=[w2 NewErr];
SpreadConstant=[SpreadConstant;OverLapCoe*NewDist];

%梯度法实现参数精调
function[UnitCenters,w2,b2]=FineTuning(NewInput,NewOutput,UnitCenters,w2,b2,SpreadConstant,tp)
[xxx,UnitNum]=size(UnitCenters);
if(UnitNum==0),b2=NewOutput;return,end
ErrLimit=tp(1);  %即tp的第一个值
lr=tp(2);
MaxEpoch=tp(3);
for epoch=1:MaxEpoch
    AllDist=dist(UnitCenters',NewInput);
    al=radbas(AllDist./SpreadConstant);  %radbas(n)=exp(-n^2),隐层输出
    NetOut=w2*al+b2;
    NewErr=NewOutput-NetOut;
    if(norm(NewErr)<ErrLimit),break,end
    b2=b2+lr*NewErr;
    w2=w2+lr*NewErr*al';
    for i=1:UnitNum
        CentInc=2*(NewInput-UnitCenters(:,i))*al(i)*NewErr*w2(i)/(SpreadConstant(i)^2);
        UnitCenters(:,i)=UnitCenters(:,i)+lr*CentInc;
    end
end

%  在给定坐标范围内画格子:  axis([xmin xmax ymin ymax]);grid on    (与本程序无干)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -