论文部分内容阅读
Boosting算法是一类可以通过集成弱学习器来提高算法分类精度的机器学习算法,因为其泛化性能良好且高效易用而获得广泛的应用。但当面临大规模的数据集时,传统的单机集中训练会耗费大量的时间,而且对内存资源也是一个挑战。而将单机的标准Boosting算法扩展到分布式环境下以降低训练时间,缓解单机内存压力是一种有效的应对方式。本文首先介绍了两种现有的分布式Boosting算法并分析其优缺点,然后提出一种基于代表子集策略的分布式Boosting算法,接着在Spark分布式计算平台下进行该算法的性能实验,最后将该算法的思路与基于AdaBoost算法的人脸检测方法进行结合。论文的主要内容如下:第一,介绍DistBoost和PreWeak这两种现有的分布式Boosting算法,分析了前者节点的局部训练容易过拟合和后者节点之间需要大量通信次数的问题。第二,在前人对博弈论和Boosting算法联系的研究结果上,提出了一种基于代表子集的分布式Boosting算法,可有效缓解节点局部训练过拟合,同时减少节点间通信次数。其基本思路是从各个分布式节点的训练样本集上选取一个小的代表子集,然后发送到中心节点汇聚然后运行Boosting算法。代表子集需要满足两个条件,首先,它是由在本节点上分类难度较大的样本组成,其次,其训练出的学习器在本节点剩余的数据集中测试的分类误差最小。第三,借助Spark分布式计算平台,采用5台阿里云的ECS云服务器进行实验,对该环境下代表子集Boosting算法的三个自身参数及Spark提交作业的两个运行参数进行了测试和调优,并通过实验对比了标准的单机Boosting算法、DistBoost、PreWeak和本文的代表子集Boosting算法在四个训练数据集上模型训练时间和模型预测的准确率两方面的性能,验证了代表子集Boosting算法可以在稳定接近单机Boosting算法的准确率的同时,有效降低了模型的训练时间。第四,将代表子集Boosting算法的思路与基于AdaBoost算法的人脸检测方法相结合,使该算法的分类器的训练过程扩展到分布式环境下,实验结果表明,这使得人脸检测分类器模型的训练时间相比单机训练的情形明显降低。