用matlab实现adaboost

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 

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值