决策树桩分类器的MATLAB代码解析

决策树桩分类器的MATLAB代码解析

原代码摘自《统计机器学习导论》第30章 集成学习
分享学习这部分代码的一点笔记

x=randn(50,2);  
# 返回一个50*2的正态分布矩阵(i.e. 两组符合正态分布的数组)

y=2*(x(:,1)>x(:,2))-1; 
# 返回两个数组大小比较的结果(i.e. 第一组大结果为1,第二组大结果为-1)

X0=linspace(-3,3,50); 
# -3~3之间距离相等的50个点(返回一个50*1的矩阵)

[X(:,:,1) X(:,:,2)]=meshgrid(X0);  
# [X,Y] = meshgrid(x,y) 基于向量 x 和 y 中包含的坐标返回二维网格坐标。X 是一个矩阵,每一行是 x 的一个副本;Y 也是一个矩阵,每一列是 y 的一个副本。坐标 X 和 Y 表示的网格有 length(y) 个行和 length(x) 个列。这里副本的意思就是copy。
# [X,Y] = meshgrid(x) 与 [X,Y] = meshgrid(x,x) 相同,并返回网格大小为 length(x)×length(x) 的方形网格坐标。也就是50*50在这个例子里。
#其实这两句话是为了建立一个3*3的坐标系。

d=ceil(2*rand); 
# 可能返回1或2(选取第一组数或者第二组数)
[xs,xi]=sort(x(:,d));
# [B,I] = sort(A) 还会为上述任意语法返回一个索引向量的集合。I 的大小与 A 的大小相同,它描述了 A 的元素沿已排序的维度在 B 中的排列情况。例如,如果 A 是一个向量,则 B = A(I)。
# xs: x sorted
# xi: x index

el=cumsum(y(xi));
eu=cumsum(y(xi(end:-1:1))); 
# cumsum返回累计和
e=eu(end-1:-1:1)-el(1:end-1);
# eu(end) = el(end) =0
[em, ei]=max(abs(e));
# 返回最大值,以及最大值对应的index
c=mean(xs(ei:ei+1));
s=sign(e(ei));
Y=sign(s*X(:,:,d)-c));
# 决策器 包含-1和1

figure(1); clf; hold on; axis([-3 3 -3 3]);
colormap([1 0.7 1; 0.7 1 1]); # 两个颜色
conturf(X0,X0,Y); 
# 等高线: 决策边界平行于其中一个坐标轴
plot(x(y==1,1),x(y==1,2),'bo');
# 横坐标为x(:,1), 纵坐标为x(:,2), 返回横坐标比纵坐标大的点为蓝色小圆点
plot(x(y==-1,1),x(y==-1,2),'rx');
# 返回纵坐标比横坐标大的点为红色小叉叉

代码的结果图如下图所示——
代码结果图

这里最好的分类为y=x这条直线,可见决策树桩这个弱分类器的分类效果不佳。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值