温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

基于BP_Adaboost的强分类器设计是怎样的

发布时间:2021-12-09 16:54:56 来源:亿速云 阅读:109 作者:柒染 栏目:大数据

本篇文章为大家展示了基于BP_Adaboost的强分类器设计是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)。

其算法本身是通过改变数据分布来实现的,它根据每次训练集之中每个样本的分类是否正确,以及上次的总体分类的准确率,来确定每个样本的权值。将修改过权值的新数据集送给下层分类器进行训练,最后将每次训练得到的分类器融合起来,作为最后的决策分类器。


这里采用BP神经网络作为弱分类器,反复训练BP神经网络预测样本输出,通过Adaboost算法得到多个BP神经网络弱分类器组成的强分类器。


%%清空环境变量

clc

clear

基于BP_Adaboost的强分类器设计是怎样的  

%% 下载数据

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);

基于BP_Adaboost的强分类器设计是怎样的  

    %训练数据预测

    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

    end

end


disp('第一类分类错误  第二类分类错误  总错误');

% 窗口显示

disp([kkk1 kkk2 kkk1+kkk2]);

基于BP_Adaboost的强分类器设计是怎样的  

plot(output)

hold on

plot(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

    end

end

disp('统计弱分类器分类效果');

disp(error1)


disp('强分类器分类误差率')

disp((kkk1+kkk2)/350)


disp('弱分类器分类误差率')

disp((sum(error1)/(K*350)))

上述内容就是基于BP_Adaboost的强分类器设计是怎样的,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI