基于BP弱分类器用Adaboost的强分类器

来源:互联网 发布:网络广播主机 编辑:程序博客网 时间:2024/06/04 18:33

1、模型的建立





详细代码:

<span style="font-size:18px;">%% 该代码为基于BP_Adaboost的强预测器预测%% 清空环境变量clcclear%% 下载数据load data1 input output%% 权重初始化k=rand(1,2000);[m,n]=sort(k);%训练样本input_train=input(n(1:1900),:)';output_train=output(n(1:1900),:)';%测试样本input_test=input(n(1901:2000),:)';output_test=output(n(1901:2000),:)';%样本权重[mm,nn]=size(input_train);D(1,:)=ones(1,nn)/nn;%训练样本归一化[inputn,inputps]=mapminmax(input_train);[outputn,outputps]=mapminmax(output_train);K=10;for i=1:K        %弱预测器训练    net=newff(inputn,outputn,5);    net.trainParam.epochs=20;    net.trainParam.lr=0.1;    net=train(net,inputn,outputn);        %弱预测器预测    an1=sim(net,inputn);    BPoutput=mapminmax('reverse',an1,outputps);        %预测误差    erroryc(i,:)=output_train-BPoutput;        %测试数据预测    inputn1=mapminmax('apply',input_test,inputps);    an2=sim(net,inputn1);    test_simu(i,:)=mapminmax('reverse',an2,outputps);        %调整D值    Error(i)=0;    for j=1:nn        if abs(erroryc(i,j))>0.2  %较大误差            Error(i)=Error(i)+D(i,j);            D(i+1,j)=D(i,j)*1.1;        else            D(i+1,j)=D(i,j);        end    end        %计算弱预测器权重    at(i)=0.5/exp(abs(Error(i)));        %D值归一化    D(i+1,:)=D(i+1,:)/sum(D(i+1,:));    end%% 强预测器预测at=at/sum(at);%% 结果统计%强分离器效果output=at*test_simu;error=output_test-output;plot(abs(error),'-*')hold onfor i=1:8error1(i,:)=test_simu(i,:)-output;endplot(mean(abs(error1)),'-or')title('强预测器预测误差绝对值','fontsize',12)xlabel('预测样本','fontsize',12)ylabel('误差绝对值','fontsize',12)legend('强预测器预测','弱预测器预测')</span>

分类1 -1  代码:

<span style="font-size:18px;">%% 该代码为基于BP-Adaboost的强分类器分类%% 清空环境变量clcclear%% 下载数据load data input_train output_train input_test output_test%% 权重初始化[mm,nn]=size(input_train);D(1,:)=ones(1,nn)/nn;%% 弱分类器分类K=10;for i=1:K        %训练样本归一化    [inputn,inputps]=mapminmax(input_train);    [outputn,outputps]=mapminmax(output_train);    error(i)=0;        %BP神经网络构建    net=newff(inputn,outputn,6);    net.trainParam.epochs=5;    net.trainParam.lr=0.1;    net.trainParam.goal=0.00004;        %BP神经网络训练    net=train(net,inputn,outputn);        %训练数据预测    an1=sim(net,inputn);    test_simu1(i,:)=mapminmax('reverse',an1,outputps);        %测试数据预测    inputn_test =mapminmax('apply',input_test,inputps);    an=sim(net,inputn_test);    test_simu(i,:)=mapminmax('reverse',an,outputps);        %统计输出效果    kk1=find(test_simu1(i,:)>0);    kk2=find(test_simu1(i,:)<0);        aa(kk1)=1;    aa(kk2)=-1;        %统计错误样本数    for j=1:nn        if aa(j)~=output_train(j);            error(i)=error(i)+D(i,j);        end    end        %弱分类器i权重    at(i)=0.5*log((1-error(i))/error(i));        %更新D值    for j=1:nn        D(i+1,j)=D(i,j)*exp(-at(i)*aa(j)*test_simu1(i,j));    end        %D值归一化    Dsum=sum(D(i+1,:));    D(i+1,:)=D(i+1,:)/Dsum;    end%% 强分类器分类结果output=sign(at*test_simu);%% 分类结果统计%统计强分类器每类分类错误个数kkk1=0;kkk2=0;for j=1:350    if output(j)==1        if output(j)~=output_test(j)            kkk1=kkk1+1;        end    end    if output(j)==-1        if output(j)~=output_test(j)            kkk2=kkk2+1;        end    endendkkk1kkk2disp('第一类分类错误  第二类分类错误  总错误');% 窗口显示disp([kkk1 kkk2 kkk1+kkk2]);plot(output)hold onplot(output_test,'g')%统计弱分离器效果for i=1:K    error1(i)=0;    kk1=find(test_simu(i,:)>0);    kk2=find(test_simu(i,:)<0);        aa(kk1)=1;    aa(kk2)=-1;        for j=1:350        if aa(j)~=output_test(j);            error1(i)=error1(i)+1;        end    endenddisp('统计弱分类器分类效果');error1disp('强分类器分类误差率')(kkk1+kkk2)/350disp('弱分类器分类误差率')(sum(error1)/(K*350))</span>


0 0
原创粉丝点击