辛辛那提IMS轴承故障诊断(三)

第一篇

https://www.toutiao.com/article/7259931008877789736/

第二篇

https://www.toutiao.com/article/7259967482692125184/

首先加载相应的模块

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns

导入计算好的特性

df1=pd.read_csv('Normal_Bearing.csv')
df2=pd.read_csv('outer_race_fault_test_2.csv')
df3=pd.read_csv('outer_race_fault_test_3.csv')
df4=pd.read_csv('inner_race_fault.csv')
df5=pd.read_csv('roller_element_fault.csv')

df = pd.concat([df1,df2,df3,df4,df5])
df

df['Fault'].unique()

array(['Normal', 'Outer Race', 'Inner Race', 'Roller Element'],
dtype=object)

划分训练集和测试集

X = df.iloc[:,:-1]
y = df.iloc[:,-1]

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.20)

采用随机森林进行识别,并作混淆矩阵

from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import confusion_matrix

rf_model = RandomForestClassifier().fit(X_train, y_train)
y_pred = rf_model.predict(X_test)
  
labels=['Normal', 'Outer Race', 'Inner Race', 'Roller Element']    
    
# creating a confusion matrix
cm = confusion_matrix(y_test, y_pred,labels=['Normal', 'Outer Race', 'Inner Race', 'Roller Element'], normalize ='true')
colormap = sns.color_palette("Reds")
sns.heatmap(cm, annot=True,cmap=colormap,xticklabels=labels, yticklabels=labels)

采用随机森林进行测试

Test_no=2
Bearing_no=1

test_2 = pd.read_csv("Time_feature_matrix_Bearing_{}_Test_{}.csv".format(Bearing_no,Test_no),index_col='Unnamed: 0')

y_pred_test_2 = rf_model.predict(test_2)
test_2['Fault']=y_pred_test_2
test_2

计算准确率

from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y_test, y_pred)
print(accuracy)

0.9868421052631579

test_2.index = pd.to_datetime(test_2.index)

Test_no=1
Bearing_no=3


test_2 = pd.read_csv("Time_feature_matrix_Bearing_{}_Test_{}.csv".format(Bearing_no,Test_no),index_col='Unnamed: 0')
y_pred_test_2 = rf_model.predict(test_2)
test_2['Fault']=y_pred_test_2
test_2.index = pd.to_datetime(test_2.index)


norm = test_2[test_2['Fault']=='Normal']
Out_rac = test_2[test_2['Fault']=='Outer Race']
iner_rac = test_2[test_2['Fault']=='Inner Race']
roll_elem = test_2[test_2['Fault']=='Roller Element']


col='Max'                      # Change this value to any column name 
plt.figure(figsize=(10, 5))
plt.scatter(norm.index,norm[col])
plt.scatter(Out_rac.index,Out_rac[col])
plt.scatter(iner_rac.index,iner_rac[col])
plt.scatter(roll_elem.index,roll_elem[col])

plt.legend(['Normal','Outer Race','Inner Race','Roller Element'])
plt.title(col)
plt.show()

采用xgboost方法进行对比,安装xgboost。

pip install xgboost

训练xgboost

from sklearn.preprocessing import LabelEncoder

# Load data into a Pandas DataFrame
df1=pd.read_csv('Normal_Bearing.csv')
df2=pd.read_csv('outer_race_fault_test_2.csv')
df3=pd.read_csv('outer_race_fault_test_3.csv')
df4=pd.read_csv('inner_race_fault.csv')
df5=pd.read_csv('roller_element_fault.csv')
data= pd.concat([df1,df2,df3,df4,df5])
# Encode the labels as numeric values
label_encoder = LabelEncoder()
data['fault'] = label_encoder.fit_transform(data['Fault'])

# Split data into features and labels
X = data.drop('fault', axis=1)
y = data['fault']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Plot the confusion matrix as a heatmap
from sklearn.metrics import confusion_matrix
import matplotlib.pyplot as plt
import seaborn as sns
sns.heatmap(cm, annot=True, cmap='Blues', fmt='g', xticklabels=label_encoder.classes_, yticklabels=label_encoder.classes_)
plt.xlabel('Predicted')
plt.ylabel('True')
plt.show()

计算准确率

 Split the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Train an XGBoost model
xgb_model = xgb.XGBClassifier()
xgb_model.fit(X_train, y_train)

# Make predictions on new data
y_pred = xgb_model.predict(X_test)

# Evaluate the model's accuracy
from sklearn.metrics import accuracy_score

accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy}")

Accuracy: 0.9539473684210527

Test_no=1
Bearing_no=3

test_2 = pd.read_csv("Time_feature_matrix_Bearing_{}_Test_{}.csv".format(Bearing_no,Test_no),index_col='Unnamed: 0')
y_pred_test_2 = xgb_model.predict(test_2)
test_2['fault'] = y_pred_test_2
test_2.index = pd.to_datetime(test_2.index)

norm = test_2[test_2['fault']==0]
Out_rac = test_2[test_2['fault']==1]
iner_rac = test_2[test_2['fault']==2]
roll_elem = test_2[test_2['fault']==3]

col='Max'                      # Change this value to any column name 
plt.figure(figsize=(10, 5))
plt.scatter(norm.index,norm[col])
plt.scatter(Out_rac.index,Out_rac[col])
plt.scatter(iner_rac.index,iner_rac[col])
plt.scatter(roll_elem.index,roll_elem[col])

plt.legend(['Normal','Outer Race','Inner Race','Roller Element'])
plt.title(col)
plt.show()

 

相关的文章参考

几种信号降噪算法(第一部分)

https://www.toutiao.com/article/7190201924820402721/

几种信号降噪算法(第二部分)

https://www.toutiao.com/article/7190270349236683264/

机械故障诊断及工业工程故障诊断若干例子(第一篇)

https://www.toutiao.com/article/7193957227231855163/

知乎咨询:哥廷根数学学派

算法代码地址,面包多主页:

https://mbd.pub/o/GeBENHAGEN/work

擅长现代信号处理(改进小波分析系列,改进变分模态分解,改进经验小波变换,改进辛几何模态分解等等),改进机器学习,改进深度学习,机械故障诊断,改进时间序列分析(金融信号,心电信号,振动信号等)

展开阅读全文

页面更新:2024-03-15

标签:辛辛那提   故障诊断   准确率   学派   矩阵   序列   分解   算法   轴承   信号   森林   机械

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top