数据分析实验

本文介绍了如何使用傅里叶变换对工业设备中的转速信号进行特征提取,以区分正常轴承和受损轴承,然后运用多种机器学习模型如KNN、贝叶斯、决策树和SVM进行分类识别,以实现轴承故障的自动检测。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工业数据分析应用

1.实验内容:

标记数据记录了正常轴承和受损轴承的转速信号波动情况,请用傅里叶变换构建分类特征,实现对轴承受损的分类识别

首先介绍一下要用到的原理👇

  • 傅里叶变换的原理

      傅里叶变换是一种数学工具,用于将一个时间域信号变换到频率域。它可以将满足一定条件的某个函数表示成三角函数(正弦和/或余弦函数)或者它们的积分的线性组合。傅里叶变换的基本原理是将一个复 杂的周期信号分解为若干个简单的正弦或余弦信号的叠加,这些简单的正弦或余弦信号的频率就是原信号的各个频率分量。

  • 傅里叶变换应用

     信号处理:傅里叶变换可以将-个时间域信号变换到频率域,使得我们可以更容易地观察和理解信号的特性。例如,有些信号在时间域上很难看出特征,但是当转换到频率域一些特 征就会变得明显。

2.思路:

1.读取数据:从文件中读取了异常信号和正常信号的数据

2.使用傅里叶变换提取特征:对转速信号进行傅里叶变换,并取其幅度作为特征。

3.构建特征集和标签集:将提取的特征与标签整合在一起

4.划分训练集和测试集:将特征集和标签集划分为训练集和测试集

5.训练决策树模型:使用训练集训练出决策树分类模型

6.预测并计算准确率:使用测试集对模型进行评估,计算模型准确率

3.代码实现:

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

X = []
y = []
#异常信号
plt.figure(figsize=(15,8))
for i in range(10):
    df1 = pd.read_csv('FAULT_'+str(i)+'.csv')
    plt.plot(df1['转速']+np.random.randint(2,10))
    X.append(df1['转速'].values+np.random.randint(2,10))
    y.append(1)
plt.show()

#正常信号
plt.figure(figsize=(15,8))
for i in range(10):
    df2 = pd.read_csv('NOFAULT_'+str(i)+'.csv') 
    plt.plot(df2['转速']+np.random.randint(2,10))  
    X.append(df2['转速'].values+np.random.randint(2,10))
    y.append(0)
plt.show()

X = np.array(X)
y = np.array(y)
X.shape,y.shape

from scipy import fftpack
F = fftpack.fft(X)
F.shape

XF = (np.abs(F)[:,1:360])
plt.plot((XF[y==0,1:360]).T)
plt.ylim([0,140])
plt.show()
plt.plot((XF[y==1,1:360]).T)
plt.ylim([0,140])
plt.show()

from sklearn.neighbors import KNeighborsClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.svm import LinearSVC
from sklearn.svm import SVC
from warnings import simplefilter

#各种模型
knn_clf = KNeighborsClassifier(n_neighbors=3)#KNN
gnb_clf = GaussianNB()#贝叶斯
dt_clf = DecisionTreeClassifier(min_samples_leaf=5)#决策树
rf_clf = RandomForestClassifier(n_estimators=5,random_state=666,oob_score=True)#随机森林
lsvc_clf =  LinearSVC(C=1) #线性SVM
rbf_svc_clf = SVC(C=1,kernel='rbf',gamma=1)#高斯核函数SVM

clfs = {
    'KNN':knn_clf,
    '贝叶斯':gnb_clf,
    '决策树':dt_clf,
    '随机森林':rf_clf,
    'LinearSVC':lsvc_clf,
    '高斯核SVC':rbf_svc_clf,
}

for model in clfs:
    clfs[model].fit(XF,y)
    print(model,clfs[model].score(XF,y))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值