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

📄 iprovedranethylene.asv

📁 改进RAN应用股票财务程序
💻 ASV
📖 第 1 页 / 共 5 页
字号:
t2=Tn(:,181:238);
[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.9;  %重叠系数
Dist_Max=0.8;  %最大距离分辨率
Dist_Min=0.02;  %最小距离分辨率
ErrLimit=0.35;  %误差分辨率
Decay=0.9;  %分辨率衰减常数
lr=0.002;  %学习率
MaxEpoch=1000;  %最大学习次数
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
hold on
plot(1:PtNum,t2,'*-')
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



%%  程序二段
%  隐节点合成
TrainSTD=std(t1);
lr=0.01;                          %  学习率      
maxepoch=820;                   %  最大训练时间
errcombine=0.8;                %  节点合成误差
errgoal=0.01;                 %  训练目标误差
unitscombinethreshold=0.65;       %  节点合成阈值
biascombinethreshold=0.011;       %  偏置合成误差

w2ex=[w2 b2];  %  隐层到输出层的初始权值扩展
errhistory=[];
resizeflag=1;  %网络规模发生变化的标识
for epoch=1:maxepoch
    if(resizeflag==1),
        [OutDim,UnitNum]=size(w2ex);
        UnitNum=UnitNum-1;
        w2=w2ex(:,1:UnitNum);
        b2=w2ex(:,UnitNum+1);
        resizeflag=0;
    end
    
    %  正向传播计算网络输出
    hiddenout=ho(p1,UnitCenters,SpreadConstant);  %  每个节点的输出为行向量
    hiddenoutex=[hiddenout' ones(TrainSamNum,1)]';
    NetOut=w2ex*hiddenoutex;
    
    %  停止学习判断
    error=t1-NetOut;
    sse=sqrt(sumsqr(error)/TrainSamNum)/TrainSTD ; %  sse范围在0,1之间
    
    %  纪录每次权值调整后的训练误差
    errhistory=[errhistory sse];
    
    if(sse<errcombine),
        %  计算隐节点输出标准差
        hiddenvar=var(hiddenout')';
        
        %  计算隐节点输出相关系数
        hiddencorr=corrcoef(hiddenout');
        
        %  检查是否有隐节点需要合并
        [hiddenunit1,hiddenunit2]=findunittocombine(hiddencorr,...
            hiddenvar,unitscombinethreshold,biascombinethreshold);
        if(hiddenunit1>0),
            if(hiddenunit2>0),               %  两个隐节点合并
            [a,b]=linearreg(hiddenout(hiddenunit1,:),...
                hiddenout(hiddenunit2,:));  %  线性回归,即计算出vj=avi+b中的a和b
            epoch
            combinetype=11
            drawcorrelatedunitsout(hiddenout...
                (hiddenunit1,:),hiddenout(hiddenunit2,:));
            [UnitCenters,SpreadConstant,w2ex]=combinetwounits(hiddenunit1,...
                hiddenunit2,a,b,w2ex,UnitCenters,SpreadConstant);    %  当变量需要更新时函数定义中该变量在自变量和返回中均需出现,如UnitCenters和SpreadConstant
            else      %  隐节点并到偏移
            epoch
            combinetype=12
            drawbiasedunitout(hiddenout(hiddenunit1,:));
            unitmean=mean(hiddenout(hiddenunit1,:));
            [UnitCenters,SpreadConstant,w2ex]=combineunittobias...
                (hiddenunit1,unitmean,w2ex,UnitCenters,SpreadConstant);
            end

⌨️ 快捷键说明

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