PS:原理和代码都是我从下面这个链接学习的,博主讲的很详细!如有侵权,请联系我,立刻删!
(10条消息) adaboost算法MATLAB实现!李航统计学习例子matlab实现!_@尚码哥@的博客-CSDN博客_adaboost matlab
目录
原文章申明:
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_41146894/article/details/111316819
————————————————
可能会有错,欢迎大家指教!
boosting提升分类器:是一种重要的集成学习技术, 能够将预测精度仅比随机猜度略高的弱学习器增强为预测精度高的强学习器
adaboost算法:被前一个基分类器错误分类的样本的权重会增加,而被正确分类的样本的权重会减少,它将被用来再次训练下一个基本分类器。同时,在每次迭代中,增加一个新的弱分类器,直到预定的错误率足够小或者达到预设的最大迭代次数,将这些分类器加权融合确定最终的强分类器。
代码
基于我自己的需求,我将原创作者的代码修改了一丢丢,原谅我修改的真的很垃圾
clc
clear
%初始权重
w = [1 1 1 1 1 1 1 1 1 1];
%对应的输出
H = [];
Y = [1 1 1 -1 -1 -1 1 1 1 -1];
Y_1 = Y;
fprintf('目标分类:\n');
fprintf('%4d',Y);
fprintf('\n');
%对应的X
X = [0 1 2 3 4 5 6 7 8 9];
%保存错误的个数
error = [];
X_process = [0 0 0 0 0 0 0 0 0 0];
%对应的切分点
cut = [0.5 1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5];
h_1 = [];
%用来保存误差
e = [];
%保存系数
a = [];
%设置最大的迭代步数
m = 10;
%开始迭代
for i=1:m
%初始化权值大小,归一化到(0,1)
sumW = sum(w);
w = w ./ sumW;
for j=1:length(cut)
for k=1:length(X)
if X(k) < cut(j)
h(j,k) = 1;
else
h(j,k) = -1;
end
end
end
%计算误差率
for j = 1:size(h,1)
% if isempty(find( X_process==j))==0
% e(j) = 999;
e(j) = sum(w.*((Y - h(j,:)).*Y) / 2);
if e(j) > 0.5
e(j) = 1 - e(j);
for k=1:length(X)
if X(k) < cut(j)
h(j,k) = -1;
else
h(j,k) = 1;
end
end
end
end
%找出最小误差
fprintf('第%d次迭代的最小误差为\n',i);
minE = min(e)
% find(e==min(e))
%算弱分类器前的系数
minI = find(e == minE);
%判断是否有两个或更多的最小误差
if (size(minI,2) > 1)
minI = minI(1);
end
minE;
minI;
%得到系数
fprintf('基分类器系数:\n');
a(i) = log((1 - minE)/minE)/2
%更新权值
Y_1 = h(minI,:);
Z = sum(w.*exp(-a(i) * h(minI,:).*Y));
fprintf('第%d次迭代的样本权值为\n',i);
w = w/Z .* exp(-a(i) * h(minI,:).*Y)
%保存已经使用过的判断点
X_process(i) = minI;
fprintf('\n')
fprintf('第%d迭代,划分点为 %f, 对于的弱分类函数为:\n',i,cut(minI));
fprintf('Y_1:\n');
fprintf('%4d',Y_1)
fprintf('\n');
fprintf('Y:\n');
fprintf('%4d',Y)
fprintf('\n');
figure %不知道为什么只出现了前两张图,哭了
plot(X,Y_1,'r+')
hold on
plot(X,Y,'g-')
hold off
legend('y_1','Y');
axis([-1 10 -2 2]);
H(i,:) =a(i)*Y_1;
sign(sum(H));
error(i)=sum(abs(sign(sum(H))- Y))/2 %sign(sum(H))一共错了error(i)个点
%
if sign(sum(H))- Y==0
break;
end
% h_1(i) = h(colum,:);
end
fprintf('迭代结束,误差率为0:\n');
% subplot(2,1,1);
plot(error,'rs--')
xlabel('iterationtime');
ylabel('errornumber');
legend('error numbers');
% axis([-5 15 -2 6]);
figure
plot(X,sign(sum(H)),'r+')
hold on
plot(X,Y,'g-')
hold off
legend('sign(sum(H))','Y');
axis([-1 10 -2 2]);
转载自:
(10条消息) adaboost算法MATLAB实现!李航统计学习例子matlab实现!_@尚码哥@的博客-CSDN博客_adaboost matlab
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_41146894/article/details/111316819
————————————————
版权声明:本文为CSDN博主「@尚码哥@」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_41146894/article/details/111316819