视频加载失败

课程

910 字
约 3 分钟

temp

机器学习与数据挖掘labs/lab10·更新于 2026-09-15

二、问题讨论

1. 实验收获

  • AdaBoost算法理解:通过本次实验,深入理解了AdaBoost算法“加法模型 + 前向分步算法”的精髓。它通过迭代训练一系列弱分类器(本实验中为决策树桩),并根据分类误差率动态调整分类器权重和样本权重,最终组合成一个强分类器。
  • 权重更新机制:代码实现中,D(样本权重)的更新是核心。被错误分类的样本权重在下一轮训练中会增大,从而迫使基学习器关注“难分类”的样本。
  • 集成效果:从实验结果可以看出,随着基学习器数量 T 的增加(从3到5再到11),集成学习器的准确率逐步提升,最终达到了100%的准确率,验证了通过集成弱分类器可以得到强分类器的理论。

2. 遇到的问题及解决思路

  • 问题1:决策树桩的构建
    • 现象:一开始对如何寻找“最佳”决策树桩感到困惑,不知道如何遍历所有可能的切分点。
    • 解决:在 buildStump 函数中,采用了三层循环结构:遍历每个特征 -> 遍历特征值的每次步长(切分点) -> 遍历大于/小于两种不等号方向。计算每种组合下的加权错误率,最终保留错误率最小的组合作为最佳树桩。
  • 问题2:样本权重的归一化
    • 现象:在更新样本权重 D 时,如果直接乘以指数项,数值可能会变得非常大或非常小,且不满足概率分布的性质(和不为1)。
    • 解决:代码中使用了 D = D * a / np.dot(D, a.T) 这一步。np.dot(D, a.T) 实际上就是归一化因子(Z值),确保更新后的权重 D 之和为1,符合AdaBoost算法的标准流程。
  • 问题3:代码调试与排错
    • 现象:在实现 calErr 时,对不等号的方向判断容易出错,导致错误率计算相反。
    • 解决:通过手动构造简单的测试用例,带入函数一步步验算,确保 lt(小于)和 gt(大于)逻辑下的分类判定正确。同时打印中间变量(如 errCnt)来辅助定位。
Profile Image of the Author
Sonder
好想要技术
这是公告标题
这只是一个公告
分类
标签
站点信息
构建平台
GitHub Actions
博客版本
Firefly v6.16.7
文章许可
CC BY-NC-SA 4.0
文章目录