天天看点

adaboost算法MATLAB实现!李航统计学习例子matlab实现!前言一、例子二、算法实现结果

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、例子
  • 二、算法实现
  • 结果

adaboost 算法升级版MATLAB实现:https://blog.csdn.net/weixin_41146894/article/details/111315192

前言

提升方法基于这样一种思想:对于一个复杂任务来说,将多个专 家的判断进行适当的综合所得出的判断,要比其中任何一个专家单独 的判断好。实际上,就是“三个臭皮匠顶个诸葛亮”的道理。这里主要是对李航统计学习书上的例子复现,对于理论不做介绍。

一、例子

adaboost算法MATLAB实现!李航统计学习例子matlab实现!前言一、例子二、算法实现结果
adaboost算法MATLAB实现!李航统计学习例子matlab实现!前言一、例子二、算法实现结果
adaboost算法MATLAB实现!李航统计学习例子matlab实现!前言一、例子二、算法实现结果

二、算法实现

代码如下(示例):

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;
    else
        %误差率大于0.5,
        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
  end     

   %找出最小误差
  minE = min(e);
  %算弱分类器前的系数
  minI = find(e == minE);
  %判断是否有两个或则更多的最小误差
  if (size(minI,2) > 1)
    minI = minI(1);
  end
  minE;
  minI;
  %得到系数
  a(i) = log((1 - minE)/minE)/2;
  %更新权值
  Y_1 = h(minI,:);
  Z = sum(w.*exp(-a(i) * h(minI,:).*Y));
  w = w/Z .* exp(-a(i) * h(minI,:).*Y);
  %保存已经使用过的判断点
  X_process(i) = minI;
  fprintf('\n')
  fprintf('第%d迭代,划分点为 %f, 对于的弱分类函数为:\n',i,cut(minI));
  fprintf('%4d',Y_1)
  fprintf('\n');
  
  
   H(i,:) =a(i)*Y_1;
   sign(sum(H));
   error(i)=sum(abs(sign(sum(H))- Y))/2;
% 
  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');

subplot(2,1,2);
plot(X,Y,'r*')
axis([-5 15 -2 6]);
           

结果

adaboost算法MATLAB实现!李航统计学习例子matlab实现!前言一、例子二、算法实现结果
adaboost算法MATLAB实现!李航统计学习例子matlab实现!前言一、例子二、算法实现结果

继续阅读