彭 輝
(湖南科技職業(yè)學(xué)院,長沙 410004)
隨著軌道列車智能運(yùn)維系統(tǒng)的部署運(yùn)行,軌道列車關(guān)鍵部件的工況數(shù)據(jù)可實(shí)時(shí)傳回給地面數(shù)據(jù)處理中心,列車行車過程中產(chǎn)生的事件記錄文件也可通過庫內(nèi)文件傳輸通道上傳給地面服務(wù)器。為了對(duì)列車健康狀態(tài)進(jìn)行科學(xué)評(píng)估,可利用這些工況數(shù)據(jù)和記錄文件進(jìn)行分析,以確定列車是否發(fā)生了故障。目前,列車故障的檢測是基于列車回庫后,通過下載事件記錄文件的方式來分析列車故障情況的,但利用此方式進(jìn)行的故障檢測,不具時(shí)效性,不能在第一時(shí)間對(duì)列車故障進(jìn)行預(yù)警。
本文探討使用機(jī)器學(xué)習(xí)算法實(shí)現(xiàn)對(duì)列車工況的實(shí)時(shí)分析和故障預(yù)測。使用列車的故障數(shù)據(jù)庫作為訓(xùn)練數(shù)據(jù)集構(gòu)建智能識(shí)別模型,利用參數(shù)調(diào)試技術(shù)對(duì)模型進(jìn)行優(yōu)化調(diào)試,選擇識(shí)別度高的模型作為智能識(shí)別模型,將其應(yīng)用到診斷任務(wù),并將診斷分析的結(jié)果作為判斷列車是否健康運(yùn)行的依據(jù)。
機(jī)器學(xué)習(xí)的主要任務(wù)是研究如何通過計(jì)算的手段,利用歷史數(shù)據(jù)集學(xué)習(xí)得到智能識(shí)別模型,并使用該模型對(duì)測試樣本進(jìn)行預(yù)測的一種方法。
根據(jù)歷史數(shù)據(jù)集樣本記錄是否帶結(jié)果標(biāo)簽,可將機(jī)器學(xué)習(xí)任務(wù)分為有監(jiān)督學(xué)習(xí)和無監(jiān)督學(xué)習(xí)。有監(jiān)督學(xué)習(xí)包含分類和回歸兩類算法,無監(jiān)督學(xué)習(xí)包括聚類和降維等算法。常用的機(jī)器學(xué)習(xí)任務(wù)包括分類、回歸和聚類。
分類是指根據(jù)給定的帶類別標(biāo)簽的數(shù)據(jù)集樣本,通過指定的算法訓(xùn)練得到分類識(shí)別模型。利用構(gòu)建的分類模型,可對(duì)新樣本數(shù)據(jù)進(jìn)行類別預(yù)測。在分類任務(wù)中,用于構(gòu)建模型的樣本數(shù)據(jù)由特征數(shù)據(jù)和標(biāo)簽構(gòu)成。特征數(shù)據(jù)就是對(duì)樣本的特征描述,也稱為數(shù)據(jù)項(xiàng);標(biāo)簽是指樣本所屬的類別,它由離散型數(shù)值表示。常用的分類算法包括:邏輯回歸、決策樹、支持向量機(jī)、樸素貝葉斯等。
回歸算法就是通過對(duì)數(shù)據(jù)特征的學(xué)習(xí),訓(xùn)練得到一個(gè)回歸模型,從而建立特征數(shù)據(jù)與標(biāo)簽值之間的映射關(guān)系。它與分類任務(wù)的區(qū)別在于分類任務(wù)的標(biāo)簽是離散型數(shù)值,而回歸任務(wù)的標(biāo)簽是連續(xù)型數(shù)值。線性回歸算法是一種典型的回歸任務(wù)。
聚類任務(wù)是一種無監(jiān)督的學(xué)習(xí)方法,對(duì)訓(xùn)練數(shù)據(jù)無標(biāo)簽的要求。聚類算法的核心思想可以通過“物以類聚,人以群分”來形容,其基本任務(wù)是把數(shù)據(jù)集中的樣本按照一定的規(guī)則劃分為多個(gè)相似子集的過程。常用的聚類算法包括K-means和DBSCAN聚類算法。
機(jī)器學(xué)習(xí)模型開發(fā)和應(yīng)用的處理流程如圖1所示。
圖1 機(jī)器學(xué)習(xí)處理工作流程示意圖
本文介紹使用機(jī)器學(xué)習(xí)分類模型來實(shí)現(xiàn)故障預(yù)測功能的方法,分別從數(shù)據(jù)采集、模型確定與構(gòu)建、模型優(yōu)化、模型應(yīng)用等方面進(jìn)行描述。
利用機(jī)器學(xué)習(xí)算法模型對(duì)列車進(jìn)行故障診斷,診斷的輸入數(shù)據(jù)來自于列車關(guān)鍵部件的實(shí)時(shí)狀態(tài)數(shù)據(jù),診斷的結(jié)果即有無故障發(fā)生。要構(gòu)建這一故障診斷模型,首先需要根據(jù)待診斷故障的特點(diǎn),對(duì)實(shí)時(shí)工況數(shù)據(jù)進(jìn)行特征的提取和選擇,并結(jié)合同時(shí)段的事件記錄文件信息確定構(gòu)建模型所需的訓(xùn)練數(shù)據(jù)集;然后使用數(shù)據(jù)集構(gòu)建機(jī)器學(xué)習(xí)模型,并對(duì)模型進(jìn)行優(yōu)化和調(diào)參以獲取預(yù)測性能高的模型。
列車在運(yùn)行過程中,會(huì)將關(guān)鍵部件的狀態(tài)數(shù)據(jù)實(shí)時(shí)上傳到地面數(shù)據(jù)處理中心;列車入庫后,會(huì)將網(wǎng)絡(luò)控制系統(tǒng)的事件記錄文件批量上傳到地面服務(wù)器。通過整合同一時(shí)段的實(shí)時(shí)狀態(tài)數(shù)據(jù)和事件記錄信息,可以得到列車在特定時(shí)段的工況信息和故障狀態(tài),形成一條故障記錄樣例,所有時(shí)間段的故障記錄條目構(gòu)成一個(gè)完整的數(shù)據(jù)集。
如果用(x,y)表示某特定時(shí)刻的故障記錄,那么由條故障記錄條目構(gòu)成的數(shù)據(jù)集可表示為={ (,),(,),…,(x,y)}。其 中x={x,x,x,…,x}是一個(gè)維向量,對(duì)應(yīng)故障記錄樣例中的一組(共個(gè))實(shí)時(shí)狀態(tài)值;x是x在第個(gè)屬性上的取值,對(duì)應(yīng)著某特定時(shí)刻的一個(gè)具體的信號(hào)狀態(tài)值;y是故障記錄樣例x的標(biāo)記,表示是否發(fā)生了故障。
以緊急制動(dòng)無法緩解故障為例,與該故障相關(guān)的實(shí)時(shí)信號(hào)包括網(wǎng)絡(luò)緊急制動(dòng)狀態(tài)、信號(hào)緊急制動(dòng)狀態(tài)、列車綜合速度、列車方向、DIM完整性狀態(tài)、緊急制動(dòng)列車線狀態(tài)等6個(gè)信號(hào)狀態(tài)。通過整合實(shí)時(shí)狀態(tài)數(shù)據(jù)和事件記錄文件后,得到的故障記錄樣例x={x,x,x,…,x}包含6個(gè)屬性,分別表示特定時(shí)刻的6個(gè)信號(hào)狀態(tài)值,得到的故障記錄樣例標(biāo)記y表示此時(shí)是否有緊急制動(dòng)無法緩解故障發(fā)生情況(0:無故障,1:有故障)。
針對(duì)緊急制動(dòng)無法緩解故障,故障診斷模型所涉及的數(shù)據(jù)集結(jié)構(gòu)如表1所示。
表1 列車緊急制動(dòng)無法緩解故障數(shù)據(jù)集
表1中的“樣例ID”是一個(gè)標(biāo)識(shí)號(hào),沒有實(shí)際意義;“信號(hào)1取值”、“信號(hào)2取值”、…、“信號(hào)6取值”依次表示“網(wǎng)絡(luò)緊急制動(dòng)狀態(tài)”、“信號(hào)緊急制動(dòng)狀態(tài)”…、“緊急制動(dòng)列車線狀態(tài)”等6個(gè)具體信號(hào)狀態(tài)值,它們共同構(gòu)成數(shù)據(jù)集樣本的特征;“故障狀態(tài)”則是數(shù)據(jù)集的標(biāo)簽,代表是否發(fā)生故障的結(jié)果。
列車故障診斷是根據(jù)列車運(yùn)行工況,判斷列車在運(yùn)行過程中是否有特定故障發(fā)生,該問題在機(jī)器學(xué)習(xí)應(yīng)用中屬于分類問題。解決分類問題的機(jī)器學(xué)習(xí)模型包括K近鄰算法、決策樹、支持向量機(jī)、樸素貝葉斯算法。這些分類模型都能夠用于列車故障檢測,本文探討使用決策樹及其優(yōu)化模型進(jìn)行故障診斷預(yù)測。
決策樹是一種有監(jiān)督的分類算法,決策樹可以是二叉樹,也可以是多叉樹,每個(gè)根節(jié)點(diǎn)和分支節(jié)點(diǎn)表示一個(gè)特征屬性上的測試或判斷,每個(gè)樹枝代表該特征屬性在某個(gè)值域上的輸出,樹葉節(jié)點(diǎn)則代表一個(gè)分類類別。決策樹結(jié)構(gòu)如圖2所示。
圖2 決策樹分支模型
構(gòu)造決策樹的關(guān)鍵是如何確定決策樹的分裂節(jié)點(diǎn)。為此,需要對(duì)樣本的屬性進(jìn)行選擇,并按照該屬性的不同劃分構(gòu)造不同的分支,使得每個(gè)分裂子集的純度盡可能地高。在決策樹中,用信息熵來表示樣本集的不純度,信息熵()的值越小,則數(shù)據(jù)集的純度越高。
數(shù)據(jù)集的信息熵定義為:
其中p(=1,2,…,||)表示數(shù)據(jù)集合中第類樣本所占的比例。
為了比較不同屬性對(duì)樣本數(shù)據(jù)集分類好壞的程度,可以使用信息增益來衡量:某屬性有個(gè)可能的取值{,,…,a},如果用屬性來劃分?jǐn)?shù)據(jù)集,則會(huì)生成個(gè)分支節(jié)點(diǎn),每個(gè)分支節(jié)點(diǎn)包含了數(shù)據(jù)集中所有在屬性上取值等于a的樣本,記為D。則屬性對(duì)樣本集進(jìn)行劃分所獲得的“信息增益”為:
基于信息增益的決策樹算法代表有ID3算法。但是在ID3決策樹計(jì)算過程中,信息增益對(duì)可取值數(shù)目較多的屬性有所偏好,為減少這種偏好帶來的影響,可以使用“增益率”來選擇最優(yōu)劃分屬性,信息增益率定義如下:
其中()稱為的固有值,屬性的可能取值數(shù)目越多,則()的值越大?;谛畔⒃鲆媛蕵?gòu)建的決策樹,在決策樹分裂時(shí),可以選擇信息增益率較大的候選劃分屬性?;谛畔⒃鲆媛蕵?gòu)建的決策樹典型代表是C4.5決策樹。
使用單個(gè)決策樹模型進(jìn)行故障診斷判斷,模型的精確度難免會(huì)不高。為了提升模型性能,可以使用集成學(xué)習(xí)算法,將多個(gè)決策樹模型按照一定的策略組合在一起,形成功能更加強(qiáng)大的模型。
集成學(xué)習(xí)不是一個(gè)單獨(dú)的機(jī)器學(xué)習(xí)算法,它是將若干個(gè)體學(xué)習(xí)器組合成一個(gè)強(qiáng)分類器,從而提升分類效果。集成學(xué)習(xí)模型構(gòu)建流程:給定包含個(gè)樣本的訓(xùn)練數(shù)據(jù)集,從中多次隨機(jī)采樣得到數(shù)據(jù)集的子集、、…、,然后以這些子數(shù)據(jù)集構(gòu)建弱分類器模型、、…C;模型測試時(shí),所有的弱分類器都參與預(yù)測,并利用預(yù)測結(jié)果對(duì)模型的輸出進(jìn)行投票。集成學(xué)習(xí)模型構(gòu)建原理如圖3所示。
圖3 集成學(xué)習(xí)基本原理
隨機(jī)森林模型是一種經(jīng)典的集成算法,它使用決策樹作為個(gè)體學(xué)習(xí)器,其構(gòu)建過程如下:
①抽樣產(chǎn)生每棵決策樹的訓(xùn)練數(shù)據(jù)集。隨機(jī)森林采用抽樣技術(shù)從原始訓(xùn)練數(shù)據(jù)集中產(chǎn)生個(gè)訓(xùn)練子集。
②構(gòu)建棵決策樹(個(gè)體學(xué)習(xí)器)。每一個(gè)訓(xùn)練子集生成一棵決策樹,從而產(chǎn)生棵決策樹形成森林。
③生成隨機(jī)森林,以簡單多數(shù)的原則決定該樣本是哪個(gè)類別。對(duì)樣本做測試時(shí),隨機(jī)森林將所有子樹的結(jié)果進(jìn)行整合,最后以簡單多數(shù)的原則給出最后預(yù)測的結(jié)果。
隨機(jī)森林模型構(gòu)建時(shí),需要預(yù)設(shè)一些參數(shù)值,不同的參數(shù)所構(gòu)造的模型性能是有差異的。為了確保故障診斷模型高準(zhǔn)確度,需要對(duì)模型的參數(shù)進(jìn)行調(diào)試,即模型調(diào)參。
隨機(jī)森林模型參數(shù)調(diào)試可以從如下幾方面入手:①從降低模型整體方差考慮,隨機(jī)森林模型中決策樹的個(gè)數(shù)應(yīng)選擇適當(dāng)、劃分子數(shù)據(jù)集時(shí)采用隨機(jī)采樣;②考慮屬性分裂的條件,可選用信息熵方式或基尼指數(shù)方式;③粗粒度調(diào)整樹結(jié)構(gòu),考慮調(diào)整樹的最大深度和決策樹最大特征數(shù);④細(xì)粒度調(diào)整樹結(jié)構(gòu),可調(diào)整內(nèi)部節(jié)點(diǎn)再劃分所需最小樣本數(shù)和葉子節(jié)點(diǎn)最小樣本數(shù)。
確定好被調(diào)參數(shù)后,可以使用隨機(jī)搜索法或網(wǎng)格搜索法對(duì)模型進(jìn)行調(diào)參,以獲取性能最佳的模型及模型參數(shù)。
使用網(wǎng)格搜索法進(jìn)行隨機(jī)森林模型調(diào)參的Python示例代碼如下:
#森林中樹的個(gè)數(shù)、樣本采樣方法、決策樹類型參數(shù)
n_estimators=[int(x)for x in np.linspace(start=100,stop=500,num=10)]
bootstrap=[True,False]
criterion=["gini","entropy"]
#最大特征選擇方式、樹的最大深度參數(shù)
max_features=[′sqrt′,′auto′,′log2′]
max_depth=[int(x)for x in np.linspace(5,30,num=2)]
max_depth.append(None)
#節(jié)點(diǎn)最小分裂所需樣本數(shù)、葉子節(jié)點(diǎn)最小樣本數(shù)
min_samples_split=[2,5,10]
min_samples_left=[1,2,4]
#使用網(wǎng)格搜索法,探尋最佳模型及參數(shù)
random_grid_randcv={
′n_estimators′:n_estimators,′bootstrap′:bootstrap,′criterion′:criterion,′max_depth′:max_depth,′max_features′:max_features, ′min_samples_split′: min_samples_split,′min_samples_leaf′:min_samples_left
}
rfg_random=RandomizedSearchCV(rfmodel,param_distributions=random_grid_randcv)
rfg_random.fit(train_x,train_y)
#根據(jù)搜索的結(jié)果提取最佳模型、最佳模型的參數(shù)
best_model=rfg_random.best_estimator_
best_params=rfg_random.best_params_
當(dāng)網(wǎng)格搜索完成后,會(huì)得到最佳的模型best_model,將該模型保存后,可在應(yīng)用程序中直接導(dǎo)入使用。
列車在運(yùn)行過程中,會(huì)將列車工況數(shù)據(jù)實(shí)時(shí)傳送給地面數(shù)據(jù)處理中心,其過程如圖4所示。
圖4 車地傳輸架構(gòu)圖
要對(duì)這些實(shí)時(shí)數(shù)據(jù)進(jìn)行故障診斷,需在地面服務(wù)器設(shè)計(jì)故障診斷模塊,該模塊的處理流程如下。
(1)模塊初始化。以歷史故障數(shù)據(jù)作為數(shù)據(jù)集D構(gòu)建隨機(jī)森林模型,使用網(wǎng)格搜索法對(duì)模型進(jìn)行調(diào)參,將最佳模型保存為Best_Model。
(2)從地面數(shù)據(jù)處理中心讀取最近10秒的列車實(shí)時(shí)數(shù)據(jù),保存為RealDatas;從RealDatas中提取與所診斷故障相關(guān)的點(diǎn)位信號(hào)值作為模型的輸入數(shù)據(jù),并保存為InputDatas。
(3)調(diào)用模型Best_Model的predict()接口,對(duì)輸入數(shù)據(jù)InputDatas進(jìn)行測試。測試的結(jié)果會(huì)通過消息隊(duì)列發(fā)送給其他模塊進(jìn)行處理。
(4)短暫休眠10秒,繼續(xù)跳轉(zhuǎn)到(2)執(zhí)行。
上述處理的故障診斷結(jié)果經(jīng)由消息隊(duì)列向其他模塊傳遞,由具體的業(yè)務(wù)模塊進(jìn)行讀取和使用。因?yàn)楣收显\斷有實(shí)時(shí)性的要求,每隔一段時(shí)間就應(yīng)對(duì)當(dāng)前的實(shí)時(shí)數(shù)據(jù)進(jìn)行一次檢測任務(wù),所以,上述流程是一個(gè)循環(huán)處理流程。
本文介紹的基于機(jī)器學(xué)習(xí)的故障診斷功能已在實(shí)驗(yàn)室進(jìn)行模擬實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果表明能有效地對(duì)列車故障進(jìn)行預(yù)測。但如何將這一功能部署到實(shí)際生產(chǎn)環(huán)境中去,還需要進(jìn)一步的研究和驗(yàn)證。