數(shù)據(jù)來自2020年第十一屆服務(wù)外包創(chuàng)新大賽A06賽題。
數(shù)據(jù)清洗
與定位誤差不超過10米、時間采樣均勻的GPS數(shù)據(jù)相比,手機信令數(shù)據(jù)的精確度較低且時間間隔不均勻,因此更需要對其進行數(shù)據(jù)清洗,下面對手機信令數(shù)據(jù)的特征做具體分析:?
(1)存在大量臟數(shù)據(jù)
在數(shù)據(jù)清洗領(lǐng)域中,臟數(shù)據(jù)被定義為那些不在給定的范圍內(nèi)、對于實際業(yè)務(wù)毫無意義、或是數(shù)據(jù)格式非法、以及錯誤操作發(fā)生時產(chǎn)生的數(shù)據(jù)。移動通信網(wǎng)絡(luò)在設(shè)計之初的主要目的是為了便利全球用戶的移動通信,并未考慮對手機用戶進行精確定位的需求,加上通信環(huán)境復(fù)雜所導(dǎo)致的多徑效益、漂移效應(yīng)等,使得手機信令數(shù)據(jù)中既包含大量的常規(guī)臟數(shù)據(jù),即空值、重復(fù)值、錯誤值等,也包含漂移數(shù)據(jù)這類由于基站架設(shè)缺陷或是高層建筑干擾所產(chǎn)生的數(shù)據(jù)。因此,在對手機信令數(shù)據(jù)進行進一步的挖掘之前,首先對數(shù)據(jù)進行清洗是十分必要的。
(2)數(shù)據(jù)量巨大
據(jù)工業(yè)和信息化部統(tǒng)計顯示,2018年我國凈增移動電話用戶達到1.49億戶,總數(shù)達到15.7億戶,移動電話用戶普及率達到112.2部/百人,比2017年末提高了10.2部/百人。數(shù)據(jù)同時顯示,2018年,全國凈增移動通信基站29萬個,總數(shù)達648萬個。其中4G基站凈增43.9萬個,總數(shù)達到372萬個。4G用戶總數(shù)達到11.7億戶,全年凈增1.69億戶。同時,手機產(chǎn)生的信令數(shù)據(jù)量也在不斷上升。通常中國一線城市,每分鐘產(chǎn)生的信令數(shù)據(jù)量高達180兆,即每天15億條數(shù)據(jù)。濰坊電信于2015年9月1日產(chǎn)出的數(shù)據(jù)總量為4.14G,共包含19萬用戶一共7733萬個軌跡點。由此可見常規(guī)的單節(jié)點計算機是無法滿足如此巨大的計算需求的,因此本文使用Hadoop分布式系統(tǒng)作為數(shù)據(jù)處理的平臺。
(3)時間間隔不均勻
手機用戶的主被動上網(wǎng)行為均具有不確定性,這導(dǎo)致了每名手機用戶軌跡點的時間采樣間隔并不均勻。某些連續(xù)點的采樣間隔不足1秒,但有些連續(xù)點的采樣間隔卻有數(shù)分鐘,如何在信令數(shù)據(jù)清洗與挖掘過程中規(guī)避其時間間隔不均勻的缺陷,是后續(xù)需要考慮的問題。
針對手機信令數(shù)據(jù)中包含大量臟數(shù)據(jù)的問題,本章設(shè)計了一種針對手機信令數(shù)據(jù)的層次化清洗方案:首先將手機信令數(shù)據(jù)看作常規(guī)數(shù)據(jù),清洗掉其中的無效數(shù)據(jù);隨后針對手機信令數(shù)據(jù)所特有的漂移及乒乓切換現(xiàn)象,設(shè)計相應(yīng)的算法對其進行處理,最后將清洗后的數(shù)據(jù)以人為單位按時間正序排序。
數(shù)據(jù)清洗過程:
1、清洗無效數(shù)據(jù)
無效數(shù)據(jù)通常包括異常記錄和重復(fù)記錄。
(1)缺失數(shù)據(jù)屬于一種異常記錄,由于信令系統(tǒng)可能會出現(xiàn)不穩(wěn)定等情況,則會造成少量的數(shù)據(jù)缺失,這些缺失數(shù)據(jù)必然會對后續(xù)的分析帶來嚴重的影響,因此需要將其進行剔除。通過遍歷數(shù)據(jù)表中的所有字段,篩選出多個字段為空值的記錄,并將該數(shù)據(jù)行刪除。若一條記錄僅存在少數(shù)幾個空值字段,則可采用采用均值、眾數(shù)、最大值、最小值、中位數(shù)等方法補全數(shù)據(jù)。
(2)錯誤數(shù)據(jù)也是屬于一種異常記錄,這里的錯誤數(shù)據(jù)是指那些不在監(jiān)測范圍內(nèi)的數(shù)據(jù)以及解碼錯誤的數(shù)據(jù)。如,要統(tǒng)計數(shù)據(jù)字典中某一區(qū)域過夜信息(21:00-次日07:00)時,需要遍歷數(shù)據(jù)表中相關(guān)字段的標(biāo)簽,將不在該區(qū)域和對應(yīng)時間段內(nèi)的數(shù)據(jù)過濾掉。
(3)重復(fù)數(shù)據(jù)是指各字段完全相同的連續(xù)數(shù)據(jù),這種無效數(shù)據(jù)往往也是由于信令采集系統(tǒng)不穩(wěn)定所造成的。大量的重復(fù)數(shù)據(jù)會增加運算成本,同時對于區(qū)域人口駐留信息、區(qū)域人口停留信息等停留點信息的識別會帶來一定程度的誤差。因此,采用基本字段匹配算法,對數(shù)據(jù)庫數(shù)據(jù)的重復(fù)記錄檢測以及重復(fù)元素檢測,識別出多條重復(fù)記錄,將第一條記錄的結(jié)束時間改為最后一條記錄的結(jié)束時間,保留第一條記錄即可。
2、處理異常數(shù)據(jù)
在實際情況下,由于移動通信網(wǎng)絡(luò)自身存在的缺陷和外界環(huán)境的干擾,手機通信信號往往會受到多種因素的影響,于是所生成的手機信令數(shù)據(jù)會產(chǎn)生以下幾種類型異常數(shù)據(jù),很好的識別并剔除這些數(shù)據(jù),能夠有助于對人口密度及交通流量的監(jiān)測。
(1)冗余數(shù)據(jù)
為了確保手機和基站之間不中斷的聯(lián)系,以實現(xiàn)階段性的位置更新,因此需要手機隔一段時間向移動通信網(wǎng)絡(luò)發(fā)送一條當(dāng)前所謂的基站信息。但是當(dāng)用戶長時間停留在某一固定地點時,就會產(chǎn)生大量的位置更新信息,也就是是所謂的冗余位置數(shù)據(jù)。這些由于靜止?fàn)顟B(tài)而產(chǎn)生的冗余信息是無法反映人口的動態(tài)特征,同時會增加無效數(shù)據(jù)量,因此不利于人口的動態(tài)監(jiān)測,需要遍歷所有用戶記錄,識別出由于不同原因所產(chǎn)生的冗余數(shù)據(jù)并將其剔除。例如,針對數(shù)據(jù)字典中的區(qū)域出現(xiàn)量統(tǒng)計,遍歷所有用戶記錄,識別出小區(qū)編號和位置區(qū)編號字段長時間未發(fā)生變化的用戶,也就意味著該用戶沒有出行,則在統(tǒng)計區(qū)域出現(xiàn)信息時不應(yīng)考慮該用戶。
(2)乒乓數(shù)據(jù)
乒乓數(shù)據(jù)是指手機在多個相鄰近的基站間出現(xiàn)交替切換現(xiàn)象而產(chǎn)生的數(shù)據(jù),但用戶并未發(fā)生一定距離的移動行為。理論上,當(dāng)用戶移動到某一基站時,會自動切換到該基站的信號。實際上,在移動通信網(wǎng)絡(luò)中由于無線電波傳播過程中存在反射、繞射、散射等現(xiàn)象導(dǎo)致很短的時間段內(nèi)信號出現(xiàn)異常的波動,也就是所謂的“乒乓效應(yīng)”,可見這類數(shù)據(jù)會高估出行人口的數(shù)量,因此需要處理這些數(shù)據(jù)。遍歷所有記錄,識別出在兩個基站間連續(xù)多次切換,且切換間隔僅為幾秒鐘的數(shù)據(jù)行,并將其剔除。
(3)漂移數(shù)據(jù)
在某些情況下,手機信號會從鄰近的基站突然切換到相對較遠的基站,并在一定時間之后切換回鄰近的基站,這種現(xiàn)象為信號漂移現(xiàn)象,由此產(chǎn)生的數(shù)據(jù)為漂移數(shù)據(jù)。這種漂移數(shù)據(jù)的出現(xiàn)會對人口的動態(tài)監(jiān)測產(chǎn)生嚴重的影響,例如在樣本人流向統(tǒng)計中,很可能多統(tǒng)計較遠基站的人口,而少統(tǒng)計鄰近基站的人口,不僅如此,所統(tǒng)計的去向區(qū)域也會存在錯誤。因此,需要對漂移的數(shù)據(jù)進行判定。設(shè)置城市漂移速度閾值,通過計算第i條數(shù)據(jù)和第i+l條數(shù)據(jù)的距離和時間間隔,進而得到其速度v,若該速度v超過閾值,那么刪除第i+l條數(shù)據(jù)并重新計算第i條數(shù)據(jù)和第i+2條數(shù)據(jù)的速度重復(fù)上述比較過程(前提是兩條數(shù)據(jù)為同一用戶),以此過程遍歷所有的數(shù)據(jù)。
綜上所述,本系統(tǒng)數(shù)據(jù)清洗過程如下:
- 抽取timestamp,imsi,lac_id,cell_id 四個字段
- 去除空間信息殘缺的記錄條目(imsi、lac_id、cell_id中為空)
- 去除imsi中,包含特殊字符的數(shù)據(jù)條目(‘#’,’*’,’^’)
- timestamp時間戳轉(zhuǎn)換格式 ‘20190603000000’--年月日時分秒
- 去除干擾數(shù)據(jù)條目(不是2018.10.03當(dāng)天的數(shù)據(jù))
- 去除兩數(shù)據(jù)源關(guān)聯(lián)后經(jīng)緯度為空的數(shù)據(jù)條目
- 去除異常數(shù)據(jù)(冗余、乒乓、漂移數(shù)據(jù))
- 去除重復(fù)數(shù)據(jù)
- 以人為單位,按時間正序排序
源代碼:
import pandas as pd
import numpy as np
#讀取數(shù)據(jù)
data = pd.read_csv(r'./dataset/original.csv')
#提取所需字段
data.drop(labels=['phone', 'tmp0','tmp1','nid','npid'], axis=1, inplace=True)
#去除空間信息殘缺的記錄
for i in data['imsi'][data['imsi'].isnull() == True].index:
??? data.drop(labels=i, inplace=True)
for i in data['cell_id'][data['cell_id'].isnull() == True].index:
??? data.drop(labels=i, inplace=True)
for i in data['lac_id'][data['lac_id'].isnull() == True].index:
??? data.drop(labels=i, inplace=True)
#去除imsi中含特殊字符的數(shù)據(jù)
data = data[ ~ data['imsi'].str.contains('#', regex=False)]
data = data[ ~ data['imsi'].str.contains('*', regex=False)]
data = data[ ~ data['imsi'].str.contains('^', regex=False)]
#時間戳轉(zhuǎn)換
data['timestamp']=pd.to_datetime(data['timestamp']//1000,unit='s')
data['timestamp'] = data['timestamp'].apply(lambda x:x.strftime('%Y%m%d%H%M%S'))
#去除干擾條目
data = data[data['timestamp'].str.contains('20181003', regex=False)]
#重置序列index
data = data.reset_index(drop=True)
#去除兩數(shù)據(jù)源關(guān)聯(lián)后經(jīng)緯度為空的數(shù)據(jù)
data['lac_id'] = data['lac_id'].astype(int)
data['cell_id'] = data['cell_id'].astype(int)
data['laci'] = data['lac_id'].map(str)+"-"+data['cell_id'].map(str)
for i in data['cell_id'][data['longitude'].isnull() == True].index:
??? data.drop(labels=i, inplace=True)
for i in data['lac_id'][data['latitude'].isnull() == True].index:
??? data.drop(labels=i, inplace=True)
#重置序列index
data = data.reset_index(drop=True)
#清洗乒乓數(shù)據(jù)
def cleaning_PP_data(new_data):
? groups = new_data.groupby('imsi')
? def is_between(time):
????? timestart = 20181003020000
????? timeend = 20181003060000
????? if time > timestart and time < timeend:
????????? return True
? count = 0
? for name,group in groups:#
? #group = groups.get_group(460000095005565778)
????? group = group.sort_values(by=['timestamp', 'timestamp1'], axis= 0, ascending=True).reset_index(drop=True)
????? #print(name)
????? #print(group)
????? #print(len(group))
????? #循環(huán)標(biāo)記乒乓記錄 ['PP'] = True
????? group['PP'] = False
????? for i in range(0 , len(group) -2):
????????? laci1 = group.at[i,'laci']
????????? laci2 = group.at[i+1,'laci']
????????? laci3 = group.at[i+2,'laci']
????????? if laci1 == laci3 and laci1 != laci2:
????????????? group.at[i+1,'PP'] = True
????? #print(group)
????? list_PP_duplicates = list(group.duplicated(['PP']))
????? #print(list_PP)
????? i = 0
????? #循環(huán)查找單乒乓記錄(例:CABAD),計算穿越速度并與步行平均速度(6km/h)比較 大于則 B數(shù)據(jù)laci及經(jīng)緯度替換為A的數(shù)據(jù)
????? while i < len(group) -2:
????????? PP1 = group.at[i,'PP']
????????? PP2 = group.at[i+1,'PP']
????????? PP3 = group.at[i+2,'PP']
????????? if PP2 == True and PP1 == False and PP3 == False:
????????????? distance = geodistance(group.at[i+1,'longitude'],group.at[i+1,'latitude'],group.at[i+2,'longitude'],group.at[i+2,'latitude'])
????????????? if distance > 1 :
????????????????? timespan = get_hours(str(get_datetime(group.at[i+2,'timestamp']) - get_datetime(group.at[i+1,'timestamp'])))
????????????????? speed = distance / timespan
????????????????? if speed > 6:
???? ?????????????????group.at[i+1,'laci'] = group.at[i,'laci']
????????????????????? group.at[i+1,'longitude'] = group.at[i,'longitude']
????????????????????? group.at[i+1,'latitude'] = group.at[i,'latitude']
????????????? #將凌晨02:0O:00—06:0O:00來回切換的數(shù)據(jù)(指其中的B記錄的timel或time2落在該時段內(nèi)),直接替換為相鄰坐標(biāo)。
????????????? elif is_between(group.at[i+1,'timestamp']) or is_between(group.at[i+1,'timestamp1']):
????????????????? group.at[i+1,'laci'] = group.at[i,'laci']
????????????????? group.at[i+1,'longitude'] = group.at[i,'longitude']
????????????????? group.at[i+1,'latitude'] = group.at[i,'latitude']
????????? elif PP2 == True and PP1 == False and PP3==True:#多乒乓記錄(例:CABABD以及CABABAD),隨list_PP_duplicates尋找乒乓結(jié)束點,從前往后逐個替換為前一條記錄坐標(biāo)
????????????? group.at[i+1,'laci'] = group.at[i,'laci']
????????????? group.at[i+1,'longitude'] = group.at[i,'longitude']
????????????? group.at[i+1,'latitude'] = group.at[i,'latitude']
????????????? t = 2
????????????? while list_PP_duplicates[i+t]==True:
????????????????? group.at[i+t,'laci'] = group.at[i+t-1,'laci']
????????????????? group.at[i+t,'longitude'] = group.at[i+t-1,'longitude']
????????????????? group.at[i+t,'latitude'] = group.at[i+t-1,'latitude']
????????????????? t += 1
????????????? i = i + t + 1
????????????? continue
????????? i += 1???
????? list_duplicates = list(group.duplicated(['laci']))
????? tmp_index = None
????? tmp = None
????? #print(len(list_duplicates))
????? for i in range(0,len(list_duplicates)):
????????? if list_duplicates[i] == False :
????????????? #print(i)
????????????? #print(tmp)
????????????? #print(tmp_index)
????????????? if tmp_index != None:
????????????????? if tmp != None:
????????????????????? group.at[tmp_index,'timestamp1'] = tmp
????????????????????? tmp = None
????????????????????? tmp_index = i
????????????? else:#首條記錄
????????????????? tmp_index = i
????????? else:
????????????? tmp = group.at[i,'timestamp1']
????? #print(group)
????? group = group.drop_duplicates(['laci'])
????? if count == 0:
????????? new_data1 = group
????????? count += 1
????? else:
????????? new_data1 = new_data1.append(group)
? new_data1 = new_data1.reset_index(drop=True)
? new_data1.drop(labels=['PP'], axis=1, inplace=True)
? #new_data1.to_csv('./result/tmp.csv')
? return new_data1
#清洗漂移數(shù)據(jù)
def Cleaning_drift_data(new_data):
? groups = new_data.groupby('imsi')
? count = 0
? for name,group in groups:#
????? #print(name)
????? #print(group)
? #group = groups.get_group(460000095005565778)
????? group = group.sort_values(by=['timestamp', 'timestamp1'], axis= 0, ascending=True).reset_index(drop=True)
????? i = 0
????? #循環(huán)查找用戶連續(xù)記錄計算穿越速度>120則刪除第i+1 條記錄,繼續(xù)查找i 與i+2(此時變成i+1)
????? while i < len(group)-1 :
????????? distance = geodistance(group.at[i,'longitude'], group.at[i,'latitude'], group.at[i+1,'longitude'], group.at[i+1,'latitude'])
????????? #print(distance)
????????? timespan = get_hours(str(get_datetime(group.at[i+1,'timestamp']) - get_datetime(group.at[i,'timestamp1'])))
????????? if timespan != 0:
????????????? speed = distance / timespan
???????? ?else :
????????????? pass
????????????? #print(group[group.index == i],group[group.index == i+1])
????????? if speed > 120 :
????????????? group.drop(group.index[i + 1],inplace=True)
????????????? group = group.reset_index(drop = True)
????????????? if i != len(group) -1:
????????????????? continue
????????? i += 1
????? list_duplicates = list(group.duplicated(['laci']))
????? tmp_index = None
????? tmp = None
????? #print(len(list_duplicates))
????? for i in range(0,len(list_duplicates)):
????????? if list_duplicates[i] == False :
????????????? #print(i)
????????????? #print(tmp)
????????????? #print(tmp_index)
????????????? if tmp_index != None:
????????????????? if tmp != None:
????????????????????? group.at[tmp_index,'timestamp1'] = tmp
????????????????????? tmp = None
????????????????????? tmp_index = i
????????????? else:#首條記錄
????????????????? tmp_index = i
????????? else:
????????????? tmp = group.at[i,'timestamp1']
????? #print(group)
????? group = group.drop_duplicates(['laci'])
????? if count == 0:
????????? new_data2 = group
????????? count += 1
????? else:
????????? new_data2 = new_data2.append(group)
? new_data2 = new_data2.reset_index(drop=True)
? return new_data2
#去除重復(fù)數(shù)據(jù)
data = data.drop_duplicates().reset_index(drop=True)
#以人為單位,按時間正序排序
data = data.sort_values(by=['imsi', 'timestamp'], axis= 0, ascending=True).reset_index(drop=True)
出行方式識別-基于先驗知識計算各出行方式的隸屬度的模糊辨識模型
參考文獻:[1]劉華斌. 手機信令數(shù)據(jù)背景下城市交通出行方式選擇辨識方法研究[D].北京交通大學(xué),2019.DOI:10.26944/d.cnki.gbfju.2019.001045.
對城市整體尺度而言,一天中各區(qū)域、各斷面的交通狀態(tài)差異巨大,居民出行行為也非一成不變,采用固定的特征標(biāo)準(zhǔn)規(guī)則判斷出行特征取值閾值顯然會出現(xiàn)嚴重。城市交通的這種復(fù)雜特性,十分適合使用模糊理論進行數(shù)學(xué)描述。故本系統(tǒng)以模糊理論為基礎(chǔ),采用出行距離、出行時長和出行速度三種出行特征描述出行方式。利用總結(jié)的出行特征先驗知識,初步確定5種出行方式各自出行方式特征的基本隸屬度函數(shù)形式,根據(jù)數(shù)據(jù)集城市(廣州市)的居民出行實際情況標(biāo)定函數(shù)參數(shù),構(gòu)建出行方式模糊辨識模型,對大樣本城市交通出行方式進行基本辨識。
- 特征先驗知識提取
?????? 進入21世紀(jì)以來,不同規(guī)模城市相繼開展了城市居民出行調(diào)查,如:北京、上海、廣州、深圳、石家莊等,積攢了大量珍貴的出行調(diào)查數(shù)據(jù),統(tǒng)計了各種城市交通出行方式的出行特征。大量學(xué)術(shù)文獻基于此類調(diào)研數(shù)據(jù),對各種出行方式的出行距離、出行時長、出行平均速度等特征進行了分析、歸納和總結(jié)。近十年來,一些國內(nèi)大型城市如北京、廣州等還會以交通發(fā)展年度報告、交通運輸運行年報的形式定期發(fā)布各市交通運行統(tǒng)計數(shù)據(jù),為針對出行的各種研究提供了重要的參考資料。
?????? 常見的城市交通出行特征及取值范圍如下表所示,分別整理自北京市2017年和廣州市2017年各城市交通出行方式特征統(tǒng)計結(jié)果。
2017年北京市交通出行方式特征表
2017年廣州市交通出行方式特征表
?????? 基于上述統(tǒng)計知識,給出適用于本系統(tǒng)的各出行方式特征先驗知識如下:
(1)各出行方式平均出行距離范圍:
選擇步行出行的平均出行距離范圍為:0-1km,通常情況下不超過2km;
選擇自行車出行的平均出行距離范圍為:0—3km,通常情況下不超過5km;
選擇公交車出行的平均出行距離范圍為:0-15km,通常不低于1km,不超過20km;
選擇小汽車出行的平均出行距離范圍為:0一30km,通常不低于2km;
選擇地鐵出行的平均出行距離范圍為:0-30km,通常不低于3km。
(2)各出行方式平均出行時長范圍:
選擇步行出行的平均出行時長范圍為:0-25min,通常情況下不超過30min;
選擇自行車出行的平均出行時長范圍為:5-25min,通常情況下不超過30min;
選擇公交車出行的平均出行時長范圍為:10-40min,通常情況下不超過60 min;
選擇小汽車出行的平均出行時長范圍為:10一90min,通常情況下不低于10 min;
選擇地鐵出行的平均出行時長范圍為:10——80min,通常情況下不低于10min。
(3)各出行方式平均出行速度范圍:
選擇步行出行的平均出行速度范圍為:0一5km/h,通常情況下不超過8km/h;
選擇自行車出行的平均出行速度范圍為:5——15km/h,通常情況下不低于2km/h,通常不超過18km/h;
選擇公交車出行的平均出行速度范圍為:10-20km/h,通常情況下不低于5km/h,通常不超過30km/h;
選擇小汽車出行的平均出行速度范圍為:15—40km/h,通常情況下不低于10km/h,不超過60km/h;
選擇地鐵出行的平均出行速度范圍為:10——30km/h,通常情況下不低于10km/h,不超過40km/h。
- 模糊理論基本概念
?????? 美國學(xué)者扎德(L.A.Zadeh)于1965年創(chuàng)建了一種用于描述“含糊”現(xiàn)象的數(shù)學(xué)理論——模糊集合論。這種方法把待考察對象及對其描述的模糊概念作為模糊集合,構(gòu)建適當(dāng)?shù)碾`屬函數(shù),通過模糊集合有關(guān)的運算及變換,對模糊對象進行分析。模糊集合論以模糊數(shù)學(xué)為基礎(chǔ),研宄有關(guān)非精確的現(xiàn)象。以思維中年輕、很好、暖和等概念為例,其所描述的對象屬性并不能簡單地用“是”或“否”來回答。模糊集合就是指類似這樣的具有某個模糊概念所描述的對象的全體。
?????? 模糊集常用表示方法有:
- 解析法,即給出隸屬函數(shù)的具體表達式;
-
Zadeh記法。如
,分母是論域中的元素,分子是該元素對應(yīng)的隸屬度;
-
序偶法。如
,序偶對的前者是論域中的元素,后者是該元素對應(yīng)的隸屬度;
-
向量法,在有限論域的場合,給論域中元素規(guī)定一個表達的順序,則可以將序偶法簡寫為隸屬度的向量式,如
。
?????? 本系統(tǒng)構(gòu)建模糊集如下:
?????????????????????????????????? 出行方式模糊集合
???????????????????????????????????????????????? 出行特征模糊集合
- 隸屬度函數(shù)
?????? 本系統(tǒng)采用隸屬度函數(shù)給出模糊集(出行方式特征)的解析式。隸屬度是模糊評價函數(shù)里的概念,是對受多種因素影響的事物做出全面評價的一種十分有效的多因素決策方法,其特點是評價結(jié)果不是絕對地肯定或否定,而是以一個模糊集合來表示。若對研究的范圍 U 中的任一元素x,都有一個與之對應(yīng),則稱A為U上的模糊集,A(x)為x對A的隸屬度。當(dāng)x在U中變動時,A(x)為A的隸屬函數(shù)。
?????? 用隸屬度函數(shù)表征x屬于A的程度的高低。隸屬度A(x)越接近于1,意味著x屬于A的程度越高;反之,A(x)越接近于0則x屬于A的程度越低。
?????? 正確定義隸屬度函數(shù),是運用模糊集合理論解決實際問題的基礎(chǔ)。隸屬度函數(shù)的一般確定原則如下:
- 用來表示隸屬度函數(shù)的模糊集合應(yīng)是凸模糊集合;
- 變量所取的隸屬度函數(shù)通常是對稱且平衡的,模糊變量的標(biāo)值選擇一般為3—9個為宜;
- 隸屬度函數(shù)應(yīng)該避免不合適的重復(fù);
- 應(yīng)對在相同的研宄范圍上使用的具有語意順序的模糊集合進行合理排序;
- 研究范圍中,每個點應(yīng)隸屬于至少一個隸屬度函數(shù)區(qū)域;
- 同一個輸入值不應(yīng)出現(xiàn)多于一個隸屬度函數(shù)上同時有最大隸屬度的現(xiàn)象;
- 對兩個隸屬度函數(shù)有重疊部分的情況存在時,重疊部分對兩個隸屬度函數(shù)的最大隸屬度不應(yīng)該有交叉。
?????? 典型的隸屬度函數(shù)一般有三角形隸屬度函數(shù)、梯形隸屬度函數(shù)、高斯隸屬度函數(shù)、S型隸屬度函數(shù)等。本系統(tǒng)采用高斯、S型兩種隸屬度函數(shù),具體如下。
出行距離隸屬度函數(shù)?????????? 出行時長隸屬度函數(shù)????? 出行平均速度隸屬度函數(shù)
- 辨識模型函數(shù)設(shè)計及辨識規(guī)則
?????? (1)模型函數(shù)設(shè)計
????????????? 根據(jù)先驗知識,對于在“正負”方向均有限制的某種出行方式某種出行特征,采取高斯隸屬函數(shù);對于單方向有限制的出行特征,采用S型隸屬度函數(shù)。
?????? (2)辨識規(guī)則
?????? 根據(jù)出行距離、出行時長和平均出行速度3個影響特征綜合辨識居民單次出行所選擇的出行方式。辨識規(guī)則如下:
- 通過步行的出行距離隸屬度、步行的出行時長隸屬度和步行的平均出行速度隸屬度,辨識步行出行方式隸屬度值;
- 通過自行車的出行距離隸屬度、步行的出行時長隸屬度和步行的平均出行速度隸屬度,辨識步行出行方式隸屬度值;
- 通過公交車的出行距離隸屬度、步行的出行時長隸屬度和步行的平均出行速度隸屬度,辨識步行出行方式隸屬度值;
- 通過小汽車的出行距離隸屬度、步行的出行時長隸屬度和步行的平均出行速度隸屬度,辨識步行出行方式隸屬度值;
- 通過地鐵的出行距離隸屬度、步行的出行時長隸屬度和步行的平均出行速度隸屬度,辨識步行出行方式隸屬度值;
?????? (3)基礎(chǔ)建模
?????? 辨識結(jié)果規(guī)定為:被分別判定為5種交通方式的隸屬度最大值所對應(yīng)的交通方式。(做PPT只要下面兩個公式)文章來源:http://www.zghlxwxcb.cn/news/detail-484600.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-484600.html
到了這里,關(guān)于基于手機信令數(shù)據(jù)的數(shù)據(jù)清洗和出行方式識別的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!