王 鈺,郭蘭英,程 鑫
長安大學(xué) 信息工程學(xué)院,西安 710064
在智能交通的發(fā)展歷程中交通流量預(yù)測起著重要的作用。精確和實時的交通流預(yù)測能夠用來分析道路規(guī)劃,減少交通事故傷亡,提供合理的出行意見[1]。對不同的重要交通路口的車流量短時間段進(jìn)行預(yù)測,得到盡可能準(zhǔn)確的預(yù)測結(jié)果,可以為相關(guān)部門的交通管制和廣大居民的出行提供及時有效的參考,緩解不同時刻交通壓力,在極大限度下充分利用道路資源。
目前為止,已經(jīng)有大量的方法被應(yīng)用到短時交通流的預(yù)測之中。短時交通流量的預(yù)測分為參數(shù)模型和非參數(shù)模型。參數(shù)模型包括自回歸移動平均模型(Autoregressive Integrated Moving Average,ARIMA)[2]和卡爾曼濾波[3]等。非參數(shù)模型包括KNN(K-Nearest Neighbors)[4]、SVR(Support Vector Regression)[5]、人工神經(jīng)網(wǎng)絡(luò)[6]等。
由于短時車流量的變化呈現(xiàn)出一定的非線性特征,且隨著時間變化這種非線性模型也十分靈活,為了能夠更好地擬合較為復(fù)雜的數(shù)據(jù),近年來更加關(guān)注于各種非線性預(yù)測模型。Oh 等[7]提出了基于KNN 的新的序列搜索算法來預(yù)測交通狀態(tài),該方法和傳統(tǒng)方法相比,顯著提高了預(yù)測的準(zhǔn)確性、效率和穩(wěn)定性。丁棟等[8]基于影響模型,將交通網(wǎng)絡(luò)中每個節(jié)點當(dāng)作一個馬爾科夫過程,整個網(wǎng)絡(luò)看成是多個馬爾科夫交互過程,再用EM算法訓(xùn)練得出模型參數(shù),從而預(yù)測短時交通流。文獻(xiàn)[9]首次提到了用回歸樹和隨機森林模型預(yù)測城市工作區(qū)域的車流量,并與神經(jīng)網(wǎng)絡(luò)和KNN 預(yù)測模型進(jìn)行比較,結(jié)果顯示隨機森林具有更高的預(yù)測準(zhǔn)確度。但文獻(xiàn)中只分析了一個大的區(qū)域的車流量預(yù)測問題,并未具體分析各路段的車流量預(yù)測問題,且沒有對隨機森林的超參調(diào)節(jié)和優(yōu)化進(jìn)行討論。支持向量機(Support Vector Machine,SVM)是一種通過尋求結(jié)構(gòu)化風(fēng)險最小來提高泛化能力的模型,解決了一般算法難以解決的非線性、高維識別、過學(xué)習(xí)的問題,但是SVM 模型在對大規(guī)模訓(xùn)練樣本求解二次規(guī)劃時會涉及到高階矩陣的計算,此時矩陣的存儲和求解會占用計算機的大量內(nèi)存,對硬件的要求比較高,而且傳統(tǒng)的支持向量機只能作二分類法,而無法處理實際應(yīng)用中遇到的多分類問題。孟飛等[10]通過定義粒子群聚攏度使其服從隨機分布,使得粒子群算法避免了陷入局部最優(yōu)解,并使用被該算法優(yōu)化過參數(shù)的小波神經(jīng)網(wǎng)絡(luò)對車流量進(jìn)行預(yù)測,證明了這種組合優(yōu)化算法的預(yù)測精度高于兩種單一算法。王洪德等[11]通過總結(jié)灰色系統(tǒng)不需要大規(guī)模原始數(shù)據(jù)的優(yōu)點和支持向量機良好的泛化能力,將灰色系統(tǒng)與支持向量機進(jìn)行了組合,將其應(yīng)用于地鐵客流量的預(yù)測上,取得了相對誤差僅3.61%的實驗結(jié)果。但灰色系統(tǒng)經(jīng)過累加合成之后就會失去有用的規(guī)律,而且在建模過程中沒有結(jié)合數(shù)據(jù)背后真正反映的特征與規(guī)律。文獻(xiàn)[12]首次在車流量預(yù)測中使用了深度學(xué)習(xí)模型,并結(jié)合多任務(wù)學(xué)習(xí)的方法預(yù)測整條道路的車流量,取得了較常見模型更好的預(yù)測準(zhǔn)確度,但該文獻(xiàn)中使用的是較早的基于受限玻爾茲曼機(Restricted Boltzmann Machines,RBM)的深度置信網(wǎng)絡(luò)(Deep Belief Network,DBN)。深度網(wǎng)絡(luò)結(jié)構(gòu)由具有關(guān)聯(lián)關(guān)系的多個隱含層組成,使用神經(jīng)網(wǎng)絡(luò)的隱層參數(shù)作為深度網(wǎng)絡(luò)新頂層預(yù)訓(xùn)練初始化參數(shù),映射上一個圖層的輸出得到抽象的輸入表示[13]。楊志勇[14]通過改進(jìn)神經(jīng)網(wǎng)絡(luò)的權(quán)值修正函數(shù)與學(xué)習(xí)率的調(diào)整方式,將其應(yīng)用在交通流量預(yù)測上。實驗結(jié)果表明,在交通流量預(yù)測上使用由灰色系統(tǒng)與神經(jīng)網(wǎng)絡(luò)組合的模型的預(yù)測精確度在一定程度上要高于兩種單一模型預(yù)測的精確度。
深度學(xué)習(xí)模型如深信度網(wǎng)絡(luò)[15]、堆疊自動編碼器[16]、LSTM(Long Short-Term Memory)遞歸神經(jīng)網(wǎng)絡(luò)[17]已經(jīng)用于車流量預(yù)測。但用LSTM 進(jìn)行車流量預(yù)測時并未考慮到多種因素的影響及處理方法。為了能夠更加準(zhǔn)確地預(yù)測短時交通車流量,本文提出了一種對車流量多種因素處理的Classify 方法,結(jié)合深度學(xué)習(xí)的LSTM遞歸神經(jīng)網(wǎng)絡(luò)對短時車流量進(jìn)行預(yù)測,然后對結(jié)果進(jìn)行誤差分析,提高了預(yù)測的精度。
為了提高短時車流量預(yù)測的準(zhǔn)確度,本文考慮了多種因素,如天氣、節(jié)假日等的影響,提出了一種對車流量多因素處理的Classify 方法,然后通過Long Short-term Memory 神經(jīng)網(wǎng)絡(luò)對車流量數(shù)據(jù)進(jìn)行訓(xùn)練預(yù)測,取得了更佳的效果,能夠更好地應(yīng)用到城市路口、收費站等重要交通要道的車流量預(yù)測。
本文依據(jù)陜西省高速公路收費站現(xiàn)場調(diào)查和歷史真實數(shù)據(jù),如表1所示2018年6月的收費站出口部分?jǐn)?shù)據(jù),根據(jù)陜西省收費公路計重收費技術(shù)要求(數(shù)據(jù)字典)進(jìn)行查詢。主要包括如下數(shù)據(jù):StartTime 表示開機時間;SerialNum 表示序列號;CardNetwork 表示卡網(wǎng)絡(luò)標(biāo)號;ExitTime表示出口日期及時間;ExitDate表示統(tǒng)計日期等。通過數(shù)據(jù)字典知ExitTime 是操作發(fā)生時的自然時間(只增加),其數(shù)據(jù)是可用數(shù)據(jù),每條數(shù)據(jù)代表一輛車,然后通過Oracel數(shù)據(jù)庫按時間排序并導(dǎo)出ExitTime數(shù)據(jù),保存為.CSV文件。
根據(jù)上步提取到數(shù)據(jù),通過降采樣的方式,每隔15 min進(jìn)行一次車流量統(tǒng)計。因為預(yù)測的準(zhǔn)確度取決于數(shù)據(jù)粒度,更細(xì)的粒度可以提高模型的性能[18]。每隔15 min同時也符合短時交通流要求。
本文采用2018年6月份的出口數(shù)據(jù)進(jìn)行實驗,通過上步的降采樣已經(jīng)統(tǒng)計出了每隔15 min 的短時車流量。通過查看文件,最后有一兩個7 月份的異常數(shù)據(jù),這時進(jìn)行了刪除操作。
表1 2018年6月收費站出口部分?jǐn)?shù)據(jù)
如若遇到缺失值,這里有多種插補方法,如均值/中位數(shù)/眾數(shù)插補、使用固定值插補、最近鄰插補、回歸插補以及插值法等。本文若遇缺失值使用的是拉格朗日插值法。該方法根據(jù)缺失值前后的數(shù)據(jù)值擬合一條多項式曲線來插值,該方法結(jié)果具有一般性。其原理大致如下:
對于一個平面上的已知n個點可以找到一個n-1次多項式,使該多項式曲線過這n個點。假設(shè)該多項式如下形式:
其中,ai為系數(shù),i∈[0,n-1],n為正整數(shù),x為橫坐標(biāo)值,y為多項式曲線對應(yīng)坐標(biāo)點函數(shù)值。將n個點的坐標(biāo)(x1,y1),(x2,y2)…(xn,yn)代入式(1)解出拉格朗日插值多項式為:
其中,L(x) 為多項式,(xi,yi) 為相應(yīng)的坐標(biāo)點,i∈[1,n],n為正整數(shù)。
通過上述的處理,如圖1 所示,選取了2018 年6 月19 號、2018 年 3 月 9 號、2017 年 10 月 2 號和 2018 年 6 月16號的數(shù)據(jù),繪出了當(dāng)日的車流量隨時間的變化圖,橫坐標(biāo)代表時間,縱坐標(biāo)代表當(dāng)前時刻的車流量信息。通過對車流量信息圖分析得,圖1 中(a)、(b)在正常情況下,早上8:00 左右和18:00 左右有兩個高峰,這大部分是由于上班早高峰和下班晚高峰引起的。而在8:00—18:00處于一定的穩(wěn)定狀態(tài)。這些現(xiàn)象符合車流量早晚高峰現(xiàn)象,通過對車流量的分析和預(yù)測,對交通部門和人們出行具有實際的指導(dǎo)意義。但是對于節(jié)假日和天氣影響下,與正常情況下的流量圖相比較,早晚高峰不明顯且在白天波動較大。如圖1(c)、(d)所示,(c)是在法定節(jié)假日中的交通流量圖,(d)是在雨天時候的交通流量圖。通過(c)、(d)對比也可發(fā)現(xiàn),法定節(jié)假日的車流量最高值明顯大于雨天的車流量最高值,因為雨天的不安全因素較多,所以駕駛車輛出行減少,而在節(jié)假日大多數(shù)人會選擇自駕游,因此駕駛車輛數(shù)量會增加。這些現(xiàn)象也符合平時人們的日常生活。
通過網(wǎng)絡(luò)查詢當(dāng)?shù)貧夂蝾愋停靼矊儆跍貛О霛駶櫞箨懶约撅L(fēng)氣候,四季分明,氣候溫和,雨量適中,雨季大部分集中于春夏兩季。因此本文選取的是六月份的數(shù)據(jù),且通過上面描述,已經(jīng)處理成為以15 min 為間隔的短時交通流數(shù)據(jù)。
圖1 車流量信息圖
2.3.1 天氣因素處理
通過天氣預(yù)報查詢天氣記錄,對短時交通流數(shù)據(jù)根據(jù)天氣記錄進(jìn)行篩選,根據(jù)式(3)得到不同的天氣影響強度因子,將天氣影響強度因子大于天氣閾值的時間段劃為異常天氣時間段。
其中,Vi表示不同天氣情況下的車流量,T表示當(dāng)月的總車流量,i代表不同天氣,例如晴天、陰天、小雨、中雨、大雨、霧天等,ci表示不同天氣的影響系數(shù),θi代表天氣影響強度因子,所述的天氣閾值為晴天時θi的取值。
通過分析,大雨天氣車流量明顯減少,此時c(ii代表大雨天)的取值與正常天氣情況下的取值相比較小,故ci越小,說明天氣影響程度越大。再由ci的導(dǎo)數(shù)求得θi,即天氣影響強度因子,θi越大,說明當(dāng)日天氣情況對當(dāng)日的車流量影響越大。例如,以2018年6月份收費站出口的部分?jǐn)?shù)據(jù)為例,統(tǒng)計6 月份總車流量T為855 418輛,并通過上式計算得到不同天氣影響強度值,如表2所示。
表2 不同天氣影響強度表
通過表2,知道每天的日交通量Vi、天氣情況以及當(dāng)月總車流量T=855 418 輛,于是分別求出影響系數(shù)ci,分別為0.032 606 281、0.032 351 435、0.029 995 862、0.030 846 908,考慮到天氣情況,分析得出天氣越不好(如小雨轉(zhuǎn)中雨),影響系數(shù)ci就越小。最后求出強度因子θi,其值分別為30.668 937 68、30.910 529 93、33.337 931 75、32.418 160 03,此時可以分析得出影響系數(shù)ci越小,強度因子θi越大。最終按照強度因子的大小,將天氣劃分為不同影響等級。如小雨天氣下強度因子為30.910 529 93,可將其影響等級劃分為1;小雨轉(zhuǎn)中雨天氣下強度因子為33.337 931 75,可將其影響等級劃分為2。
故通過θi的取值大小將i天氣(i可取晴天、陰天、雨天、霧天等)對短時交通車流量的影響劃分為4個等級:
0代表無影響;
1代表稍有影響;
2代表有影響;
3代表有較大影響。
保證車流量正常天氣狀況下的純潔度,對有影響的天氣下的數(shù)據(jù)進(jìn)行篩選操作,并分類存儲,如表3所示。
表3 天氣分類存儲數(shù)據(jù)表
若出現(xiàn)除此之外的惡劣天氣,包括中雪、大雪、沙塵暴、暴雨、臺風(fēng)等也可將其考慮進(jìn)去,但對于當(dāng)?shù)貋碚f,這些天氣極為罕見。
2.3.2 節(jié)假日因素處理
查詢節(jié)假日記錄,對得到的短時交通流數(shù)據(jù)根據(jù)節(jié)假日記錄進(jìn)行篩選,根據(jù)式(4)得到節(jié)假日影響系數(shù),將節(jié)假日影響系數(shù)大于節(jié)假日閾值的時間段劃為節(jié)假日時間段。
其中,Ej表示不同節(jié)假日情況下的車流量,βj表示節(jié)假日影響系數(shù),j表示不同節(jié)假日,所述節(jié)假日閾值為非節(jié)假日時βj的取值。
通過分析,比如十一黃金周車流量在十月明顯增加,此時Ej(此時j代表十一假期)的取值與非節(jié)假日取值相比較大,而當(dāng)月總的車流量T一定,故Ej的取值越大,則輸出βj越大,說明此時節(jié)假日對車流量的影響較大。根據(jù)法定節(jié)假日的放假天數(shù)及節(jié)日所在的季節(jié)及βj,可將影響等級劃分為3個等級:
等級1代表稍有影響;
等級2代表有影響;
等級3代表有較大影響。
為了使對車流量的預(yù)測更為準(zhǔn)確,如若數(shù)據(jù)中包含了節(jié)假日的數(shù)據(jù),就對其進(jìn)行篩選操作,如表4所示。
表4 節(jié)假日分類存儲數(shù)據(jù)表
循環(huán)神經(jīng)網(wǎng)絡(luò)常用來處理序列數(shù)據(jù)。循環(huán)神經(jīng)網(wǎng)絡(luò)因為有梯度消失這一問題,只有短期記憶。為了避免這一問題,循環(huán)神經(jīng)網(wǎng)絡(luò)產(chǎn)生了一個變體——長短期記憶網(wǎng)絡(luò)(LSTM)。LSTM在循環(huán)神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)上增加了一些門結(jié)構(gòu),通過門的控制將短期記憶與長期記憶聯(lián)合起來,一定程度上解決了普通的循環(huán)神經(jīng)網(wǎng)絡(luò)梯度消失的問題。LSTM由Hochreiter & Schmidhuber于1997年提出,并在近期被Alex Graves 進(jìn)行了改良和推廣。在很多問題上,LSTM 都取得了巨大的成功,并得到了廣泛的使用。
LSTM通過門結(jié)構(gòu)來控制和保護(hù)細(xì)胞狀態(tài)C,特點是使用了3個由乘法運算和sigmoid神經(jīng)網(wǎng)絡(luò)層構(gòu)成的門單元。第一步是通過遺忘門來實現(xiàn)的,可以理解為“記住之前內(nèi)容的多少”,這一步使用了sigmoid 函數(shù)和乘法操作來實現(xiàn),輸出為ft,然后輸入門單元決定需要更新的內(nèi)容,輸出為it,最后由輸出門單元在之前的基礎(chǔ)上進(jìn)行濾出,輸出為ot。各個門單元的更新如式(5)~式(7)所示:
其中,Wf、bf、Wi、W0、b0分別是各門單元的權(quán)值和偏移量,δ表示激活函數(shù)sigmoid。除去3 個門單元外,細(xì)胞狀態(tài)ct在不斷隨著時間流動,根據(jù)式(8)得到,根據(jù)式(9)用和ct-1更新ct。這里的Wc、bc分表代表權(quán)值和偏移量,使用tanh作為激活函數(shù)。這一層神經(jīng)網(wǎng)絡(luò)的輸出值ht由輸出門單元與使用tanh激活后的細(xì)胞狀態(tài)控制,如式(10)所示。
上述表達(dá)式中所使用的sigmoid激活函數(shù)如式(11)所示,能夠?qū)崝?shù)域映射到[0,1]的范圍內(nèi)。
綜上所述,LSTM 利用門單元,增強了循環(huán)神經(jīng)網(wǎng)絡(luò)的記憶力,通過訓(xùn)練數(shù)據(jù)不斷更新各個門單元的權(quán)值和偏移量,最終確定合適的值。在預(yù)測階段,利用訓(xùn)練好的模型對輸入數(shù)據(jù)進(jìn)行運算,得到最終的預(yù)測結(jié)果。
本文依據(jù)陜西省高速公路收費站現(xiàn)場調(diào)查和歷史真實數(shù)據(jù),通過Oracle 數(shù)據(jù)庫導(dǎo)出交通流的重要信息。本文考慮到天氣因素,取2018 年6 月份的數(shù)據(jù),以降采樣的方式每15 min統(tǒng)計一次,通過本文上面所述的數(shù)據(jù)預(yù)處理、多因素處理的Classify 方法對數(shù)據(jù)進(jìn)行處理。在該網(wǎng)絡(luò)中模型參數(shù)如下:batch為512,epochs為1 000,validation_split為0.05,Dropout為0.2。
觀察數(shù)據(jù),在6月16號到18號,連續(xù)三天都是小雨轉(zhuǎn)陰。這時以6 月1 號到18 號的數(shù)據(jù)為訓(xùn)練集,以6 月19號為測試集去預(yù)測6月19號的車流量情況,通過以往天氣數(shù)據(jù)得知6月19號也是以多云為主,天氣狀況與前三天不同,測試效果如圖2(b)所示,其中圖2(a)所示是訓(xùn)練過程的損失可視化,其過程是波動下降,大約在400 epochs 左右趨于穩(wěn)定。再將6 月16 號到18 號的數(shù)據(jù)刪除,排除連續(xù)三天的小雨轉(zhuǎn)陰的情況,再將排除天氣之后的數(shù)據(jù)作為訓(xùn)練集,以6 月19 號的數(shù)據(jù)為測試集,預(yù)測19 號的交通流量情況,預(yù)測效果如圖3(b)所示,其中圖3(a)是在排除天氣因素后訓(xùn)練數(shù)據(jù)的損失可視化,其過程也是波動下降,在0~200 epochs時下降較快。
圖2 未排除天氣因素時預(yù)測結(jié)果圖
如圖4 所示,(a)是未排除天氣因素時訓(xùn)練過程中的mean_absolute_percentage_error變化值;而(b)是排除天氣因素時訓(xùn)練過程中的mean_absolute_percentage_error變化值。通過肉眼很難辨別出兩者的好壞,通過運行程序,得出(a)在1 000 epochs時最后的輸出值為25 965.045 9;(b)在訓(xùn)練到1 000 epochs 時的輸出值為24 871.074 2;通過對mean_absolute_percentage_error 值比較,得出在排除天氣因素后訓(xùn)練數(shù)據(jù)時效果會較好。
通過結(jié)果對比來看,圖2(b)的擬合度不如圖3(b)的效果好。表5是圖2和圖3的多個模型評價指標(biāo)數(shù)據(jù)。
由于MAE、MSE、RMSE 使用的是平均誤差,而平均誤差對異常點較敏感,如果回歸器擬合的某個回歸值與真實值存在較大差異,將會導(dǎo)致平均誤差值較大,對最終的評估值產(chǎn)生較大影響,即平均值不具有魯棒性。通過分析比較以上的評估指標(biāo),選擇了MAPE、Explained_variance_score、R2作為最終的評估指標(biāo)。通過對比分析,如果不進(jìn)行多因素處理的Classify方法,此時的MAPE為 16.343 869%,Explained_variance_score 為 0.968 118,R2為0.968 096。而通過多因素處理的Classify 方法之后,MAPE降低了近5個百分點,Explained_variance_score提高了近1個百分點,同時R2值也提高了。即由實驗可得,通過多因素處理的Classify方法之后,預(yù)測精度有明顯的提高,能夠更為準(zhǔn)確地反映道路交通流的變化特征。
圖3 排除天氣因素時預(yù)測結(jié)果圖
圖4 訓(xùn)練過程中MAPE變化值
表5 不同評價指標(biāo)數(shù)據(jù)
本文提出了一種結(jié)合深度學(xué)習(xí)的短時車流量預(yù)測優(yōu)化方法,對車流量的不同因素進(jìn)行了分析,如天氣、節(jié)假日等,通過多因素Classify方法,對不同因素下的數(shù)據(jù)進(jìn)行了分類,降低了多種因素對車流量預(yù)測的強度,更進(jìn)一步保證了數(shù)據(jù)因素的單一性和純潔性。同時使用了深度學(xué)習(xí)的Long Short-Term Memory 神經(jīng)網(wǎng)絡(luò),在一定程度上解決了時間序列的記憶問題。LSTM 通過門的控制將短期記憶與長期記憶聯(lián)合起來,解決了普通的循環(huán)神經(jīng)網(wǎng)絡(luò)梯度消失的問題。經(jīng)過多次實驗和測試,與傳統(tǒng)的車流量預(yù)測方法相比,通過多因素Classify方法對多種因素進(jìn)行分析和處理,能夠很好地提高對不同情況下車流量預(yù)測的精度,使得預(yù)測更為準(zhǔn)確,能夠更好地反映道路交通的變化特征,對交通管理部門和人們出行具有實際的指導(dǎo)意義。