图解机器学习第三部分第九章——剪枝分类Bagging学习

n = 50;
x = randn(n,2);
y = 2*(x(:,1)>x(:,2))-1;
b=5000;
a=50;
Y=zeros(a,a);
X0=linspace(-3,3,a);
[X(:,:,1) X(:,:,2)]=meshgrid(X0);

for j=1:b %循环 5000 次
    db = ceil(2*rand);
    r=ceil(n*rand(n,1));
    xb=x(r,:);
    yb=y(r);
    [xs,xi]=sort(xb(:,db));
    el=cumsum(yb(xi));
    eu=cumsum(yb(xi(end:-1:1)));
    e=eu(end-1:-1:1)-el(1:end-1);
    [em,ei]=max(abs(e));
    c=mean(xs(ei:ei+1));
    s=sign(e(ei));
    Y=Y+sign(s*(X(:,:,db)-c))/b;
end

figure(1);
clf;
hold on;
axis([-3 3 -3 3]);
colormap([1 0.7 1;0.7 1 1]);
contourf(X0,X0,sign(Y));
plot(x(y==1,1),x(y==1,2),'bo');
plot(x(y==-1,1),x(y==-1,2),'rx');

上述代码是一个简单的分类器的实现,使用了随机决策树算法(Randomized Decision Tree)。下面是对代码的解释:

n = 50;:设定样本数量为 50。

x = randn(n,2);:生成一个大小为 n × 2 的随机样本矩阵 x。

y = 2*(x(:,1)>x(:,2))-1;:根据第一列和第二列的大小关系,生成样本的标签 y。如果第一列大于第二列,则标签为 1,否则为 -1。

b = 5000;:设定循环次数为 5000。

a = 50;:设定网格的分辨率为 50。

Y = zeros(a,a);:创建一个大小为 a × a 的全零矩阵 Y,用于存储分类器的输出结果。

X0 = linspace(-3,3,a);:在 -33 的范围内生成 a 个均匀分布的点,作为网格的横纵坐标。

[X(:,:,1), X(:,:,2)] = meshgrid(X0);:生成一个大小为 a × a 的网格,其中第一个网格行向量是 X0,第二个网格列向量是 X0。

进入循环 for j = 1:b,执行以下步骤:

	a、db = ceil(2*rand);:随机选择一个维度,即 12。

 	b、r = ceil(n*rand(n,1));:随机选择 n 个样本的索引,用于构建随机子集。

 	c、xb = x(r,:);:从样本矩阵 x 中选择相应索引的子集样本。

 	d、yb = y(r);:从标签向量 y 中选择相应索引的子集标签。

 	e、[xs, xi] = sort(xb(:,db));:将子集样本按照所选维度进行排序,并获取排序后的样本和索引。

 	f、el = cumsum(yb(xi));:计算排序后标签的累积和,用于计算划分点。

 	g、eu = cumsum(yb(xi(end:-1:1)));:将排序后的标签反向累积和。

	h、e = eu(end-1:-1:1) - el(1:end-1);:计算错误率的变化量。

 	i[em, ei] = max(abs(e));:找到变化量中的最大值及其索引。

 	j、c = mean(xs(ei:ei+1));:计算划分点的均值,作为分类器的决策边界。

 	k、s = sign(e(ei));:根据变化量的符号确定分类器的方向(正类还是负类)。

 	l、Y = Y + sign(s*(X(:,:,db) - c))/b;:根据分类器的方向和决策边界,更新分类器的输出结果 Y。

循环结束后,得到了基于随机决策树算法的分类器的输出结果 Y。

figure(1);:创建一个新的图形窗口。

clf;:清空当前图形窗口。

hold on;:保持图形窗口中已有的内容。

axis([-3 3 -3 3]);:设置坐标轴的范围。

colormap([1 0.7 1;0.7 1 1]);:设置颜色映射。

contourf(X0, X0, sign(Y));:绘制分类器的输出结果 Y 的等高线图。

plot(x(y==1,1), x(y==1,2), 'bo');:将标签为 1 的样本点以蓝色圆点的形式绘制。

plot(x(y==-1,1), x(y==-1,2), 'rx');:将标签为 -1 的样本点以红色叉号的形式绘制。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值