《统计学习方法》笔记(十二)--Adaboost

来源:互联网 发布:乐心手环数据清零几点 编辑:程序博客网 时间:2024/04/28 08:04

通过改变样本的权重来学习多个分类器并将这些分类器进行线性组合,提高分类性能。

理论依据:在PAC(probably approximately correct)的框架下强可学习与弱可学习的等价性

书中例8.1的MATLAB实现

%adaboost 例8.1%一个一维分类器%弱分类器用的是简单的阈值处理close all;clear all;clc;%%x=0:1:9;y=[1 1 1 -1 -1 -1 1 1 1 -1];N=size(x,2);w(1,:)=ones(N,1)./N;D(1,:)=w;%v(1)=2.5;%%for m=1:3%判断条件有待改进    [Y(m,:) e v(m) flag(m)]=G(x,y,w(m,:));%得到现有训练集上误差率最低的分类器阈值及相应的分类误差      if e==0        break;    end    a(m)=0.5*log((1-e)./e);    for i=1:N        T(i)=w(m,i)*exp(-a(m)*y(i)*Y(m,i));    end    Z=sum(T);    w(m+1,:)=T/Z;    D(m+1,:)=w(m+1,:);    endavflag
%%在adaboost 中用于计算误差率function [e]=E(y_t,y,w)e=0;for i=1:length(y)    if y_t(i)==y(i)      else        e=e+w(i);    endend%e=e./i;end
<p>%%在Adaboost例子中用于计算分类器的返回值function [RY e v flag]=G(x,y,w)%%ii=1;for v=0.5:0.5:x(end)    for i=1:size(x,2)        if (x(i)<v)            Y(ii,i)=1;        else            Y(ii,i)=-1;        end    end   e_t1(ii)=E(Y(ii,:),y,w);   ii=ii+1; end[e1 idx1]=min(e_t1);v1=idx1*0.5;RY1=Y(idx1,:);%%%弱分类器中不等号的方向改变ii=1;for v=0.5:0.5:x(end)    for i=1:size(x,2)        if (x(i)>=v)            Y(ii,i)=1;        else            Y(ii,i)=-1;        end    end   e_t2(ii)=E(Y(ii,:),y,w);   ii=ii+1; end[e2 idx2]=min(e_t2);v2=idx2*0.5;RY2=Y(idx2,:);%%if e1<e2    flag=1;    RY=RY1;    e=e1;    v=v1;else    flag =0;     RY=RY2;    e=e2;    v=v2;end</p><p>end</p>


 

1 0