基于支持向量机的汽轮机组部件健康率监测系统
2020-06-12哈尔滨工程大学机电工程学院徐芸洁马佳瑞
哈尔滨工程大学机电工程学院 富 威 刘 琪 许 凯 徐芸洁 马佳瑞
随着计算机技术的迅猛发展,在电力设备运行状态监测领域,基于人工智能及其相关技术的设备健康监测系统研究和应用已成为工程技术人员的研究热点[1]。傅雷[2]提出一种基于VMD-Ren yi熵多信息融合的支持向量机(SVM)分类方法;韩中合、刘明浩[3]构建了一套以支持向量机算法为核心的汽轮机振动故障诊断系统;石志标、宋全刚[4]等人利用一种改进的粒子群算法(MPSO)对支持向量机进行参数优化,并利用故障数据进行模式识别。本文将支持向量机应用于汽轮机状态监测系统中,基于支持向量机构建健康率预测模型,实现对汽轮机组部件的状态监测。
1 支持向量机模型的建立
1.1 支持向量机模型建立流程
支持向量机预测模型建立流程如图1所示。对原始样本集进行预处理,将样本集分为训练集、验证集和测试集三个部分。针对训练集中的特征数据选取适当的单一模型进行训练,在训练的过程中调整参数,得到相关支持向量机模型;再利用验证集中的特征数据对模型进行验证;若不满足需求,则继续调整模型的参数,直至模型满足要求;模型构建完成后,利用测试集数据进行测试,进而得到预测结果。支持向量机模型建立的大致过程可以归纳为三个步骤:获取原始样本集、数据预处理和构建支持向量机模型。
图 1 支持向量机模型建立流程图
1.2 获取原始样本数据集
本文所使用的数据集来自核电厂核电凝汽式1000MW汽轮机(HN1000-6.43)日常运行监测数据,利用pandas实现对数据的读取,pandas在代码中用pd表示。实现读取数据的代码形式如下:dataset1=pd.read_csv('G:/3dOSG/osg18.6.8 final/data/7_train_data1.csv')
1.3 数据预处理
在数据分析与建模的过程中,数据预处理是一个非常重要的环节,主要包括数据去重、数据归约、数据降维、数据拆分。数据去重是将数据中重复的部分进行删除,完成数据去重的代码为:dataset1.drop_duplicates(inplace=True)
数据归约的目的是在保持数据原貌的前提下,对数据进行压缩、精简,降低数据集的规模。其代码为:trains.drop(delete_columns,axis=1,inplace=True),online_test.drop(delete_columns,axis=1,inplace=True)
数据降维是将高维度数据中较为重要的特征保留下来,去除次要特征,提高数据处理速度,本文中数据降维选用主成分分析方法(PCA)。其代码如下:
from sklearn.decomposition import PCA
train_pca=PCA(n_components='mle')
train_pca.fit(trains) #训 练;n_compoe nts='mle' #表示自动确定需要保留的特征数
train_pca.transform(trains) #降维
train_pca.inverse_transform(trains) #反转
数据拆分是将数据集划分成训练集、验证集和测试集的过程,随机将数据集的60%划为训练集,剩余的数据等分为验证集和测试集。其代码为:
print("数据拆分")
train_xy,offline_test=train_test_split(trains,test_size=0.2,random_state=21)
train,val=train_test_split(train_xy,test_size=0.2,random_state=21)
print("训练集")
y=train.is_trade #训练集标签
X=train.drop(['instance_id','is_trade'], axis=1) #训练集特征矩阵
print("验证集")
val_y=val.is_trade #验证集标签
val_X=val.drop(['instance_id','is_trade'], axis=1) #验证集特征矩阵
print("测试集")
offline_test_X=offline_test.drop(['instance_id','is_trade'],axis=1) #线下测试特征矩阵
online_test_X=online_test.drop(['instance_id'],axis=1) #线上测试特征矩阵
1.4 构建支持向量机模型
支持向量机的预测性能与模型构建过程中核函数的选择及相关参数的选取有着直接关系[5]。本文从sklearn中导入支持向量机模型,选取高斯径向基核函数,构建模型过程的代码如下。
from sklearn.svm import SVC;global model
model=SVC(kernel="rbf",probability=True,verbose=False).fit(x_train,y_train) #创建模型
def validate_model():
print("模型验证")
score=model.score(x_valid,y_valid)
print(score);return score #模型验证
def predict_model(datapath):
create_model(datapath)
print("模型预测");global list
list=model.predict_proba(x_test)
list=list[:,0];list=list.tolist()
model_score=validate_model()
list.insert(0,model_score);return list #模型预测
2 系统实现
2.1 系统设计方案
为满足状态监测系统的基本要求,对系统的功能模块进行设计。所设计搭建的汽轮机状态监测系统主要功能有文件功能、编辑功能、构建功能、模型训练、模型监测、视图、设置和指标等。
2.2 系统功能的实现
本系统使用c++语言作为编写语言,在c++中调用python来实现支持向量机,完成模型训练和模型预测;利用Qt进行界面设计,通过OSG(Open Scene Gragh)完成三维模型在系统界面中的渲染。本文系统所使用的三维模型,对汽轮机的控制设备和凝汽部分进行了省略,高压缸和低压缸部分都实现了较好的三维复现。本系统的操作是在汽轮机三维模型的基础上进行的,主要采用结构树的方式表达汽轮机三维模型当前状态,通过选择结构树中相应的子模型,进而实现对三维模型的相关操作。
2.3 系统运行测试
将数据导入到系统后,系统利用数据开始训练模型,进行支持向量机模型的构建。模型构建完成后,对模型的正确率进行验证,得到当前模型的正确率为94.6027%,满足模型准确率的需要。在模型构建完成且其正确率满足要求后,系统就可对设备部件进行健康率监测,监测结果以百分比的形式滚动显示在健康率监测模块中。由监测结果可以得出1#径向轴承的健康率为90.1067%,可推断出1#径向轴承的健康程度很高,与从核电厂工作人员了解到的情况相符。
3 结语
图2 三维模型结构树
本文所设计的汽轮机状态监测系统对汽轮机组轴系部件进行健康率监测,得到的健康率结果,能较为直观的体现设备的健康程度,有效指导设备的运行维护。本文主要对基于支持向量机的汽轮机状态监测系统相关内容进行阐述,重点介绍了支持向量机模型的构建流程及关键代码,对系统的实现进行具体说明。对后续的汽轮机运行状态监测系统设计具有一定的参考价值。