机器学习 AdaBoost算法的MATLAB实现

继续实现《统计学习方法》的集成学习的算法,算法如下:

采用MATLAB2017A版本实现,最后和MATLAB自带的算法进行了比较

clear;clc;close all
% 待分类的数据,第一行x,第二行y
data = [0 : 9; 1 1 1 -1 -1 -1 1 1 1 -1];
X = data(1, :);
y = data(2, :);
minx = min(X);
maxx = max(X);
v0 = linspace(minx + .5, maxx + .5, 10);
% 初始化权值
w(1, :) = zeros(1, length(y)) + 1 / length(y);
f = @(v, x) (x < v) - (x > v);
% 弱分类器个数
n = 3;
[e, alpha, Z, v] = deal(zeros(n, 1));
% 如果误差大于0, 继续分类
for  i = 1 : n
    obj = @(v, w0)w0 * [(f(v, data(1, :)) ~= data(2,:));(f(v, data(1, :)) == data(2,:))]';
    values = cell2mat(arrayfun(@(x)obj(x, w(i, :)), v0, 'uni', 0));
    [e(i), idx]  = min(values(:));
    idx = ceil(idx / 2);
    v(i) = v0(idx);    
    alpha(i) = 1/2 * log((1 - e(i))/ e(i));
    Z(i) = w(i,:) * exp(-alpha(i) .* data(2,:) .* f(v(i), data(1, :)))';
    w(i + 1, :) = w(i, :) .* exp(-alpha(i) .* data(2,:) .* f(v(i), data(1, :))) / Z(i);
end
fprintf('自己编程计算\n');
disp(alpha);
%% MATLAB自带函数

Mdl = fitensemble(X',y','AdaBoostM1',3,'Tree');
% 
disp('MATLAB计算得到')
disp(Mdl.TrainedWeights)
% or


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值