关闭

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

162人阅读 评论(0) 收藏 举报
分类:

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

理论依据:在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,:);
    
end
a
v
flag
%%在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);
    end
end
%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

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:2720次
    • 积分:171
    • 等级:
    • 排名:千里之外
    • 原创:15篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档