基于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
- 基于BP弱分类器用Adaboost的强分类器
- 基于Boost方法的人脸检测(4):弱分类器生成、强分类器生成(AdaBoost)
- 关于Adaboost强分类器的训练
- 基于Adaboost检测的分类器训练
- 基于Adaboost的音乐情绪分类算法
- 基于AdaBoost的分类(测试算法)
- 基于BP神经网络的数据分类
- 基于BP神经网络的数据分类
- adaboost训练 之 强分类器训练原理
- adaboost训练——强分类器训练原理
- SVM VS AdaBoost 构造分类器用于物体检测
- BP神经网络的分类
- Adaboost分类器
- Adaboost分类器
- 分类器之adaboost
- AdaBoost自适应分类器
- AdaBoost分类器
- 弱分类器和强分类器
- 49. Anagrams
- HDU 4548 美素数 // 素数筛法
- 逗号表达式
- storm网上中文资料搜集大全
- spark-1.4配置
- 基于BP弱分类器用Adaboost的强分类器
- Linux环境下编程(二)——线程基础概念
- C# ArrayBuffer[转]
- 用Fluentd实现收集日志到HDFS(下)
- tcp数据包的标志位
- 黑马程序员——Java基础——数组
- 利用SwingWorker异步加载图片
- "\n" 与 '\n' 是否等价
- Junit4 单元测试的断言