基于机器学习的列车故障诊断应用研究
2022-08-20彭辉
彭 辉
(湖南科技职业学院,长沙 410004)
0 引言
随着轨道列车智能运维系统的部署运行,轨道列车关键部件的工况数据可实时传回给地面数据处理中心,列车行车过程中产生的事件记录文件也可通过库内文件传输通道上传给地面服务器。为了对列车健康状态进行科学评估,可利用这些工况数据和记录文件进行分析,以确定列车是否发生了故障。目前,列车故障的检测是基于列车回库后,通过下载事件记录文件的方式来分析列车故障情况的,但利用此方式进行的故障检测,不具时效性,不能在第一时间对列车故障进行预警。
本文探讨使用机器学习算法实现对列车工况的实时分析和故障预测。使用列车的故障数据库作为训练数据集构建智能识别模型,利用参数调试技术对模型进行优化调试,选择识别度高的模型作为智能识别模型,将其应用到诊断任务,并将诊断分析的结果作为判断列车是否健康运行的依据。
1 机器学习简述
机器学习的主要任务是研究如何通过计算的手段,利用历史数据集学习得到智能识别模型,并使用该模型对测试样本进行预测的一种方法。
根据历史数据集样本记录是否带结果标签,可将机器学习任务分为有监督学习和无监督学习。有监督学习包含分类和回归两类算法,无监督学习包括聚类和降维等算法。常用的机器学习任务包括分类、回归和聚类。
分类是指根据给定的带类别标签的数据集样本,通过指定的算法训练得到分类识别模型。利用构建的分类模型,可对新样本数据进行类别预测。在分类任务中,用于构建模型的样本数据由特征数据和标签构成。特征数据就是对样本的特征描述,也称为数据项;标签是指样本所属的类别,它由离散型数值表示。常用的分类算法包括:逻辑回归、决策树、支持向量机、朴素贝叶斯等。
回归算法就是通过对数据特征的学习,训练得到一个回归模型,从而建立特征数据与标签值之间的映射关系。它与分类任务的区别在于分类任务的标签是离散型数值,而回归任务的标签是连续型数值。线性回归算法是一种典型的回归任务。
聚类任务是一种无监督的学习方法,对训练数据无标签的要求。聚类算法的核心思想可以通过“物以类聚,人以群分”来形容,其基本任务是把数据集中的样本按照一定的规则划分为多个相似子集的过程。常用的聚类算法包括K-means和DBSCAN聚类算法。
机器学习模型开发和应用的处理流程如图1所示。
图1 机器学习处理工作流程示意图
本文介绍使用机器学习分类模型来实现故障预测功能的方法,分别从数据采集、模型确定与构建、模型优化、模型应用等方面进行描述。
2 机器学习故障诊断模型构建
利用机器学习算法模型对列车进行故障诊断,诊断的输入数据来自于列车关键部件的实时状态数据,诊断的结果即有无故障发生。要构建这一故障诊断模型,首先需要根据待诊断故障的特点,对实时工况数据进行特征的提取和选择,并结合同时段的事件记录文件信息确定构建模型所需的训练数据集;然后使用数据集构建机器学习模型,并对模型进行优化和调参以获取预测性能高的模型。
2.1 确定数据集
列车在运行过程中,会将关键部件的状态数据实时上传到地面数据处理中心;列车入库后,会将网络控制系统的事件记录文件批量上传到地面服务器。通过整合同一时段的实时状态数据和事件记录信息,可以得到列车在特定时段的工况信息和故障状态,形成一条故障记录样例,所有时间段的故障记录条目构成一个完整的数据集。
如果用(x,y)表示某特定时刻的故障记录,那么由条故障记录条目构成的数据集可表示为={ (,),(,),…,(x,y)}。其 中x={x,x,x,…,x}是一个维向量,对应故障记录样例中的一组(共个)实时状态值;x是x在第个属性上的取值,对应着某特定时刻的一个具体的信号状态值;y是故障记录样例x的标记,表示是否发生了故障。
以紧急制动无法缓解故障为例,与该故障相关的实时信号包括网络紧急制动状态、信号紧急制动状态、列车综合速度、列车方向、DIM完整性状态、紧急制动列车线状态等6个信号状态。通过整合实时状态数据和事件记录文件后,得到的故障记录样例x={x,x,x,…,x}包含6个属性,分别表示特定时刻的6个信号状态值,得到的故障记录样例标记y表示此时是否有紧急制动无法缓解故障发生情况(0:无故障,1:有故障)。
针对紧急制动无法缓解故障,故障诊断模型所涉及的数据集结构如表1所示。
表1 列车紧急制动无法缓解故障数据集
表1中的“样例ID”是一个标识号,没有实际意义;“信号1取值”、“信号2取值”、…、“信号6取值”依次表示“网络紧急制动状态”、“信号紧急制动状态”…、“紧急制动列车线状态”等6个具体信号状态值,它们共同构成数据集样本的特征;“故障状态”则是数据集的标签,代表是否发生故障的结果。
2.2 故障诊断模型构建
列车故障诊断是根据列车运行工况,判断列车在运行过程中是否有特定故障发生,该问题在机器学习应用中属于分类问题。解决分类问题的机器学习模型包括K近邻算法、决策树、支持向量机、朴素贝叶斯算法。这些分类模型都能够用于列车故障检测,本文探讨使用决策树及其优化模型进行故障诊断预测。
决策树是一种有监督的分类算法,决策树可以是二叉树,也可以是多叉树,每个根节点和分支节点表示一个特征属性上的测试或判断,每个树枝代表该特征属性在某个值域上的输出,树叶节点则代表一个分类类别。决策树结构如图2所示。
图2 决策树分支模型
构造决策树的关键是如何确定决策树的分裂节点。为此,需要对样本的属性进行选择,并按照该属性的不同划分构造不同的分支,使得每个分裂子集的纯度尽可能地高。在决策树中,用信息熵来表示样本集的不纯度,信息熵()的值越小,则数据集的纯度越高。
数据集的信息熵定义为:
其中p(=1,2,…,||)表示数据集合中第类样本所占的比例。
为了比较不同属性对样本数据集分类好坏的程度,可以使用信息增益来衡量:某属性有个可能的取值{,,…,a},如果用属性来划分数据集,则会生成个分支节点,每个分支节点包含了数据集中所有在属性上取值等于a的样本,记为D。则属性对样本集进行划分所获得的“信息增益”为:
基于信息增益的决策树算法代表有ID3算法。但是在ID3决策树计算过程中,信息增益对可取值数目较多的属性有所偏好,为减少这种偏好带来的影响,可以使用“增益率”来选择最优划分属性,信息增益率定义如下:
其中()称为的固有值,属性的可能取值数目越多,则()的值越大。基于信息增益率构建的决策树,在决策树分裂时,可以选择信息增益率较大的候选划分属性。基于信息增益率构建的决策树典型代表是C4.5决策树。
2.3 故障诊断模型优化
使用单个决策树模型进行故障诊断判断,模型的精确度难免会不高。为了提升模型性能,可以使用集成学习算法,将多个决策树模型按照一定的策略组合在一起,形成功能更加强大的模型。
集成学习不是一个单独的机器学习算法,它是将若干个体学习器组合成一个强分类器,从而提升分类效果。集成学习模型构建流程:给定包含个样本的训练数据集,从中多次随机采样得到数据集的子集、、…、,然后以这些子数据集构建弱分类器模型、、…C;模型测试时,所有的弱分类器都参与预测,并利用预测结果对模型的输出进行投票。集成学习模型构建原理如图3所示。
图3 集成学习基本原理
随机森林模型是一种经典的集成算法,它使用决策树作为个体学习器,其构建过程如下:
①抽样产生每棵决策树的训练数据集。随机森林采用抽样技术从原始训练数据集中产生个训练子集。
②构建棵决策树(个体学习器)。每一个训练子集生成一棵决策树,从而产生棵决策树形成森林。
③生成随机森林,以简单多数的原则决定该样本是哪个类别。对样本做测试时,随机森林将所有子树的结果进行整合,最后以简单多数的原则给出最后预测的结果。
2.4 模型参数调试
随机森林模型构建时,需要预设一些参数值,不同的参数所构造的模型性能是有差异的。为了确保故障诊断模型高准确度,需要对模型的参数进行调试,即模型调参。
随机森林模型参数调试可以从如下几方面入手:①从降低模型整体方差考虑,随机森林模型中决策树的个数应选择适当、划分子数据集时采用随机采样;②考虑属性分裂的条件,可选用信息熵方式或基尼指数方式;③粗粒度调整树结构,考虑调整树的最大深度和决策树最大特征数;④细粒度调整树结构,可调整内部节点再划分所需最小样本数和叶子节点最小样本数。
确定好被调参数后,可以使用随机搜索法或网格搜索法对模型进行调参,以获取性能最佳的模型及模型参数。
使用网格搜索法进行随机森林模型调参的Python示例代码如下:
#森林中树的个数、样本采样方法、决策树类型参数
n_estimators=[int(x)for x in np.linspace(start=100,stop=500,num=10)]
bootstrap=[True,False]
criterion=["gini","entropy"]
#最大特征选择方式、树的最大深度参数
max_features=[′sqrt′,′auto′,′log2′]
max_depth=[int(x)for x in np.linspace(5,30,num=2)]
max_depth.append(None)
#节点最小分裂所需样本数、叶子节点最小样本数
min_samples_split=[2,5,10]
min_samples_left=[1,2,4]
#使用网格搜索法,探寻最佳模型及参数
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)
#根据搜索的结果提取最佳模型、最佳模型的参数
best_model=rfg_random.best_estimator_
best_params=rfg_random.best_params_
当网格搜索完成后,会得到最佳的模型best_model,将该模型保存后,可在应用程序中直接导入使用。
3 机器学习故障诊断模型应用
列车在运行过程中,会将列车工况数据实时传送给地面数据处理中心,其过程如图4所示。
图4 车地传输架构图
要对这些实时数据进行故障诊断,需在地面服务器设计故障诊断模块,该模块的处理流程如下。
(1)模块初始化。以历史故障数据作为数据集D构建随机森林模型,使用网格搜索法对模型进行调参,将最佳模型保存为Best_Model。
(2)从地面数据处理中心读取最近10秒的列车实时数据,保存为RealDatas;从RealDatas中提取与所诊断故障相关的点位信号值作为模型的输入数据,并保存为InputDatas。
(3)调用模型Best_Model的predict()接口,对输入数据InputDatas进行测试。测试的结果会通过消息队列发送给其他模块进行处理。
(4)短暂休眠10秒,继续跳转到(2)执行。
上述处理的故障诊断结果经由消息队列向其他模块传递,由具体的业务模块进行读取和使用。因为故障诊断有实时性的要求,每隔一段时间就应对当前的实时数据进行一次检测任务,所以,上述流程是一个循环处理流程。
4 结语
本文介绍的基于机器学习的故障诊断功能已在实验室进行模拟实验,实验结果表明能有效地对列车故障进行预测。但如何将这一功能部署到实际生产环境中去,还需要进一步的研究和验证。