APP下载

基于XGBoost算法城市垃圾清理预测

2019-10-30姚兴泉

科学与财富 2019年30期

摘 要:随着城市化进程的增长,城市生活垃圾的处理也成为了城市发展与规划的重点。因此,不少城市开始投入智慧城市的建设,很多区域开始尝试在垃圾桶上安装传感器,根据传感器的数据及时通知城管部门安排清运车辆,及时规划清运线路。本文调整XGBoost(Extreme Gradient Boosting)算法,将算法应用到垃圾清运量的预测上。本文通过实验结果研究表明,预测模型输出结果可以比较好的拟合实际发生的情况,根据实验数据平均误差在2%以内,符合预期效果。总的来说,XGBoost城市垃圾清运预测模型具有精高,模型的构建效率高,易于通过软件实现,可以在一定场景下满足部分系统需求,具有一定的实用价值。

关键词:垃圾运量预测;预测精度;XGBoost;预测因子

1.引言

XGBoost(Extreme Gradient Boosting)算法是通过若干弱分类器经过不断迭代获得一个比较准确的分类预测效果。目前,在电子商务销售预测、事件分类、客户行为分类、电力负荷预测等领域均取得了良好的效果。本文拟调整该算法,将算法应用到垃圾清运量的预测上。

2.算法说明

XGBoost的算法思路是不断累加逼近目标,也就是说每次通过一个弱分类器来进行预测,通过不断迭代预测值将不断接近目标函数。其基础模型可以表述为:

显然,上述模型中是通过不断累积逼近目标,从而达到预测效果。其中,X为要预测的样本,T为森林的规模即迭代次数,经过T轮迭代逐步累积获得最终的预测。

XGBoost在每一步的累加过程中,都会选择一个累加方向,其借鉴了梯度提升的思想,根据损失函数选择方向。在不断逼近过程中为了防止过拟合,在损失函数中加入了正则项,保证了输出模型的泛化能力。算法框架,在迭代效率方面提升的巧妙之处在于没有采用搜索的方式,而是直接通过损失函数的一阶导数和二阶导数对候选者筛选,从而获得了良好的性能。

在算法的实现上,XGBoost的流程也比较易于实现。在数据训练过程中,首先,算法框架会接收样本数据并初始化预测值。在用户使用算法框架之前,要提前根据业务场景预置损失函数。然后,计算每一个样本的预测值在损失函数中的一阶导数和二阶导数。接下来就是,根据上述导数信息和差值生产下一颗决策树。迭代的最后一步是,利用新生成的决策树预测样本,并将结果累加起来。最后,不断迭代更新累计,直到达到迭代条件生成输出模型。显然,整个计算过程是一个串行化的过程,但是在迭代过程中会反复使用样本,因此算法可以利用缓存方法提高执行效率。

从上述过程分析,XGBoost的关键是损失函数,是通过损失函数的计算不断更新预测效果。那么,XGBoost的损失函数定义为:

上述函数由三个部分构成,从左往右分别为损失项,正则项和常数项。损失项的目的是评价样本预测与真实值得差距,从而不断逼近。正则项和常数项的目的是为了防止过拟合采取的控制手段。同时,正则项在选择候选树的时候起到了筛选作用,常数项加快了迭代过程。

在损失函数的巧妙之处在于可以对损失项进行泰勒展开式,然后取近似值,近似的取泰勒展开式的前两项,即一阶导数和二阶导数。则原函数转换为如下:

其中gi,hi就是一阶导数和二阶导数,这样就可以直接使用gi,hi更新样本,从而降低了计算复杂度。

3.XGBoost算法应用

在智慧城市的传感器数据收集中会产生大量的基础数据,传感器会定期收集垃圾桶的垃圾占比数据,不断的发送给数据平台,因此基础数据会非常多。由于垃圾桶是一个公共物品并且容易遭到意外的破损,因此其内的传感器也会存在一定的破损概率,此期间的数据可能无法及时获取。根据实际情况,影响垃圾产生的主要因素之一是周边人口,本次采样的数据来源也主要是生活垃圾。另外,平时产生的生活垃圾与节假日期间产生的垃圾规模也是存在差异的。

根据上述分析,由于基础数据量比较大,可以通过以区域作为一个数据采样点,例如小区、居民区等区域,计算此区域内的垃圾暂存容量。对于该区域收集的大量传感器基础数据可以取该区域内所有垃圾桶使用占比的均值来表示。因此,可以构建垃圾暂存容量、平均使用占比、辐射人口、是否为节假日、传感器坏损率、前一周同比使用占比、前一天同比使用占比个这七个维度构成的数据描述作为训练的输入。所预测的为下一个清运周期。目前,收集了(2018年9月 至 2018年12月)三个月的数据,经过上述加工最终数据规模为134区域,共12194笔记录。本文以该数据样本进行训练获取预测模型。

本算法通过Python3.6实现,数据同步来源于智慧城市云端服务接口。算法的训练环境为英特尔酷睿i7,四核心八线程 3.06GHz主频,运行内存为8G,64位Linux 2.6内核。XGBoost底层是构建在C++基础之上,然后通过python进行代码封装,易于编程和使用。Python的基础库是基于Anaconda环境构建的,通过git下载使用python封装的XGBoost代码,然后根据本文业务特征编写逻辑。

在XGBoost算法框架中,可以通过参数设置来调整算法以适应应用场景。XGBoost要调整的参数包括:通用参数、boost参数和学习目标参数三类。针对本文讨论的范围,主要设置基于树的模型进行训练,最大树的深度设置为7,为了防止过拟合收缩步长参数设置为0.4,迭代次数设置为100。在目标函数的参数设置为“count poisson” 输出结果为poisson分布。 在poisson回归中,max_delta_step的缺省值为0.7。调整其中75%的样本数据为训练数据,25%的样本数据为验证数据。

综合上来看XGBoost有比较好的综合性,准确率和召回率均比较合理,随机森林虽然准确率较高但是召回率较差,因为模型泛化能力较弱。贝叶斯在运算时间上略有优势,但是综合上来说XGBoost更适合本文的应用特点。XGBoost本质上一颗决策树,在屬性的贡献程度上一次排名前三的为垃圾暂存容量、前一周同比使用占比、辐射人口,也就是说这三个指标更能刻画数据。

结 论:

城市垃圾清运是城市管理调度的一项重要工作之一。本文以智慧城市建设为数据基础,以垃圾清运数据预测作为研究背景,通过研究XGBoost算法应用在垃圾清运预测场景,借助算法执行效率高、准确度高、灵活性强、易于实现的特点。在垃圾清运数据中,数据并不集中,在实际中可能存在传感器故障等问题导致数据缺失。计算过程中利用缓存技术高效的让boosting迭代过程中可以共享内存提高执行效率。本文通过分析垃圾清运数据,构建了垃圾暂存容量、平均使用占比、辐射人口、是否为节假日、传感器坏损率、前一周同比使用占比、前一天同比使用占比,系统以上一个清运周期为输入下一个清运周期为输出建立预测模型。本文通过实验结果研究表明,预测模型输出结果可以比较好的拟合实际发生的情况,根据实验数据平均误差在2%以内,符合预期效果。总的来说,XGBoost城市垃圾清运预测模型具有精度高,模型的构建效率高,易于通过软件实现,可以在一定场景下满足部分系统需求,具有一定的实用价值。

参考文献:

[1]基于灰色预测模型的辽宁省城市生活垃圾产生量预测[J].王东明,吕洪涛.环境保护与循环经济.2013(04)

[2]基于BP神经网络的武汉市生活垃圾清运量预测研究[J].夏晶,张旺.湖北工业大学学报.2016(06)

作者简介:

姚兴泉(1992.04--),男(汉族),浙江庆元人,工程师,在职研究生(在读),主要研究方向:大数据、人工智能。