adaboost提升算法的基本实现(机器学习实验)

417 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第19天,点击查看活动详情

大连海事大学机器学习adadboost实验:实现基本的adaboost提升算法。adaboost可以通过多个弱分类器的结合构成一个强分类器,这里将knn换成其他模型就是比较常用的模型融合方法了。当然这里只是简单的实现,仅供参考。

一. 算法描述

Adaboost算法是一种提升方法,将多个弱分类器,组合成强分类器。

AdaBoost,是英文”Adaptive Boosting“(自适应增强)的缩写,由Yoav Freund和Robert Schapire在1995年提出。

它的自适应在于:前一个弱分类器分错的样本的权值(样本对应的权值)会得到加强,权值更新后的样本再次被用来训练下一个新的弱分类器。在每轮训练中,用总体(样本总体)训练新的弱分类器,产生新的样本权值、该弱分类器的话语权,一直迭代直到达到预定的错误率或达到指定的最大迭代次数。

  1. 初始化训练数据(每个样本)的权值分布:如果有N个样本,则每一个训练的样本点最开始时都被赋予相同的权重:1/N。

  2. 训练弱分类器。具体训练过程中,如果某个样本已经被准确地分类,那么在构造下一个训练集中,它的权重就被降低;相反,如果某个样本点没有被准确地分类,那么它的权重就得到提高。同时,得到弱分类器对应的话语权。然后,更新权值后的样本集被用于训练下一个分类器,整个训练过程如此迭代地进行下去。

  3. 将各个训练得到的弱分类器组合成强分类器。各个弱分类器的训练过程结束后,分类误差率小的弱分类器的话语权较大,其在最终的分类函数中起着较大的决定作用,而分类误差率大的弱分类器的话语权较小,其在最终的分类函数中起着较小的决定作用。换言之,误差率低的弱分类器在最终分类器中占的比例较大,反之较小。

二. 数据描述

写出采用两个k近邻算法k=1和k=5构成的adaboost算法的两步计算过程及结果。保留两位小数。

image.png

题目原本数据如上,为便于后续的实验处理,将其转换成数据表格csv形式:

image.png

利用python的随机生成随机生成数据用于实验:

image.png

生成数据结果为csv格式:

image.png

三. 实验流程

1. 实现knn算法:

image.png

2. 计算基于knn算法的两个弱分类器的误差率并更新权值分布、计算系数:

image.png

3. 根据计算的系数,生成提升后的新分类器:

image.png

四. 实验结果

image.png

五. 讨论

实验结果我们通过两个标准准确率为60%、65%的弱分类器,新生成了一个标准准确率为85%的分类器,虽然没有达到强学习的标准,但是adaboost的提升效果已经非常可观了。

当前实验还有如下几点不足:

  1. 实验数据为随机生成,可能对于实际的指导意义不大。

  2. 分类器较少,准确率提升有限,没有达到强学习的要求。

  3. 模型仅为公式的套用,对于其他格式的数据还需要规范化处理。

源码地址

gitee