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