
摘 要:隨著城市化進程的增長,城市生活垃圾的處理也成為了城市發展與規劃的重點。因此,不少城市開始投入智慧城市的建設,很多區域開始嘗試在垃圾桶上安裝傳感器,根據傳感器的數據及時通知城管部門安排清運車輛,及時規劃清運線路。本文調整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--),男(漢族),浙江慶元人,工程師,在職研究生(在讀),主要研究方向:大數據、人工智能。