曹旦旦, 范書瑞, 張 艷, 夏克文
(河北工業(yè)大學(xué)電子息信工程學(xué)院, 天津 300401)
如何精確地預(yù)測短時(shí)間內(nèi)某區(qū)域需要的共享單車數(shù)量從而合理地進(jìn)行調(diào)度是一個(gè)亟待解決的問題?,F(xiàn)如今已經(jīng)有一些機(jī)器學(xué)習(xí)方法,比如隨機(jī)森林、支持向量機(jī)等都已經(jīng)在共享單車的研究中被廣泛使用。文獻(xiàn)[1]采用傳統(tǒng)最小二乘法(ordinary least square,OLS)線性模型、二分類和多分類Logit模型等對單車需求量進(jìn)行預(yù)測,但是需要大量觀測數(shù)據(jù),且具有明顯的局域性,回歸關(guān)系不能很好符合實(shí)際情況;Bacciu等[2]、Bajari等[3]采用支持向量機(jī)和隨機(jī)森林模型預(yù)測,但是并沒有詳細(xì)介紹如何預(yù)測短時(shí)間內(nèi)的單車使用量情況。
為了提高計(jì)算精度、準(zhǔn)確預(yù)測每天每小時(shí)的紐約市共享單車需求量,其預(yù)測方法已由以往的機(jī)器學(xué)習(xí)模型,如隨機(jī)森林(random forest,RF)、支持向量機(jī)(support vector machine,SVM)和人工神經(jīng)網(wǎng)絡(luò)(artificial neural network,ANN)等[4],向深度學(xué)習(xí)方法轉(zhuǎn)變。BP神經(jīng)網(wǎng)絡(luò)具有良好的組織和適應(yīng)性,其數(shù)據(jù)樣本經(jīng)過自己學(xué)習(xí)的過程,就能夠解決非線性問題[5],但是不足之處就是在訓(xùn)練的過程中容易形成局部的最大值和最小值的現(xiàn)象;循環(huán)神經(jīng)網(wǎng)絡(luò)(recurrent neural network,RNN)擅長處理連續(xù)的時(shí)間序列數(shù)據(jù),但運(yùn)算中容易發(fā)生梯度消失、梯度爆炸等問題。針對RNN模型存在的不足來進(jìn)行改進(jìn)得到的模型就是長短期記憶(long short-term memory,LSTM)模型,直到現(xiàn)在該模型已經(jīng)在很多時(shí)間序列研究領(lǐng)域被廣泛使用并得到了較好的效果[6-8]。在爬取紐約共享單車數(shù)據(jù)的基礎(chǔ)上對數(shù)據(jù)進(jìn)行特征分析,分析影響單車需求量的主要因素;并提出基于LSTM循環(huán)神經(jīng)網(wǎng)絡(luò)方法對共享單車短時(shí)需求量進(jìn)行預(yù)測,然后與傳統(tǒng)的RNN和BP神經(jīng)模型預(yù)測結(jié)果比較。預(yù)期LSTM模型在該數(shù)據(jù)集上能有一個(gè)較好的預(yù)測效果。
LSTM最初是在1997年由Hochreiter等[9]提出,是在循環(huán)神經(jīng)網(wǎng)絡(luò)RNN的基礎(chǔ)上改進(jìn)而來的[10]。LSTM神經(jīng)網(wǎng)絡(luò)和RNN不同的地方是,它不僅增加了具有保存以往信息的記憶存儲(chǔ)單元,通過反向傳播算法[11]對數(shù)據(jù)進(jìn)行訓(xùn)練,它還解決了RNN梯度消失和長期依賴性缺失的問題。LSTM廣泛應(yīng)用于各個(gè)方面,比如自然語言翻譯和語音識別等,還可以應(yīng)用于時(shí)間序列的預(yù)測[12],都具有較好的效果。
LSTM的網(wǎng)絡(luò)結(jié)構(gòu)是利用門的控制機(jī)制來工作的,包含一個(gè)記憶細(xì)胞和3個(gè)控制門,分別為輸入門、輸出門和遺忘門[13]。網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。圖1中的3個(gè)方框代表細(xì)胞在不同時(shí)序的狀態(tài),中間方框中帶有的小框是激活函數(shù)為Sigmoid的前饋網(wǎng)絡(luò)層[14],具有tanh的小方框是具有激活函數(shù)tanh的前饋網(wǎng)絡(luò)層,Xt代表t時(shí)刻的輸入,ht代表t時(shí)刻細(xì)胞的狀態(tài)值。LSTM各個(gè)門的工作原理如下。
圖1 LSTM網(wǎng)絡(luò)結(jié)構(gòu)Fig.1 LSTM network structure
it=δ[Wi(Xt,ht-1)+bi]
(1)
(2)
其次,計(jì)算遺忘門在時(shí)間t的激活值ft,公式為
ft=δ[Wf(Xt,ht-1)+bf]
(3)
通過上述兩個(gè)步驟,就能夠計(jì)算出來細(xì)胞在時(shí)間t的狀態(tài)更新值Ct,公式為
(4)
計(jì)算輸出門的值,公式為
Ot=δ[Wo(Xt,ht-1)+bo]
(5)
ht=OttanhCt
(6)
經(jīng)過上面的4個(gè)計(jì)算步驟,LSTM就可以有效地利用輸入來使其具有長時(shí)期的記憶功能。
首先,在Windows操作環(huán)境下構(gòu)建CPU版本的Tensorflow框架。Tensorflow不但能實(shí)現(xiàn)深度學(xué)習(xí)算法,還能實(shí)現(xiàn)例如回歸預(yù)測、聚類分析等算法。LSTM模型使用Tensorflow提供的LSTMCell模塊進(jìn)行搭建,該模塊將LSTM的隱藏層封裝在Tensorflow內(nèi),并包含3個(gè)門結(jié)構(gòu),分別是遺忘門、輸入門和輸出門結(jié)構(gòu),隱藏層的數(shù)目要根據(jù)實(shí)際情況來定,所設(shè)置的隱藏層的數(shù)目為10。為了避免出現(xiàn)過擬合現(xiàn)象,采用Dropout機(jī)制來增強(qiáng)模型的泛化能力。
以往的搭建網(wǎng)絡(luò)的過程是以網(wǎng)絡(luò)節(jié)點(diǎn)為單位來進(jìn)行網(wǎng)絡(luò)布局,而使用Tensorflow搭建LSTM框架的過程是以網(wǎng)絡(luò)層數(shù)為單位來進(jìn)行模型的構(gòu)建,Tensorflow中的LSTMCell包含多個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)的輸入和輸出層,它們都由向量表示,向量的長度就是該層節(jié)點(diǎn)的個(gè)數(shù)。
在搭建模型和訓(xùn)練模型的過程中,最重要的一點(diǎn)是參數(shù)的初始化,不同類型的特征參數(shù)需要進(jìn)行不同類型的初始化,這對模型的訓(xùn)練效果具有十分重大的影響。對連續(xù)性參數(shù)變量初始化的方式為:dummies=pd.get_dummies(rides[each],prefix=each, drop_first=False),初始化離散參數(shù)變量的方法是:mean, std =data[each].mean(), data[each].std()。用批量隨機(jī)梯度下降法對模型進(jìn)行訓(xùn)練。
在Windows7系統(tǒng)中使Anaconda Navigator3(Jupyter notebook),Python3.6為實(shí)驗(yàn)平臺進(jìn)行仿真實(shí)驗(yàn),將Tensorflow所提供的LSTM等神經(jīng)網(wǎng)絡(luò)模型用于仿真實(shí)驗(yàn)。
采用網(wǎng)絡(luò)爬蟲的方法,從美國國家海洋和大氣管理局官方網(wǎng)站氣象服務(wù)中心提供的紐約市歷史天氣數(shù)據(jù)集中爬取紐約市的歷史氣象數(shù)據(jù),所爬取的數(shù)據(jù)范圍從2015年1月—2018年12月的小時(shí)數(shù)據(jù),共計(jì)48個(gè)月,共35 064條數(shù)據(jù)。其中某些數(shù)據(jù)存在缺失現(xiàn)象,其數(shù)據(jù)字段如表1所示。
表1 實(shí)驗(yàn)中使用的數(shù)據(jù)集Table 1 Data set used in the experiment
3.3.1 氣象因子的影響
共享單車是一種受氣象影響顯著的交通工具,圖2所示為2015—2018年紐約地區(qū)共享單車租借總量與4種氣象因子的相關(guān)性熱力分布圖。
圖2 氣象因子與單車使用量的相關(guān)性熱力圖Fig.2 Correlation between meteorological factors and bicycle usage
由圖2可得,共享單車需求量與4種氣象因子之間都存在相關(guān)性。溫度與租車人數(shù)正相關(guān),寒冷抑制租車需求;濕度與租車人數(shù)負(fù)相關(guān),雨雪天氣抑制了單車租借需求;單車需求量與溫度和濕度的相關(guān)性最高,分別為0.41和-0.19。
3.3.2 時(shí)間因子的影響
(1)共享單車使用量受時(shí)間影響,利用2015—2018年美國紐約地區(qū)共享單車項(xiàng)目數(shù)據(jù)進(jìn)行時(shí)序變化規(guī)律分析,結(jié)果如圖3所示。
共享單車使用在2015年1月—2018年12月期間,總體用量逐年上升,每一年從1月開始租車人數(shù)就迅速增加,直到6月用車人數(shù)最多,隨后至10月用車人數(shù)緩慢減少,在10月之后大幅減少,這顯然與季節(jié)有關(guān)。在1月、2月和12月這樣的比較冷的季節(jié),用車的人數(shù)工作日高于非工作日;在溫暖和涼爽的季節(jié)(5—11月),用車的人數(shù)非工作日數(shù)高于工作日??梢缘贸鼋Y(jié)論,時(shí)間因素如年和月份也會(huì)對租借數(shù)量產(chǎn)生重大影響,因?yàn)樵路莺图竟?jié)對租借數(shù)量的影響是一致的,月份更詳細(xì),因此要留下月份特征,刪除季節(jié)特征。
(2)圖4和圖5進(jìn)一步考察了2015—2018年平均每小時(shí)和每星期對共享單車的使用量的影響,并繪制折線圖和箱線圖。
圖4 2015—2018年平均每小時(shí)共享單車使用量Fig.4 Average bicycle usage per hour for 2015—2018
圖5 2015—2018年平均每星期共享單車使用量Fig.5 Average bicycle usage per week in 2015—2018
從圖5中可以看出,周一到周五租車人數(shù)相對較多,每天有兩個(gè)高峰期,分別是7:00—8:00點(diǎn)左右和17:00—18:00點(diǎn)左右,正好是工作日的上下班高峰期;此外,從12:00—16:00點(diǎn)的使用量較高,這進(jìn)一步反映了時(shí)間段,特別是高峰時(shí)段,是影響自行車需求的重要因素。
(1)填寫缺失數(shù)據(jù):通過上述方法獲得的數(shù)據(jù)為不完整數(shù)據(jù),需要填寫缺失數(shù)據(jù)以便于在接下來的預(yù)測工作中使用。
(2)虛擬變量:通過Pandas庫中的get_dummies()函數(shù)對季節(jié)、月份和天氣等離散變量創(chuàng)建二進(jìn)制虛擬變量。
(3)調(diào)整目標(biāo)變量:為了更輕松地訓(xùn)練模型,需要將溫度、濕度和風(fēng)速等連續(xù)變量標(biāo)準(zhǔn)化,使它們的均值為0,標(biāo)準(zhǔn)差為1;同時(shí)保存換算因子,在后續(xù)進(jìn)行預(yù)測時(shí)可以還原數(shù)據(jù),其公式為
(7)
式(7)中:max表示所選取的數(shù)據(jù)中特征的最大值;min表示數(shù)據(jù)特征的最小值;xij為原始數(shù)據(jù);Xij為標(biāo)準(zhǔn)化后的數(shù)據(jù)。
3.5.1 評價(jià)指標(biāo)
為了評估LSTM預(yù)測模型的預(yù)測性能,選擇均方根誤差(root mean square error,RMSE)指數(shù)來評估模型的預(yù)測精度,RMSE是用來衡量模型預(yù)測值與真實(shí)值之間的偏差的物理量,值越小,預(yù)測出來的效果越好,公式為
(8)
3.5.2 網(wǎng)絡(luò)模型的擬定
研究使用單層的LSTM模型對紐約市共享單車需求量進(jìn)行預(yù)測。利用深度學(xué)習(xí)庫中Tensorflow 中所提供的LSTMCell模型來預(yù)測出每小時(shí)的單車需求量。通過add函數(shù)將多個(gè)網(wǎng)絡(luò)層進(jìn)行線性堆疊。通過不斷的調(diào)試和搜索,最終確定的網(wǎng)絡(luò)結(jié)構(gòu)參數(shù)的過程如下。
(1)層數(shù)設(shè)置:構(gòu)建了單層LSTM模型結(jié)構(gòu),輸入的共享單車數(shù)據(jù)的總維數(shù)為60,所設(shè)定的的隱含層的數(shù)目為10層,輸入層是12,輸出層是1。
(2)參數(shù)設(shè)置:采用的激活函數(shù)為ReLU激活函數(shù),每批次訓(xùn)練樣本數(shù)batch_size設(shè)置為10,時(shí)間步長time_steps設(shè)置為10,學(xué)習(xí)率learning_rate設(shè)置為0.000 5,訓(xùn)練數(shù)據(jù)的截?cái)嚅L度num_steps為50,向量的維度lstm_size為256。為了在訓(xùn)練的過程中防止過擬合現(xiàn)象發(fā)生,將每一層網(wǎng)絡(luò)節(jié)點(diǎn)的舍棄率Dropout設(shè)置為0.75。
(3)維度轉(zhuǎn)換:輸入特征時(shí),需要將張量tensor轉(zhuǎn)換為二維計(jì)算,計(jì)算結(jié)果作為隱藏層的輸入。,最后再將 tensor 轉(zhuǎn)成三維作為 lstm cell 的輸入。通過get_batches批量處理數(shù)據(jù)。
3.6.1 網(wǎng)絡(luò)訓(xùn)練
基于紐約市2015—2018年每小時(shí)的共享單車使用量數(shù)據(jù)35 064條,其中訓(xùn)練數(shù)據(jù)35 033條,剩下的數(shù)據(jù)用于測試。每次訓(xùn)練的樣本數(shù)batch_size=10,訓(xùn)練輪次數(shù)為epoch = 100,每輪指定模型的相應(yīng)測試數(shù)據(jù),并輸出每次訓(xùn)練記錄。訓(xùn)練模型時(shí)可以更改迭代次數(shù),迭代的次數(shù)越多預(yù)測越準(zhǔn)確,但缺點(diǎn)是需要的時(shí)間也長,本次實(shí)驗(yàn)的迭代次數(shù)為6 600,使用的損失函數(shù)為均方誤差RMSE,選擇自適應(yīng)矩估計(jì)Adam為優(yōu)化器。圖6所示為模型在訓(xùn)練的過程中損失函數(shù)下降的過程,從圖6中可以看到,模型在訓(xùn)練集上的損失函數(shù)不斷下降并趨近于0。圖7所示為模型在驗(yàn)證集上的預(yù)測精度變化過程,從圖7中可以看到,驗(yàn)證集的精度逐漸上升并趨近于0.9,說明了所選擇的參數(shù)為該模型在該數(shù)據(jù)集下的最優(yōu)參數(shù)組合。
圖6 訓(xùn)練集損失變化曲線Fig.6 Training set loss curve
圖7 驗(yàn)證集精度變化曲線Fig.7 Verification set accuracy curve
3.6.2 模型預(yù)測結(jié)果
經(jīng)過訓(xùn)練后的模型為最優(yōu)的模型,用該模型對剩下31 d的數(shù)據(jù)進(jìn)行測試,并將模型的預(yù)測值和實(shí)際值進(jìn)行反歸一化處理,預(yù)測完后的模型所得出的RMSE=0.090,并將模型的預(yù)測值和實(shí)際值進(jìn)行比較,比較的結(jié)果如圖8所示。從圖8中可以看出,LSTM模型能夠很好地預(yù)測數(shù)據(jù),除了最后10 d,因?yàn)檫@10 d是節(jié)假日,自行車需求量和平時(shí)不一樣。預(yù)測的每小時(shí)使用量曲線和實(shí)際車輛使用量曲線趨勢相吻合,模型的擬合效果很好,滿足回歸預(yù)測過程中的經(jīng)驗(yàn)誤差要求。因此,LSTM預(yù)測模型在共享單車需求預(yù)測中是可行的。
圖8 LSTM神經(jīng)網(wǎng)絡(luò)預(yù)測結(jié)果曲線Fig.8 LSTM neural network prediction result graph
3.6.3 預(yù)測模型對比
(1)預(yù)測誤差對比。利用BP神經(jīng)網(wǎng)絡(luò)模型和RNN循環(huán)神經(jīng)網(wǎng)絡(luò)對同樣的共享單車數(shù)據(jù)集進(jìn)行模型搭建并預(yù)測,并將預(yù)測結(jié)果和真實(shí)結(jié)果進(jìn)行反歸一化處理,并計(jì)算出預(yù)測結(jié)果值和實(shí)際需求量結(jié)果值的差值即預(yù)測誤差,其預(yù)測誤差曲線如圖9所示。由圖9可得,LSTM神經(jīng)網(wǎng)絡(luò)模型在共享單車數(shù)據(jù)集上的預(yù)測效果最好,不僅能夠很好地預(yù)測數(shù)據(jù)的變化趨勢,而且預(yù)測誤差最小。而RNN循環(huán)神經(jīng)網(wǎng)絡(luò)和BP神經(jīng)網(wǎng)絡(luò)對共享單車數(shù)據(jù)的預(yù)測結(jié)果和預(yù)測誤差都稍差于LSTM模型。所以在共享單車需求量預(yù)測方面,LSTM模型更加合理。
圖9 3種網(wǎng)絡(luò)模型預(yù)測誤差對比Fig.9 Three network model prediction error comparison chart
(2)評價(jià)指標(biāo)對比。上述3個(gè)模型擬合完所有數(shù)據(jù)后所得到的RMSE和預(yù)測精確度如表2所示。根據(jù)表2中每個(gè)模型的性能指標(biāo)結(jié)果,LSTM模型的RMSE最小值為0.090,預(yù)測精度高達(dá)0.860,模型的擬合效果最好,變量對預(yù)測值的解釋能力最強(qiáng);RNN相比LSTM較弱,這是由于RNN在模型訓(xùn)練過程中存在梯度爆炸和梯度彌散的現(xiàn)象,而LSTM正好解決了這個(gè)問題;BP神經(jīng)網(wǎng)絡(luò)的性能最差,預(yù)測精度最低,RMSE最大,綜合來看LSTM的性能最好。
表2 不同模型的評價(jià)指標(biāo)對比Table 2 Comparison of evaluation indicators of different models
針對如何精確地預(yù)測一個(gè)區(qū)域小時(shí)級別的共享單車需求量的問題,通過爬取紐約共享單車數(shù)據(jù)集并分析各個(gè)特征變量對單車租借總量的影響,最后采用LSTM神經(jīng)網(wǎng)絡(luò)對紐約市共享單車每小時(shí)時(shí)需求量進(jìn)行預(yù)測。經(jīng)過實(shí)驗(yàn)得到以下結(jié)論。
(1)影響單車需求量的主要因素包括溫度、節(jié)假日、季節(jié)以及早晚高峰時(shí)間段等因素,最主要的是溫度的影響和早晚上班高峰時(shí)間段(7:00—8:00點(diǎn)和17:00—18:00點(diǎn))的影響比較大。
(2)與傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò)算法和循環(huán)神經(jīng)網(wǎng)絡(luò)RNN算法相比,LSTM模型預(yù)測精度最高,值為0.860,預(yù)測誤差較小,且預(yù)測結(jié)果曲線與真實(shí)結(jié)果曲線相吻合,可以用來對共享單車短時(shí)需求量進(jìn)行預(yù)測。