金建 劉春霞 劉勇
關(guān)鍵詞:出租車軌跡;機器學(xué)習(xí);聚類算法;數(shù)據(jù)分析
中圖分類號:TP18 文獻標識碼:A
文章編號:1009-3044(2023)21-0063-04
1 研究背景和意義
在大數(shù)據(jù)時代,數(shù)據(jù)的影響不再局限于企業(yè)領(lǐng)域。除了可以創(chuàng)造商業(yè)價值,數(shù)據(jù)還能夠為社會創(chuàng)造極大價值。隨著通信技術(shù)的發(fā)展,交通數(shù)據(jù)的貧乏狀況得到改善,變得更加豐富。然而,由于這些數(shù)據(jù)的種類繁多、數(shù)量龐大,如何從中提取有用的信息以促進決策,尤其重要。同時對于交通數(shù)據(jù)的處理和分析,在技術(shù)上也面臨著巨大的挑戰(zhàn),數(shù)據(jù)采集效率、數(shù)據(jù)處理方式、數(shù)據(jù)模型等各種問題,都在不斷地改進和完善。
在面臨如此龐大的數(shù)據(jù)量下,傳統(tǒng)的數(shù)據(jù)庫技術(shù)已經(jīng)難以滿足計算分析的需求,于是大數(shù)據(jù)技術(shù)順應(yīng)而出。通過大數(shù)據(jù)相關(guān)技術(shù)對交通軌跡數(shù)據(jù)的處理,結(jié)合算法,來實現(xiàn)對居民出行的預(yù)測、出租車熱點區(qū)域的判斷等。一方面可以幫助城市交通管理部門更好地合理配備或調(diào)度公共交通資源,制定出更好的統(tǒng)籌與協(xié)調(diào)解決方案。從而有效地提高城市交通運行效率以及提升資源利用率。另一方面可以給出租車司機行駛帶來引導(dǎo)作用,讓出租車司機能更短的時間內(nèi)載到乘客,避免空載造成的道路資源浪費。
2 機器學(xué)習(xí)聚類算法研究
聚類算法有多種不同的類型,包括劃分法、層次法、基于密度的聚類方法和基于網(wǎng)格的聚類方法等。每一種都有其各自的特征,應(yīng)根據(jù)不同的應(yīng)用場景和數(shù)據(jù)特點來選擇不同的聚類方法。
2.1 K-means 算法
K-means算法是一種常見的聚類方法,也被稱為K平均值算法或K均值算法。該算法通過隨機選擇K 個中心來劃分數(shù)據(jù)集,每個中心對應(yīng)一個簇。由于簇中心的存在,每個簇中至少有一條數(shù)據(jù),算法會計算所有數(shù)據(jù)點與各個簇中心的距離,并將每個數(shù)據(jù)點歸入最近的簇中。針對每一個類簇,重新通過最近距離來計算出它的新的簇中心。如果中心沒有發(fā)生變化,就結(jié)束這個過程。否則,退回到重新繼續(xù)劃分到距離最近所在的簇中,如此循環(huán)。在對K-means算法聚類大規(guī)模數(shù)據(jù)集時,為了避免造成死循環(huán),一般情況下需設(shè)定最大迭代次數(shù)。該算法具有局部最優(yōu)特性,并非全局最優(yōu)解。此外無法計算距離的非數(shù)值數(shù)據(jù)集不能使用K-means算法來聚類。本文中對于最短距離的計算使用歐氏距離。
2.2 其他K-means 算法
K-means算法作為經(jīng)典算法之一,也存在著一些缺點。例如:對于大規(guī)模的數(shù)據(jù),K-means算法常常需要多次迭代計算才能得到局部最優(yōu)解[1],以及往往帶來大量的數(shù)據(jù)通信。針對這些存在的問題,ZHAO 等人通過基于云計算平臺Hadoop,提出了PKMeans算法[2],有效地提高了傳統(tǒng)聚類算法處理大規(guī)模數(shù)據(jù)時的性能。Liao等人提出了改進版的基于MapReduce 的并行K-means聚類算法[3],通過減少迭代次數(shù)和加快每次迭代時的處理速度提高了算法的性能。再后來,夏提出了并行三階段K均值算法[4],結(jié)合了統(tǒng)計方法的規(guī)則和采用了多種初始化策略,優(yōu)化了K-means 的距離度量和聚類初始化,較之前的K-means算法有了更高效率和可靠性。李等人基于Spark的并行化,驗證了K-means II算法在準確性和時間效率上有更高的優(yōu)越性[5]。
3 算法模型設(shè)計
出租車軌跡數(shù)據(jù)由于其具有數(shù)據(jù)量規(guī)模大、數(shù)據(jù)類型多的特征,以至于在單機環(huán)境上難以進行處理和計算。為了提高數(shù)據(jù)處理效率,本文將大量出租車軌跡數(shù)據(jù)上傳至分布式集群環(huán)境中,通過Hadoop的Ma? pReduce計算編程原理,來實現(xiàn)K-means的聚類,建立基于MapReduce的K-means算法模型。
設(shè)計思路如下:
1) 隨機選取k個樣本軌跡數(shù)據(jù)為初始簇中心,同時隨著迭代更新簇中心。
2) 在Map階段,計算每個樣本軌跡點與各個簇中心的距離,并且找出距離最近的簇中心。
3) 在Combine階段,將Map的輸出在本地做進一步的合并,記錄每個簇中樣本的個數(shù)。
4) 在Reduce階段,重新計算獲取新的簇中心,判斷結(jié)果是否收斂,否則進入下一輪迭代。
具體實現(xiàn)步驟:
1) 首先創(chuàng)建一個configuration以字符串的形式來存放初始軌跡聚類中心。
2) Mapper:重寫setup方法,用來取到configuration 中的初始簇中心或上一輪聚類后的簇中心。map方法里,輸入key為偏移量,value是一行樣本軌跡數(shù)據(jù),將每一個的輸入樣本軌跡數(shù)據(jù)點與簇中心計算出距離,并找到距離最近的簇中心。最后輸出key為距離最近的簇中心,value為樣本軌跡數(shù)據(jù)點。獲取距離最近的簇中心的部分偽代碼如下所示:
輔助變量min記錄最小距離,初始化為最大值;
index記錄最小距離的簇質(zhì)點,初始化為0;
//計算每個輸入點與簇質(zhì)心的距離,并且找出距離當前點的最近簇質(zhì)心
for i=()to k-1 do{
d=樣本軌跡點與第i個簇中心點的距離,采用歐氏距離
if min=ind>d {
min=d;;
index=i;
}
3)Combiner:輸入為Map階段計算得來的最近距離的簇中心和樣本軌跡數(shù)據(jù)點。以劃分到一個簇中心的所有樣本軌跡數(shù)據(jù)作為一個簇,將相同簇下的所有樣本軌跡的坐標值累加求和,為了計算每個簇的平均值,同時記錄下每個簇里的樣本軌跡點個數(shù),并輸出。
4) Reducer:以Combine 階段的中間結(jié)果作為輸入,將獲取到的每一個簇中所有樣本軌跡的坐標值累加和結(jié)果除以對應(yīng)簇中樣本軌跡點個數(shù),可得到新的中心坐標,即為新的簇中心。同時,將上一輪的簇中心坐標與新的簇中心坐標做對比,若不同則在自定義的counter上加1,進入下一輪迭代。若相同,則將新的簇中心作為結(jié)果輸出。
5) 在Main方法中,定義了configuration獲取輸入文件的路徑,以及自定義了全局變量counter作為計數(shù)器。configuration在第一輪讀取我們自定義的初始軌跡簇中心,而后每一次迭代都將讀取上一輪計算后的新的簇中心。若計數(shù)器counter用來判斷統(tǒng)計目前迭代次數(shù)。
4 實驗結(jié)果與分析
4.1 城市道路擁堵情況
由于出租車在運營過程中受時空條件的制約,呈現(xiàn)不同的時間段有不同的規(guī)律。在原來經(jīng)過清洗的出租車軌跡數(shù)據(jù)的基礎(chǔ)上,針對早上6點至24點,每個小時段所有出租車行程軌跡進行統(tǒng)計。如圖1 所示。
從圖1中的結(jié)果可以看出,出租車軌跡數(shù)目在8 月3日這天呈現(xiàn)出3個高峰期,分別在10:00-11:00、0104:-0101-:0105:之00間以達及到2一1:0天0-之22間:0的0這最幾高個峰值時,間也段就內(nèi)意。味1著0:在這個時間段內(nèi)處于一天之中的交通高峰期。
通常情況下,交通高峰期會出現(xiàn)道路堵塞、交通癱瘓等眾多交通問題。為了更直觀地獲取城市道路擁堵情況,選取交通高峰期10:00-11:00這一時段來進一步研究。
結(jié)合K-means算法模型,設(shè)定初始聚類軌跡數(shù)目K=15,隨機選取地圖中15個坐標點作為初始聚類中心進行聚類,并通過多次迭代并記錄每一次迭代的聚類中心和所屬的軌跡數(shù)目。最后將聚類結(jié)果導(dǎo)入地圖中。在進行了7次迭代后,獲取結(jié)果如下圖2所示(軌跡數(shù)目作為熱度依據(jù))。
通過圖2中得到的聚類結(jié)果來看,成都市出租車在8月3日10:00-11:00這一交通高峰期內(nèi),出租車軌跡熱度較高的區(qū)域大部分位于三環(huán)內(nèi),主要集中在市區(qū)的中心區(qū)域、重要的大型商場和寫字樓以及公共的重要交通樞紐。
4.2 出租車載客情況
通過對預(yù)處理后的出租車軌跡數(shù)據(jù)提取載客狀態(tài)為1的部分就可以得到所有載客軌跡。同樣的,以每個小時為間隔來進行載客軌跡數(shù)目統(tǒng)計,并根據(jù)所有軌跡數(shù)目算得對應(yīng)時段的出租車載客率,得到結(jié)果如圖3、4所示。
從圖4中可以明顯地發(fā)現(xiàn),在成都市8月3日按小時段的載客軌跡數(shù)目曲線與包含所有軌跡數(shù)目的曲線有相似的特征,按小時段的載客軌跡數(shù)目的3個峰值時段11:00-12:00、14:00-15:00、21:00-22:00與所有軌跡數(shù)目的3個峰值時段10:00-11:00、14:00-15:00和21:00-22:00大致相吻合。居民對于出租車的需求從8:00左右開始逐步呈現(xiàn)上升趨勢,中午12:00-13:00是午餐用餐時段,到達第一個谷點,至13:00之后再次穩(wěn)步上升,在14:00-15:00之間達到一天中的載客數(shù)目最高峰值。過了15:00之后,載客數(shù)目漸漸趨于平緩,并且在19:00時達到了一個相對較低的水平,一直到20:00左右開始回升。
載客率曲線更是幾乎與載客軌跡數(shù)目完全相同。出租車的載客情況隨著城市交通量的上升而增長,同時也伴隨著載客率的上升??梢娫谔幱诮煌ǜ叻鍟r段里,出租車往往都會往出行需求量大的區(qū)域匯集,這也符合出租車司機的運營策略。
4.3 居民出行熱點區(qū)域劃分
通過對預(yù)處理后的出租車軌跡數(shù)據(jù)里提取上下客點數(shù)據(jù),來作為居民出行熱點區(qū)域進行劃分的依據(jù)。不同于所有軌跡,上下客點作為居民出行活動的起訖點,一定程度上反映了該居民的出行需求。本文通過獲取城市交通高峰時段10:00-11:00的出租車上客點軌跡,重點分析居民上客點產(chǎn)生的需求,來對居民出行熱點區(qū)域進行劃分。獲取結(jié)果如圖5所示(僅部分軌跡展示)。
針對圖5中出租車上客散點圖來看,成都市市中心附近頻繁發(fā)生上客事件主要分布于東城根街、春熙路商圈、成都第三人民醫(yī)院、市二醫(yī)院以及新華大道與紅星路交匯處附近。以此來看,在8月3日,成都市市中心附近居民出行需求大多以休閑娛樂、醫(yī)療為主。
根據(jù)上述的成都市居民出行特征,結(jié)合K-means 聚類挖掘居民出行熱點區(qū)域,并統(tǒng)計各熱點區(qū)域上客數(shù)目,如表1所示。
觀察表1可以發(fā)現(xiàn),其中含有不少聚類規(guī)模較小,不具備實際分析意義。故將其剔除,同時將出行熱點區(qū)域中心點與地圖中實際區(qū)域相匹配,得到實際熱點區(qū)域如表2所示。
通過表2的結(jié)果可以發(fā)現(xiàn),以上劃分出的7個熱點區(qū)域的出租車出行熱點軌跡規(guī)模占據(jù)的規(guī)模達到了82.4%。同時,這些出行熱點軌跡的實際區(qū)域也吻合于圖5二環(huán)內(nèi)市中心的居民上客需求較高的區(qū)域。這幾個區(qū)域體現(xiàn)了成都市8月3日早高峰時段10:00- 11:00居民出行的熱點。
5 總結(jié)
近年來,隨著大數(shù)據(jù)技術(shù)的興起,為各種海量數(shù)據(jù)的分析研究帶來了無限可能。本文以大規(guī)模的出租車軌跡數(shù)據(jù)作為分析研究對象,介紹了出租車軌跡數(shù)據(jù)的特征,并通過導(dǎo)入地圖進行軌跡數(shù)據(jù)展示。對實驗環(huán)境Hadoop平臺進行了相關(guān)闡述,并在實驗之前對原始軌跡數(shù)據(jù)進行預(yù)處理操作。簡單地介紹了機器學(xué)習(xí)和相關(guān)常見的聚類方法。采用MapReduce 編程,建立了一個K-means聚類模型,設(shè)定了K值、初始聚類中心等相關(guān)參數(shù),選取歐氏距離進行聚類過程中軌跡點距離的計算。結(jié)合K-means聚類模型,分析了成都市8月3日各個小時段的道路擁堵情況,并獲取到了交通高峰時段的出租車軌跡熱度較高的區(qū)域。通過提取出租車軌跡載客狀態(tài),展示了各小時段的載客狀態(tài)載客情況和載客率,根據(jù)結(jié)果對比驗證了載客率與城市交通情況存在正相關(guān)規(guī)律。對于城市居民出行熱點區(qū)域的分析提取了所有軌跡數(shù)據(jù)中的上客點,通過分析交通高峰時段10:00-11:00期間所有的上客點,劃分出6個出行熱點區(qū)域。