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

x = randn(50,2); % 随机初始化 50 个值
y = 2 * (x(:,1)>x(:,2))-1; % 比大小,若第一列的值大于第二列赋值为1,否则为-1。
X0 = linspace(-3,3,50);% 初始化 -3 ~ 3 均匀分布的 50 个值
[X(:,:,1) X(:,:,2)] = meshgrid(X0); % 生成一个 50 × 50 的网格。
% 第一个网格行向量是X0,第二个网格列向量是X0

d = ceil(2 * rand); % 随机选择一列
[xs,xi]=sort(x(:,d));% 将这一列从小到大排序
el=cumsum(y(xi)); %该向量中第m行的元素是y中第1行到第m行的所有元素累加和
eu=cumsum(y(xi(end:-1:1))); %把xi反过来赋给y
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));% sign函数:大于0 返回1,小于0 返回-1。
Y=sign(s*(X(:,:,d)-c));

figure(1);
clf;
hold on;
axis([-3 3 -3 3]);
colormap([1 0.7 1;0.7 1 1]);
contourf(X0,X0,Y);
plot(x(y==1,1),x(y==1,2),'bo');
plot(x(y==-1,1),x(y==-1,2),'rx');
以下是对代码段的解释:

x = randn(50,2) 随机生成一个 502 列的矩阵,表示包含50个样本的数据集。

y = 2 * (x(:,1)>x(:,2))-1 通过比较第一列和第二列的值,将大于关系的结果转化为1,否则为-1,生成一个标签向量,用于表示样本的类别。

X0 = linspace(-3,3,50) 生成一个包含50个在-33之间均匀分布的值的向量。

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

d = ceil(2 * rand) 随机选择一个12作为索引。

[xs,xi] = sort(x(:,d)) 对选择的一列进行排序,并返回排序后的值和对应的索引。

el = cumsum(y(xi)) 计算排序后的标签向量 y 累加和的向量 el。

eu = cumsum(y(xi(end:-1:1))) 将排序后的索引反向,再计算反向排序的标签向量 y 累加和的向量 eu。

e = eu(end-1:-1:1) - el(1:end-1) 计算差分向量 e,通过相邻元素的差值计算出分类器在每个阈值处的错误率。

[em,ei] = max(abs(e)) 找到错误率向量 e 中绝对值最大的元素和其对应的索引。

c = mean(xs(ei:ei+1)) 在排序后的数据中,取错误率最大的两个元素对应的值的均值,作为分类器的阈值。

s = sign(e(ei)) 根据错误率向量 e 中最大错误率的符号确定分类器的符号。

Y = sign(s * (X(:,:,d) - c)) 根据分类器的符号和阈值,计算在网格上的预测结果。

可视化部分,通过 contourf 函数绘制分类器的决策边界,并使用蓝色和红色的点表示样本点的类别。


注意:两个累加和向量 el 和 eu 是为了计算分类器在每个阈值处的错误率。在代码的后续部分,通过计算差分向量 e,来确定错误率的变化情况,并找到错误率最大的阈值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值