Python环境下基于机器学习的空压机故障识别(出口阀泄漏等)

Python环境下基于机器学习(多层感知机,决策树,随机森林,高斯过程,AdaBoost,朴素贝叶斯)的压缩机故障识别(出口阀泄漏,止逆阀泄露,轴承损伤,惯性轮损伤,活塞损伤,皮带损伤等)。

空压机是一种经典的动力设备,也被誉为企业产品生产的"生命气源",,广泛应用于制药工业、爆破采煤、矿上通风、风动实验等众多领域。空压机的工作机理是通过利用旋转电机的机械能对气体进行挤压,从而使得气体能够产生巨大的能量,利用充满能量的气体进行一些爆破、通风等作业,从而满足现实中的使用需求。

本项目使用声信号检测空压机的 7 种故障,分别为出口阀泄漏Leakage Outlet Valve(LOV),入口阀泄露Leakage Inlet Valve(LIV),止逆阀泄露Non-Return Valve(NRV),轴承损伤Bearing,惯性轮损伤Flywheel,活塞损伤Piston,皮带损伤Riderbelt和健康状态。经过特征提取后,利用各种机器学习算法对空压机故障进行分类,试验台如下:

所测得的声信号以Flywheel为例

接下来开始步入正题,由于代码包含众多模块,为了避免篇幅过长,只写主函数。提取的特征可以选择维数是否约简,分类器也可选择是否进行参数优化(粒子群算法,pip install pyswarm),代码必要的标注都有了,也比较容易看懂。

import time
import pandas as pd
import numpy as np
import matplotlib.pyplot as pltMaxExpNo=10
counter=-1
#标签
labels=['Bearing','Flywheel','Healthy','LIV','LOV','NRV','Piston','Riderbelt']
import PrimaryStatFeatures  #特征提取模块
import FFT_Module  #FFT变换
#所要提取的特征
data_columns_PrimaryStatFeatures=['Mean','Min','Max','StdDv','RMS','Skewness','Kurtosis','CrestFactor','ShapeFactor']
data_columns_Target=['Fault']
Faults={labels[0]:int(0),labels[1]:int(1),labels[2]:int(2),labels[3]:int(3),labels[4]:int(4),labels[5]:int(5),labels[6]:int(6),labels[7]:int(7)}
for label in labels:for ExpNo in range(1,MaxExpNo+1):counter+=1file='Data\\'+label+'\\preprocess_Reading'+str(ExpNo)+'.txt'X=np.loadtxt(file,delimiter=',')if (counter%10==0): print('Lading files: ',str(counter/(len(labels)*MaxExpNo)*100),'% completed')StatFeatures=PrimaryStatFeatures.PrimaryFeatureExtractor(X)FFT_Features,data_columns_FFT_Features=FFT_Module.FFT_BasedFeatures(X)data_columns=data_columns_PrimaryStatFeatures+data_columns_FFT_Features+data_columns_Targetif (label==labels[0] and ExpNo==1): data=pd.DataFrame(columns=data_columns)StatFeatures[0].extend(FFT_Features)StatFeatures[0].extend([Faults[label]])df_temp=pd.DataFrame(StatFeatures,index=[counter],columns=data_columns)data=data.append(df_temp)input_data=data.drop(columns=['Fault'])
#数据标准化处理
#参考: http://benalexkeen.com/feature-scaling-with-scikit-learn/
from sklearn import preprocessing
normalization_status='RobustScaler'   
''' Choices:1. Normalization2. StandardScaler3. MinMaxScaler4. RobustScaler5. Normalizer6. WithoutNormalization   '''
input_data_columns=data_columns_PrimaryStatFeatures+data_columns_FFT_Featuresif (normalization_status=='Normalization'):data_array=preprocessing.normalize(input_data,norm='l2',axis=0)input_data=pd.DataFrame(data_array,columns=input_data_columns)
elif (normalization_status=='StandardScaler'):scaler = preprocessing.StandardScaler()scaled_df = scaler.fit_transform(input_data)input_data = pd.DataFrame(scaled_df, columns=input_data_columns)
elif (normalization_status=='MinMaxScaler'):scaler = preprocessing.MinMaxScaler()scaled_df = scaler.fit_transform(input_data)input_data = pd.DataFrame(scaled_df, columns=input_data_columns)
elif (normalization_status=='RobustScaler'):scaler = preprocessing.RobustScaler()scaled_df = scaler.fit_transform(input_data)input_data = pd.DataFrame(scaled_df, columns=input_data_columns)
elif (normalization_status=='Normalizer'):scaler = preprocessing.Normalizer()scaled_df = scaler.fit_transform(input_data)input_data = pd.DataFrame(scaled_df, columns=input_data_columns)
elif (normalization_status=='WithoutNormalization'):print ('No normalization is required')target_data=pd.DataFrame(data['Fault'],columns=['Fault'],dtype=int)DimReductionStatus=False
if (DimReductionStatus==True):for nComponents in range(1,110):#降维#主成分分析from sklearn import decompositionpca = decomposition.PCA(n_components=nComponents)pca.fit(input_data)input_data_reduced = pca.transform(input_data)#训练集和测试集划分from sklearn.model_selection import train_test_splitx_train,x_test,y_train,y_test=train_test_split(input_data_reduced,target_data,test_size=0.3,random_state=42,stratify=target_data)#使用 KNN(K 最近邻)训练import KNN_Classifiertest_accuracy_max=KNN_Classifier.KNNClassifier(x_train,x_test,y_train,y_test)plt.figure(10)plt.scatter(nComponents,test_accuracy_max)plt.xlabel('Number of utilized components based on PCA')plt.ylabel('Test Accuracy')#使用 SVC(支持向量分类器)进行训练import SVC_Classifiertest_accuracy_max=SVC_Classifier.SVCClassifier(x_train,x_test,y_train,y_test)plt.figure(11)plt.scatter(nComponents,test_accuracy_max)
else:from sklearn.model_selection import train_test_splitx_train,x_test,y_train,y_test=train_test_split(input_data,target_data,test_size=0.3,random_state=42,stratify=target_data)#使用决策树进行训练
import DT_Classifier
DT_Classifier.DTClassifier(x_train,x_test,y_train,y_test)from sklearn.neural_network import MLPClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC
from sklearn.gaussian_process import GaussianProcessClassifier
from sklearn.gaussian_process.kernels import RBF
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.discriminant_analysis import QuadraticDiscriminantAnalysis#写入最佳分类器参数
file1 = open('Optimized Parameters for Classifiers.txt','w')
print('\nThis file contains the output optimized parameters for different classifiers\n\n\n',file=file1)#分类器参数优化
#*************************************
SVMOptStatus=True
KNNOptStatus=True
MLPOptStatus=True
DTOptStatus=True
import CLFOptimizer
#pip install pyswarm
#优化 SVC 参数
if (SVMOptStatus==True):SVM_kernels = ['linear','poly','rbf','sigmoid']for KernelType in SVM_kernels:print('\n\nstage: Optimizing SVC:',KernelType)SVCParams_opt,SVCAccuracy_opt=CLFOptimizer.SVCOPT(KernelType,x_train,x_test,y_train,y_test)print('\nClassifier: SVC-',KernelType,', Gamma=',SVCParams_opt[0],', PenaltyPrameter=',SVCParams_opt[1],', Test Acuuracy=',SVCAccuracy_opt,file=file1)#优化 KNN 参数
if (KNNOptStatus==True):print('\n\nstage: Optimizing KNN')KNNParams_opt,KNNAccuracy_opt=CLFOptimizer.KNNOPT(x_train,x_test,y_train,y_test)print('\nClassifier: KNN, n_neighbors=',KNNParams_opt,', Test Acuuracy=',KNNAccuracy_opt,file=file1)#优化 MLP 分类器
if (MLPOptStatus==True):print('\n\nstage: Optimizing MLP')MLPParams_opt,MLPAccuracy_opt=CLFOptimizer.MLPOPT(x_train,x_test,y_train,y_test)print('\nClassifier: MLP, hidden_layer_sizes=(',MLPParams_opt[0],',',MLPParams_opt[1],',',MLPParams_opt[2],'), Test Acuuracy=',MLPAccuracy_opt,file=file1)#优化决策树分类器
if (DTOptStatus==True):print('\n\nstage: Optimizing Decision Tree')DTParams_opt,DTAccuracy_opt=CLFOptimizer.DTOPT(x_train,x_test,y_train,y_test)print('\nClassifier: Decision Tree, max_depth=',DTParams_opt[0],', min_samples_split=',DTParams_opt[1],', min_samples_leaf=',DTParams_opt[2],', Test Acuuracy=',DTAccuracy_opt,file=file1)file1.close()#生成分类器名称及其配置
classifiers=[]
CLFnames=[]CLFnames= CLFnames + ["SVC-linear","K-Nearest Neighbors","Multi-Layer Perceptron","Decision Tree", "Random Forest", "Gaussian Process", "AdaBoost","Naive Bayes", "QDA"]#classifiers=classifiers+ [
#    SVC(kernel='linear',gamma=1.785,C=3.463),
#    KNeighborsClassifier(n_neighbors=3),
#    MLPClassifier(hidden_layer_sizes=(28,34,80,),alpha=1),
#    DecisionTreeClassifier(),
#    RandomForestClassifier(),
#    GaussianProcessClassifier(1.0 * RBF(1.0)),
#    AdaBoostClassifier(),
#    GaussianNB(),
#    QuadraticDiscriminantAnalysis()]classifiers=classifiers+ [SVC(),KNeighborsClassifier(),MLPClassifier(),DecisionTreeClassifier(),RandomForestClassifier(),GaussianProcessClassifier(),AdaBoostClassifier(DecisionTreeClassifier(),n_estimators=1000,learning_rate=1),GaussianNB(),QuadraticDiscriminantAnalysis()]#将分类结果写入文件
f = open('ClassificationResults.txt','w')
print('\nThis file contains an overall comparison of different classifiers performance\n\n\n',file=f)
import ClassificationModule
ClassificationModule.Classifiers(CLFnames,classifiers,x_train,x_test,y_train,y_test)

分类器优化参数结果

This file contains the output optimized parameters for different classifiers

Classifier: SVC- linear , Gamma= 1.61614372336136 , PenaltyPrameter= 6.455613795161285 , Test Acuuracy= 1.0

Classifier: SVC- poly , Gamma= 0.02472261261696812 , PenaltyPrameter= 8.084311259878596 , Test Acuuracy= 0.875

Classifier: SVC- rbf , Gamma= 0.003211151769260453 , PenaltyPrameter= 3.2794598503610994 , Test Acuuracy= 0.9583333333333334

Classifier: SVC- sigmoid , Gamma= 0.001 , PenaltyPrameter= 9.44412249946835 , Test Acuuracy= 1.0

Classifier: KNN, n_neighbors= 3 , Test Acuuracy= 0.875

Classifier: MLP, hidden_layer_sizes=( 19.0 , 97.0 , 14.0 ), Test Acuuracy= 1.0

Classifier: Decision Tree, max_depth= 2121.0 , min_samples_split= 6.0 , min_samples_leaf= 4.0 , Test Acuuracy= 1.0

Training accuracy for SVC-linear is: 0.9642857142857143 and Prediction accuracy is: 0.875

Training accuracy for K-Nearest Neighbors is: 0.8928571428571429 and Prediction accuracy is: 0.7916666666666666

分类结果

Training accuracy for Multi-Layer Perceptron is: 1.0 and Prediction accuracy is: 0.9583333333333334

Training accuracy for Decision Tree is: 1.0 and Prediction accuracy is: 0.7916666666666666

Training accuracy for Random Forest is: 1.0 and Prediction accuracy is: 0.9583333333333334

Training accuracy for Gaussian Process is: 1.0 and Prediction accuracy is: 0.8333333333333334

Training accuracy for AdaBoost is: 1.0 and Prediction accuracy is: 0.9583333333333334

Training accuracy for Naive Bayes is: 1.0 and Prediction accuracy is: 0.9166666666666666

Training accuracy for QDA is: 1.0 and Prediction accuracy is: 0.3333333333333333

完整代码可通过知乎学术咨询获得:

Python环境下基于机器学习的空压机故障识别

工学博士,担任《Mechanical System and Signal Processing》审稿专家,担任《中国电机工程学报》优秀审稿专家,《控制与决策》,《系统工程与电子技术》,《电力系统保护与控制》,《宇航学报》等EI期刊审稿专家。

擅长领域:现代信号处理,机器学习,深度学习,数字孪生,时间序列分析,设备缺陷检测、设备异常检测、设备智能故障诊断与健康管理PHM等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/577572.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙OS开发实战:【打造自己的搜索入口】

背景 几乎每家应用中都带有搜索功能,关于这个功能的页面不是特别复杂,但如果要追究其背后的一系列逻辑,可能是整个应用中最复杂的一个功能。今天主要实践目标,会抛开复杂的逻辑,尝试纯粹实现一个“搜索主页”&#xf…

银河麒麟服务器操作系统安装SQLite数据库

SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且已经在很多嵌入式产品中使用了它,它占用资源非常的低&a…

如何使用Zabbix监控MySQL的MGR群集状态

MySQL的MGR(MySQL Group Replication)是MySQL官方提供的一种高可用性和高可靠性的集群解决方案。MGR通过使用基于组复制的方式,实现了多个MySQL实例之间的数据同步和故障转移,从而提供了自动故障恢复和负载均衡的功能。本文将介绍…

基于单片机锂电池电量检测数码管显示系统设计

**单片机设计介绍,基于单片机锂电池电量检测数码管显示系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机锂电池电量检测数码管显示系统设计的主要目标是实时、准确地检测锂电池的电量,并…

day4 linux上部署第一个nest项目(java转ts全栈/3R教室)

背景:上一篇吧nest-vben-admin项目,再开发环境上跑通了,并且build出来了dist文件,接下来再部署到linux试试吧 dist文件夹是干嘛的? 一个pnpn install 直接生成了两个dist文件夹,前端admin项目一个&#xf…

LLMs之Grok-1.5:Grok-1.5的简介、安装和使用方法、案例应用之详细攻略

LLMs之Grok-1.5:Grok-1.5的简介、安装和使用方法、案例应用之详细攻略 导读:xAI公司在不久前发布了Grok-1模型以及模型结构,揭示了公司到去年11月为止在大语言模型研发上的进步。2024年3月28日(美国时间),xAI以“迅雷不及掩耳之势…

2024/3/29 IOday2

所有人&#xff0c;今日作业&#xff1a;用fwrite 和 fseek功能&#xff0c;将一张bmp格式的图片更改成 德国国旗 #include <stdio.h> #include <string.h> #include <stdlib.h> int main(int argc, const char *argv[]) {FILE* fpfopen("./rising_free…

蓝桥杯刷题第四天

思路&#xff1a; 这道题很容易即可发现就是简单的暴力即可完成题目&#xff0c;我们只需满足所有数的和为偶数即可保证有满足条件的分法&#xff0c;同时也不需要存下每个输入的数据&#xff0c;只需要知道他是偶数还是奇数即可&#xff0c;因为我们只需要偶数个奇数搭配在一块…

沸点 | 嬴图联合飞腾发布全场景教育信创白皮书

围绕教育数字化转型和信创人才培养“两大领域”、聚焦办公、教学、科研、管理“四大场景”的《教育行业数字化自主创新 飞腾生态解决方案白皮书》于3月28日重磅发布&#xff01; 该白皮书历时1年&#xff0c;由25所代表院校、66位专家&#xff0c;119家生态伙伴共同编写&#x…

wireshark创建显示过滤器实验简述

伯克利包过滤是一种在计算机网络中进行数据包过滤的技术&#xff0c;通过在内核中插入过滤器程序来实现对网络流量的控制和分析。 在数据包细节面板中创建显示过滤器&#xff0c;显示过滤器可以在wireshark捕获数据之后使用。 实验拓扑图&#xff1a; 实验基础配置&#xff1…

如何用ESP32制作蓝牙小车?

1.ESP32的介绍 ESP32是一款低成本、低功耗的微控制器&#xff0c;集成了Wi-Fi和蓝牙功能。它是ESP8266的后继产品&#xff0c;具有更强大的处理能力和更丰富的功能。其核心配置包括Xtensa 32-bit LX6单/双核处理器&#xff0c;运算能力高达600 MIPS&#xff0c;以及448 KB ROM和…

Mini-Gemini: Mining the Potential of Multi-modality Vision Language Models

Mini-Gemini: Mining the Potential of Multi-modality Vision Language Models 相关链接&#xff1a;arxiv 关键字&#xff1a;Vision Language Models、Multi-modality、High-Resolution Visual Tokens、High-Quality Data、VLM-guided Generation 摘要 在这项工作中&#x…