clc
clear
%下载数据
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=4;
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,outputs);
inoutn_test=mapminmax('apply',input_test,inputps);
an=sim(net,inputn_test);
testsimu(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:m
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_sum);
%统计强分类器每分类错误个数
kkk1=0;
kkk2=0;
for j=1:350
if output(j)==1
if output(j)~=output_test(j);
kkk1=kkk1+1;
end
end
end
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
程序摘抄自《matlab神经网络43个案例分析》
这段BP_Adaboost程序我只看到了更新样本权重,却看不出更新后的样本权重怎么使错误出现的位置受到更多的关注。有大佬可以告诉我它有没有通过权重使误差点受到更多关注吗?还是说没有这一步,没有的话我该怎么加?