用简单的线性回归模型拟合轴承寿命

研究方向是数据驱动的产品剩余寿命预测,看了不少论文,搞了几个月也没做出成果。打算从最简单的线性回归拟合开始。话不多说,直接开始。

1.数据

用的西交轴承库数据35Hz12kN工况的bearing1-1,网上能找到数据库。采样频率是25.6KHZ,一分钟内只采集1.28秒也就是一分钟内采集32768个数据点。其中记录了轴承从开始工作到完全失效的全周期振动信号。试验中使用相对法确定轴承的失效阈值,即当轴承水平或竖直方向振动信号的最大幅值超过 10×Ah时认为轴承已经完全失效,其中 Ah为轴承在正常运行阶段的最大幅值。有关数据库的说明可以参考说明书或者’XJTU-SY 滚动轴承加速寿命试验数据集解读‘这篇文献。

 

 

bearing1-1轴承水平方向振动信号时域图如下

 

 

 2.特征

这个项目只是为了简单进行预测,特征只是粗糙地提取水平振动信号的RMS,RMS能稳定地反应轴承退化趋势,在故障诊断中是一种非常常见的特征,将RMS归一化到0-1区间,如图

 

 3.python代码,就只用了简单的numpy库,参考了网上的一些资料,自己调试。

from numpy import *
import matplotlib.pyplot as plt
import scipy.io as scio
import numpy as np
#读取数据
#导入训练集数据,mat格式
dataFile ='你的地址/normal_rms_1-1.mat'
data = scio.loadmat(dataFile) # 读入数据
feature=data['D'] # 读取mat里面的RMS数据
print(feature)
print(len(feature))
print(feature.shape)
labels=[]
#设置训练集标签
for i in range(0,len(feature)):
if i<12740:
labels.append(0)
else:
labels.append(0+(i-12740)/(len(feature)-12700))
print(labels)
labelscopy=labels.copy()#复制labels,
labelscopy=np.array(labelscopy)
print(labelscopy.shape)
fig1=plt.figure(1)
plt.plot(labels)
plt.xlabel('sample_number')
plt.ylabel('HI')
plt.show()
fig1.savefig('naive_LR_HI_label')
#标准线性回归函数
def standRegres(xArr, yArr):
xMat = mat(xArr)
yMat = mat(yArr).T
xTx = xMat.T * xMat
#判断行列式为零,则无法求逆
if linalg.det(xTx) == 0:
print('the matrix is singular, cannot do inverse')
return
ws = (xTx).I * (xMat.T*yMat)
return ws
#拟合数据
ws = standRegres(xArr=feature, yArr=labels)
xMat = mat(feature)
yMat = mat(labels)
yHat = xMat*ws
# fig = plt.figure()
# ax = fig.add_subplot(111)
# ax.scatter(xMat[:,0].flatten().A[0], yMat.T[:,0].flatten().A[0])
#对数组数据进行排序,并取最小的值。因为不排序的数据有波动
xCopy = xMat.copy()
xCopy.sort(0)
yHat = xCopy*ws
labelscopy.sort(0)
# ax.plot(xMat[:,0], yHat)
fig2=plt.figure(2)
plt.plot(list(range(len(xMat))), xMat, color='b')#画图
plt.plot(list(range(len(yHat))), yHat, color='r')
plt.xlabel('samples_number')
plt.ylabel('amplitude')
plt.show()
fig2.savefig('naive_LR_feature_pre-life')
fig3=plt.figure(3)
plt.plot(list(range(len(labelscopy))),labelscopy, color='r')
plt.plot(list(range(len(yHat))), yHat, color='g')
plt.title('predict-----green,real-----red', fontsize=10)
plt.xlabel('sample_number')
plt.ylabel('life')
plt.show()
fig3.savefig('naive_LR_pre-life_real-life')
#用相关系数评估预测效果
yHat = xMat*ws
print(corrcoef(yHat.T, yMat))

 

 

 其实轴承寿命标签还有其他设法,一般都是这种梯形式,感兴趣的兄弟可以查阅相关论文。

我们认为life为0表示轴承正常工作,并未出现退化。life为1表示轴承完全失效,不能工作。从某一失效阈值开始轴承开始退化,根据拟合的效果发现,绿色的线在18000点左右其life值达到了1.0,而实际轴承在采样点20000才失效,life值达到1.用预测值和真实值的相关系数矩阵表示预测精度,效果如下图。可以看到模型在训练集表现良好,下一步考虑用同等工况的Bearing1-2作为测试集预测轴承寿命。

 

 至此完结撒花,naive的LR拟合轴承寿命的工作就告一段落,希望对大家有所帮助。

纪念自己第一次写博客吧,以后会坚持记录自己学习过程中踩过的坑,有好的资源也会分享。奥里给!!!

 

posted @ 2020-12-24 20:02  正在学习的小陈  阅读(1806)  评论(1编辑  收藏  举报