机器学习 AdaBoost算法的MATLAB实现

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

机器学习 AdaBoost算法的MATLAB实现_第1张图片

机器学习 AdaBoost算法的MATLAB实现_第2张图片

机器学习 AdaBoost算法的MATLAB实现_第3张图片

机器学习 AdaBoost算法的MATLAB实现_第4张图片

采用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


你可能感兴趣的:(Matlab,机器学习)