曹旦旦, 范書瑞, 張 艷, 夏克文
(河北工業(yè)大學(xué)電子息信工程學(xué)院, 天津 300401)
如何精確地預(yù)測短時間內(nèi)某區(qū)域需要的共享單車數(shù)量從而合理地進行調(diào)度是一個亟待解決的問題。現(xiàn)如今已經(jīng)有一些機器學(xué)習(xí)方法,比如隨機森林、支持向量機等都已經(jīng)在共享單車的研究中被廣泛使用。文獻[1]采用傳統(tǒng)最小二乘法(ordinary least square,OLS)線性模型、二分類和多分類Logit模型等對單車需求量進行預(yù)測,但是需要大量觀測數(shù)據(jù),且具有明顯的局域性,回歸關(guān)系不能很好符合實際情況;Bacciu等[2]、Bajari等[3]采用支持向量機和隨機森林模型預(yù)測,但是并沒有詳細介紹如何預(yù)測短時間內(nèi)的單車使用量情況。
為了提高計算精度、準(zhǔn)確預(yù)測每天每小時的紐約市共享單車需求量,其預(yù)測方法已由以往的機器學(xué)習(xí)模型,如隨機森林(random forest,RF)、支持向量機(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ù)據(jù),但運算中容易發(fā)生梯度消失、梯度爆炸等問題。針對RNN模型存在的不足來進行改進得到的模型就是長短期記憶(long short-term memory,LSTM)模型,直到現(xiàn)在該模型已經(jīng)在很多時間序列研究領(lǐng)域被廣泛使用并得到了較好的效果[6-8]。在爬取紐約共享單車數(shù)據(jù)的基礎(chǔ)上對數(shù)據(jù)進行特征分析,分析影響單車需求量的主要因素;并提出基于LSTM循環(huán)神經(jīng)網(wǎng)絡(luò)方法對共享單車短時需求量進行預(yù)測,然后與傳統(tǒng)的RNN和BP神經(jīng)模型預(yù)測結(jié)果比較。預(yù)期LSTM模型在該數(shù)據(jù)集上能有一個較好的預(yù)測效果。
LSTM最初是在1997年由Hochreiter等[9]提出,是在循環(huán)神經(jīng)網(wǎng)絡(luò)RNN的基礎(chǔ)上改進而來的[10]。LSTM神經(jīng)網(wǎng)絡(luò)和RNN不同的地方是,它不僅增加了具有保存以往信息的記憶存儲單元,通過反向傳播算法[11]對數(shù)據(jù)進行訓(xùn)練,它還解決了RNN梯度消失和長期依賴性缺失的問題。LSTM廣泛應(yīng)用于各個方面,比如自然語言翻譯和語音識別等,還可以應(yīng)用于時間序列的預(yù)測[12],都具有較好的效果。
LSTM的網(wǎng)絡(luò)結(jié)構(gòu)是利用門的控制機制來工作的,包含一個記憶細胞和3個控制門,分別為輸入門、輸出門和遺忘門[13]。網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。圖1中的3個方框代表細胞在不同時序的狀態(tài),中間方框中帶有的小框是激活函數(shù)為Sigmoid的前饋網(wǎng)絡(luò)層[14],具有tanh的小方框是具有激活函數(shù)tanh的前饋網(wǎng)絡(luò)層,Xt代表t時刻的輸入,ht代表t時刻細胞的狀態(tài)值。LSTM各個門的工作原理如下。

圖1 LSTM網(wǎng)絡(luò)結(jié)構(gòu)Fig.1 LSTM network structure

it=δ[Wi(Xt,ht-1)+bi]
(1)
(2)
其次,計算遺忘門在時間t的激活值ft,公式為
ft=δ[Wf(Xt,ht-1)+bf]
(3)
通過上述兩個步驟,就能夠計算出來細胞在時間t的狀態(tài)更新值Ct,公式為
(4)
計算輸出門的值,公式為
Ot=δ[Wo(Xt,ht-1)+bo]
(5)
ht=OttanhCt
(6)
經(jīng)過上面的4個計算步驟,LSTM就可以有效地利用輸入來使其具有長時期的記憶功能。
首先,在Windows操作環(huán)境下構(gòu)建CPU版本的Tensorflow框架。Tensorflow不但能實現(xiàn)深度學(xué)習(xí)算法,還能實現(xiàn)例如回歸預(yù)測、聚類分析等算法。LSTM模型使用Tensorflow提供的LSTMCell模塊進行搭建,該模塊將LSTM的隱藏層封裝在Tensorflow內(nèi),并包含3個門結(jié)構(gòu),分別是遺忘門、輸入門和輸出門結(jié)構(gòu),隱藏層的數(shù)目要根據(jù)實際情況來定,所設(shè)置的隱藏層的數(shù)目為10。為了避免出現(xiàn)過擬合現(xiàn)象,采用Dropout機制來增強模型的泛化能力。
以往的搭建網(wǎng)絡(luò)的過程是以網(wǎng)絡(luò)節(jié)點為單位來進行網(wǎng)絡(luò)布局,而使用Tensorflow搭建LSTM框架的過程是以網(wǎng)絡(luò)層數(shù)為單位來進行模型的構(gòu)建,Tensorflow中的LSTMCell包含多個網(wǎng)絡(luò)節(jié)點的輸入和輸出層,它們都由向量表示,向量的長度就是該層節(jié)點的個數(shù)。
在搭建模型和訓(xùn)練模型的過程中,最重要的一點是參數(shù)的初始化,不同類型的特征參數(shù)需要進行不同類型的初始化,這對模型的訓(xùn)練效果具有十分重大的影響。對連續(xù)性參數(shù)變量初始化的方式為:dummies=pd.get_dummies(rides[each],prefix=each, drop_first=False),初始化離散參數(shù)變量的方法是:mean, std =data[each].mean(), data[each].std()。用批量隨機梯度下降法對模型進行訓(xùn)練。
在Windows7系統(tǒng)中使Anaconda Navigator3(Jupyter notebook),Python3.6為實驗平臺進行仿真實驗,將Tensorflow所提供的LSTM等神經(jīng)網(wǎng)絡(luò)模型用于仿真實驗。
采用網(wǎng)絡(luò)爬蟲的方法,從美國國家海洋和大氣管理局官方網(wǎng)站氣象服務(wù)中心提供的紐約市歷史天氣數(shù)據(jù)集中爬取紐約市的歷史氣象數(shù)據(jù),所爬取的數(shù)據(jù)范圍從2015年1月—2018年12月的小時數(shù)據(jù),共計48個月,共35 064條數(shù)據(jù)。其中某些數(shù)據(jù)存在缺失現(xiàn)象,其數(shù)據(jù)字段如表1所示。

表1 實驗中使用的數(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ù)負相關(guān),雨雪天氣抑制了單車租借需求;單車需求量與溫度和濕度的相關(guān)性最高,分別為0.41和-0.19。
3.3.2 時間因子的影響
(1)共享單車使用量受時間影響,利用2015—2018年美國紐約地區(qū)共享單車項目數(shù)據(jù)進行時序變化規(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ù)高于工作日。可以得出結(jié)論,時間因素如年和月份也會對租借數(shù)量產(chǎn)生重大影響,因為月份和季節(jié)對租借數(shù)量的影響是一致的,月份更詳細,因此要留下月份特征,刪除季節(jié)特征。
(2)圖4和圖5進一步考察了2015—2018年平均每小時和每星期對共享單車的使用量的影響,并繪制折線圖和箱線圖。

圖4 2015—2018年平均每小時共享單車使用量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ù)相對較多,每天有兩個高峰期,分別是7:00—8:00點左右和17:00—18:00點左右,正好是工作日的上下班高峰期;此外,從12:00—16:00點的使用量較高,這進一步反映了時間段,特別是高峰時段,是影響自行車需求的重要因素。
(1)填寫缺失數(shù)據(jù):通過上述方法獲得的數(shù)據(jù)為不完整數(shù)據(jù),需要填寫缺失數(shù)據(jù)以便于在接下來的預(yù)測工作中使用。
(2)虛擬變量:通過Pandas庫中的get_dummies()函數(shù)對季節(jié)、月份和天氣等離散變量創(chuàng)建二進制虛擬變量。
(3)調(diào)整目標(biāo)變量:為了更輕松地訓(xùn)練模型,需要將溫度、濕度和風(fēng)速等連續(xù)變量標(biāo)準(zhǔn)化,使它們的均值為0,標(biāo)準(zhǔn)差為1;同時保存換算因子,在后續(xù)進行預(yù)測時可以還原數(shù)據(jù),其公式為
(7)
式(7)中:max表示所選取的數(shù)據(jù)中特征的最大值;min表示數(shù)據(jù)特征的最小值;xij為原始數(shù)據(jù);Xij為標(biāo)準(zhǔn)化后的數(shù)據(jù)。
3.5.1 評價指標(biāo)
為了評估LSTM預(yù)測模型的預(yù)測性能,選擇均方根誤差(root mean square error,RMSE)指數(shù)來評估模型的預(yù)測精度,RMSE是用來衡量模型預(yù)測值與真實值之間的偏差的物理量,值越小,預(yù)測出來的效果越好,公式為
(8)

3.5.2 網(wǎng)絡(luò)模型的擬定
研究使用單層的LSTM模型對紐約市共享單車需求量進行預(yù)測。利用深度學(xué)習(xí)庫中Tensorflow 中所提供的LSTMCell模型來預(yù)測出每小時的單車需求量。通過add函數(shù)將多個網(wǎng)絡(luò)層進行線性堆疊。通過不斷的調(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,時間步長time_steps設(shè)置為10,學(xué)習(xí)率learning_rate設(shè)置為0.000 5,訓(xùn)練數(shù)據(jù)的截斷長度num_steps為50,向量的維度lstm_size為256。為了在訓(xùn)練的過程中防止過擬合現(xiàn)象發(fā)生,將每一層網(wǎng)絡(luò)節(jié)點的舍棄率Dropout設(shè)置為0.75。
(3)維度轉(zhuǎn)換:輸入特征時,需要將張量tensor轉(zhuǎn)換為二維計算,計算結(jié)果作為隱藏層的輸入。,最后再將 tensor 轉(zhuǎn)成三維作為 lstm cell 的輸入。通過get_batches批量處理數(shù)據(jù)。
3.6.1 網(wǎng)絡(luò)訓(xùn)練
基于紐約市2015—2018年每小時的共享單車使用量數(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ù)越多預(yù)測越準(zhǔn)確,但缺點是需要的時間也長,本次實驗的迭代次數(shù)為6 600,使用的損失函數(shù)為均方誤差RMSE,選擇自適應(yīng)矩估計Adam為優(yōu)化器。圖6所示為模型在訓(xùn)練的過程中損失函數(shù)下降的過程,從圖6中可以看到,模型在訓(xùn)練集上的損失函數(shù)不斷下降并趨近于0。圖7所示為模型在驗證集上的預(yù)測精度變化過程,從圖7中可以看到,驗證集的精度逐漸上升并趨近于0.9,說明了所選擇的參數(shù)為該模型在該數(shù)據(jù)集下的最優(yōu)參數(shù)組合。

圖6 訓(xùn)練集損失變化曲線Fig.6 Training set loss curve

圖7 驗證集精度變化曲線Fig.7 Verification set accuracy curve
3.6.2 模型預(yù)測結(jié)果
經(jīng)過訓(xùn)練后的模型為最優(yōu)的模型,用該模型對剩下31 d的數(shù)據(jù)進行測試,并將模型的預(yù)測值和實際值進行反歸一化處理,預(yù)測完后的模型所得出的RMSE=0.090,并將模型的預(yù)測值和實際值進行比較,比較的結(jié)果如圖8所示。從圖8中可以看出,LSTM模型能夠很好地預(yù)測數(shù)據(jù),除了最后10 d,因為這10 d是節(jié)假日,自行車需求量和平時不一樣。預(yù)測的每小時使用量曲線和實際車輛使用量曲線趨勢相吻合,模型的擬合效果很好,滿足回歸預(yù)測過程中的經(jīng)驗誤差要求。因此,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ù)集進行模型搭建并預(yù)測,并將預(yù)測結(jié)果和真實結(jié)果進行反歸一化處理,并計算出預(yù)測結(jié)果值和實際需求量結(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)評價指標(biāo)對比。上述3個模型擬合完所有數(shù)據(jù)后所得到的RMSE和預(yù)測精確度如表2所示。根據(jù)表2中每個模型的性能指標(biāo)結(jié)果,LSTM模型的RMSE最小值為0.090,預(yù)測精度高達0.860,模型的擬合效果最好,變量對預(yù)測值的解釋能力最強;RNN相比LSTM較弱,這是由于RNN在模型訓(xùn)練過程中存在梯度爆炸和梯度彌散的現(xiàn)象,而LSTM正好解決了這個問題;BP神經(jīng)網(wǎng)絡(luò)的性能最差,預(yù)測精度最低,RMSE最大,綜合來看LSTM的性能最好。

表2 不同模型的評價指標(biāo)對比Table 2 Comparison of evaluation indicators of different models
針對如何精確地預(yù)測一個區(qū)域小時級別的共享單車需求量的問題,通過爬取紐約共享單車數(shù)據(jù)集并分析各個特征變量對單車租借總量的影響,最后采用LSTM神經(jīng)網(wǎng)絡(luò)對紐約市共享單車每小時時需求量進行預(yù)測。經(jīng)過實驗得到以下結(jié)論。
(1)影響單車需求量的主要因素包括溫度、節(jié)假日、季節(jié)以及早晚高峰時間段等因素,最主要的是溫度的影響和早晚上班高峰時間段(7:00—8:00點和17:00—18:00點)的影響比較大。
(2)與傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò)算法和循環(huán)神經(jīng)網(wǎng)絡(luò)RNN算法相比,LSTM模型預(yù)測精度最高,值為0.860,預(yù)測誤差較小,且預(yù)測結(jié)果曲線與真實結(jié)果曲線相吻合,可以用來對共享單車短時需求量進行預(yù)測。