Adaboost集成学习方法用于二分类(基于感知机)

Adaboost原理

开始时,算法为每个训练样本分配相同的权值,然后用弱分类器进行训练,把错分的样本对应得权值增加,对分的样本权值减小或者不变,再把权值归一化,并记录这个分类器的总错误率。
如此迭代,最后将多个弱分类器进行有权值(错误率)的集成

代码

function adaboost()
clc;
clear all;
Mc=20;%弱分类器的个数
M = importdata('D:\毕业设计\数据集1\australian.txt');%装载数据集
M(M(:,end)==0,end)=-1;
[sm,sn]=size(M);
indices=crossvalind('Kfold',M(1:sm,sn),10);
testindices=(indices==1);
trainindices=~testindices;
testset=M(testindices,:);%获得测试集
trainset=M(trainindices,:);%获得训练集
[testm,~]=size(testset);
[trainm,trainn]=size(trainset);
w=ones(trainm,Mc)./trainm;%初始化样本分布权值
c=zeros(Mc,1);
f=zeros(Mc,trainm);
for m=1:Mc
    [e,f(m,:)]=adaperceptron(w(:,m),trainset);%获得一个弱分类的加权错误率和训练集上面的预测标签
    c(m)=log((1-e)/e);
    for i=1:trainm
        one=1;
        if f(m,i)==trainset(i,end)
            one=-1;
        end
        w(i,m)=w(i,m)*exp(c(m)*one);%更新样本分布权值
    end
    w(:,m)=w(:,m)./sum(w(:,m));%归一化

end
% y=ones(trainm,Mc);
% for m=1:Mc
%     [~,y(:,m)]=adaperceptron(w(:,m),trainset);
%     y(:,m)=c(m)*y(:,m);
% end
% y=sign(sum(y')');
% disp(numel(find((y-trainset(:,end))==0))/trainm)
y=ones(testm,Mc);
for m=1:Mc
    [~,y(:,m)]=adaperceptron(w(:,m),testset);%对分类器集成
    y(:,m)=c(m)*y(:,m);
end
y=sign(sum(y')');
disp(numel(find((y-testset(:,end))==0))/testm)

end

弱分类器为感知机:

function [e,labal]=adaperceptron(D,trainset)

[trainm,trainn]=size(trainset);
learnrate=0.1;%学习率
maxtrainnumber=100;%最大训练次数
w=unifrnd(-1, 1, 1, trainn-1);  %初始化权值

for i=1:maxtrainnumber %开始训练感知机
    mark=1;
     for j=1:trainm
         y=sign(sum(trainset(j,1:trainn-1).*w)+1); %%计算感知机的输出
         if y~=trainset(j,end)
             mark=0;
             w=w+D(j)*learnrate*(trainset(j,end)-y).*trainset(j,1:trainn-1);%修正w
         end
     end
     if mark==1
         break;         
     end 
     
end

labal=sign(sum((trainset(:,1:trainn-1).*w)')+1)';%返回预测标签

e=numel(find((labal-trainset(:,end))~=0))/trainm; %返回错误率
end
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值