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

news2024/7/30 16:25:12

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 plt

MaxExpNo=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+=1
        file='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_Target
        if (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. Normalization
                                        2. StandardScaler
                                        3. MinMaxScaler
                                        4. RobustScaler
                                        5. Normalizer
                                        6. WithoutNormalization   '''
input_data_columns=data_columns_PrimaryStatFeatures+data_columns_FFT_Features

if (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 decomposition
        pca = decomposition.PCA(n_components=nComponents)
        pca.fit(input_data)
        input_data_reduced = pca.transform(input_data)
        
        #训练集和测试集划分
        from sklearn.model_selection import train_test_split
        x_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_Classifier
    
        test_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_Classifier
        test_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_split
    x_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.coloradmin.cn/o/1554908.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

京东数据API接口采集/京东商品详情页SKU实时采集

京东电商实时数据采集是指通过自动化工具和技术,定时或不间断地收集京东电商平台的数据。这些数据可以包括商品信息、价格、销量、评价等。通过实时数据采集,可以帮助京东电商平台及其卖家了解市场情况、监控竞争对手、优化产品定价和营销策略等。 企业级…

C语言从入门到精通- CLion安装配置Gitee

CLion安装Gitee 需要先申请Gitee账号。 下载gitee插件 在CLion的plugins中查找gitee,安装后重启CLion。 CLion上关联gitee账号 安装git软件 下载git 访问网站: Git - Downloading Package (git-scm.com) 安装 创建本地用户名和邮箱 在弹出的命令行窗体中输入用户名…

vite+vue3使用模块化批量发布Mockjs接口

在Vue3项目中使用Mock.js可以模拟后端接口数据,方便前端开发和调试。下面是使用vitevue3使用模块化批量发布Mockjs接口的步骤: 1. 安装Mock.js 在Vue3项目的根目录下,使用以下命令安装Mock.js: npm install mockjs --save-dev …

constexpr与std::is_same_v碰撞会产生什么火花?

1. 只编译会用到的if分支 示例代码一中,checkType_v1和checkType_v2两个函数的区别就是if的条件里一个加了constexpr一个没加,加与不加从结果来看都一样,那在编译时和运行时各有什么区别呢? 示例代码一,test_01.cpp&…

canvas画图,拖动已经画好的矩形

提示&#xff1a;canvas画图写文字 文章目录 前言一、写文字总结 前言 一、写文字 test.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-widt…

【物联网】Qinghub opc-ua 连接协议

基础信息 组件名称 &#xff1a; opcua-connector 组件版本&#xff1a; 1.0.0 组件类型&#xff1a; 系统默认 状 态&#xff1a; 正式发布 组件描述&#xff1a;通过OPCUA连接网关&#xff0c;通过定时任务获取OPCUA相关的数据或通过执行指令控制设备相关参数。 配置文件&a…

基于spring boot的在线购票系统

在线购票系统的设计与实现 【摘要】这套在线购票系统是根据当前的现实需要&#xff0c;从现实工作中着手&#xff0c;剖析了以往的在线购票系统中出现的一些问题&#xff0c;并进一步提高了使用者的操作体验。利用电脑来对资料进行处理&#xff0c;以代替传统的手工方式进行资…

spring-boot之接口文档Swagger配置使用

Swagger 前后端分离 Vue SpringBoot 后端时代:前端只用管理静态页面; html> 后端。模板引擎JSP >后端是主力 前后端分离式时代: ●后端:后端控制层&#xff0c;服务层,数据访问层[后端团队] ●前端:前端控制层&#xff0c;视图层[前端团队] 。伪造后端数据&#xff0c;…

【保姆级】2024年最新Onlyfans使用订阅教程

【必看】开通步骤 订阅OnlyFans的步骤简要总结如下&#xff1a; 开通虚拟信用卡&#xff1a;虚拟信用卡开通使用教程。开卡后&#xff0c;进入首页&#xff0c;就能看到自己的虚拟信用卡信息把虚拟信用卡的信息填写到OnlyFans绑定信用卡界面就OK了 从上面的链接进入开卡费可…

Springboot工程依赖包与执行包分离打包与构建docker 镜像

文章目录 一、概述二、工程概况1. 代码原始结构2. 运行界面 三、常规打包1. 打包命令2. jar包结构 四、分离依赖包、执行包步骤1. 引入依赖包管理插件2. 打包验证 一、概述 某大数据项目&#xff0c;使用springboot常规打包方式&#xff0c;打出来的一体化执行包达几百兆&…

第三十二天-Django模板-DTL模板引擎

目录 1.介绍 2. 使用 1.配置jinja2 2.DTL模板变量使用 3.与jinja2区别 4.模板标签使用 1.循环 2.条件控制 3.注释 4.url解析 5.显示时间 5.模板的基础与包含 6.过滤器 内置过滤器 自定义过滤器 1.介绍 2. 使用 1.配置jinja2 2.DTL模板变量使用 与jinja2语法相似…

ssm 科研奖励申报管理系统开发mysql数据库web结构java编程计算机网页源码eclipse项目

一、源码特点 ssm 科研奖励申报管理系统是一套完善的信息系统&#xff0c;结合springMVC框架完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用…

激发数据潜力:企业数据中台的策略性构建与优化_光点科技

在信息时代&#xff0c;数据是企业价值链中不可或缺的一环。构建一个策略性的企业数据中台不仅能够整合分散的数据资源&#xff0c;还能提高决策效率和业务敏捷性。本文聚焦于如何策略性地构建和优化数据中台&#xff0c;以便企业能够最大化地利用数据资源&#xff0c;推动企业…

【测试篇】测试眼里的 BUG

文章目录 如何描述一个bug如何定义 bug 的级别BUG 的生命周期跟开发起争执怎么办&#xff08;高频面试题&#xff09; 如何描述一个bug 一个合格的bug描述应该包含以下几个部分&#xff1a; 发现问题的版本问题出现的环境错误重现的步骤预期行为的描述错误行为的描述其他&…

零基础入门转录组数据分析——绘制差异火山图

零基础入门转录组数据分析——绘制差异火山图 差异分析的火山图(Volcano Plot)在生物信息学数据分析中,特别是在基因表达差异分析中,是一个非常直观和有用的工具。 本教程将从导入的数据结构开始,一步步带大家在R中绘制好看的火山图,最后对火山图进行解读,确保读者理解…

google浏览器网站不安全与网站的连接不安全怎么办?

使用google谷歌浏览器访问某些网站打开时google谷歌浏览器提示网站不安全,与网站的连接不安全,您之所以会看到此警告,是因为该网站不支持https造成的怎么办? 目录 1、打开谷歌google浏览器点击右上角【┇】找到设置

深入并广泛了解Redis常见的缓存使用问题

Redis 作为一门主流技术&#xff0c;缓存应用场景非常多&#xff0c;很多大中小厂的项目中都会使用redis作为缓存层使用。 但是Redis作为缓存&#xff0c;也会面临各种使用问题&#xff0c;比如数据一致性&#xff0c;缓存穿透&#xff0c;缓存击穿&#xff0c;缓存雪崩&#…

产品推荐 | 基于华为海思ARM+Xilinx FPGA双核的8路SDI高清视频图像处理平台

一、板卡概述 PCIE703 是我司自主研制的一款基于 PCIE 总线架构的高性能综 合视频图像处理平台&#xff0c;该平台采用 Xilinx 的高性能 Kintex UltraScale 系列 FPGA 加上华为海思的高性能视频处理器来实现。 华为海思的 HI3531DV200 是一款集成了 ARM A53 四核处理 器性能强…

HarmonyOS实战开发-Stage模型下Ability的创建和使用

介绍 本篇Codelab基于Stage模型&#xff0c;对Ability的创建和使用进行讲解。首先在课程中我们将带领大家使用DevEco Studio创建一个Stage模型Ability&#xff0c;并使用UIAbilityContext启动另一个Ability&#xff0c;然后借助Want&#xff0c;在Ability之间传递参数&#xf…

科技下乡:数字乡村改变乡村生活方式

在科技飞速发展的时代&#xff0c;数字化、信息化浪潮正以前所未有的速度席卷全球。在这场科技革命中&#xff0c;乡村不再是滞后的代名词&#xff0c;而是成为了数字乡村建设的热土。科技下乡&#xff0c;让数字乡村成为了改变乡村生活方式的重要力量。 一、科技下乡&#xf…