东南大学严如强团队机械故障数据集实测:从下载到预处理全流程指南
东南大学机械故障数据集实战指南从数据获取到模型训练全解析在工业设备健康管理领域高质量的数据集是算法研发和工程验证的基石。东南大学严如强教授团队开源的机械故障数据集Mechanical-datasets因其丰富的故障类型标注和标准化的采集条件已成为国内外故障诊断研究的热门选择。本文将手把手带您完成从数据集获取到预处理再到模型训练的全流程操作特别针对初次接触该数据集的研究人员和工程师提供实用指导。1. 数据集获取与环境准备1.1 官方渠道获取数据集该数据集托管于GitHub平台由团队博士生邵思羽维护。获取数据最可靠的方式是通过官方仓库git clone https://github.com/cathysiyu/Mechanical-datasets.git数据集包含以下核心文件bearing_data/轴承振动信号包含内圈、外圈、滚动体故障gear_data/齿轮箱多工况振动数据documentation/采集参数说明与标注规范example_scripts/MATLAB和Python的数据加载示例常见问题解决方案若克隆速度慢可尝试在URL后添加.git或使用SSH协议大文件下载失败时建议开启git config --global http.postBuffer 5242880001.2 本地环境配置推荐使用Python 3.8环境主要依赖库包括库名称版本要求功能说明numpy≥1.19数值计算基础库pandas≥1.2数据框操作scipy≥1.6信号处理工具scikit-learn≥0.24机器学习工具链PyTorch≥1.8深度学习框架可选安装命令示例pip install numpy1.21.3 pandas1.3.4 scipy1.7.1 scikit-learn0.24.22. 数据结构解析与初步探索2.1 数据集目录架构Mechanical-datasets/ ├── bearing_data/ │ ├── normal/ # 正常状态样本 │ ├── inner_race_fault/ # 内圈故障 │ ├── outer_race_fault/ # 外圈故障 │ └── ball_fault/ # 滚动体故障 ├── gear_data/ │ ├── healthy/ # 健康状态 │ ├── missing_tooth/ # 缺齿故障 │ ├── root_crack/ # 齿根裂纹 │ └── surface_pitting/ # 表面点蚀 └── documentation/ ├── acquisition_params.csv # 采集参数 └── fault_types.xlsx # 故障类型编码2.2 数据加载与可视化使用Python加载轴承振动数据的示例代码import numpy as np import matplotlib.pyplot as plt # 加载单通道振动信号 bearing_normal np.load(bearing_data/normal/channel1.npy) bearing_fault np.load(bearing_data/inner_race_fault/channel1.npy) # 绘制时域波形对比 plt.figure(figsize(12,4)) plt.subplot(121) plt.plot(bearing_normal[:1000]) plt.title(Normal Bearing) plt.subplot(122) plt.plot(bearing_fault[:1000], r) plt.title(Faulty Bearing) plt.show()注意实际采样率为12.8kHz建议分析时标注正确的时间轴刻度3. 专业级数据预处理流程3.1 时频域特征工程针对振动信号的典型特征提取方法时域特征14个经典指标均值、方差、峰值、峰峰值峭度(Kurtosis)、偏度(Skewness)波形指标、脉冲指标、裕度指标频域特征FFT频谱幅值0-6.4kHz包络谱分析针对轴承故障小波包能量熵适合齿轮故障特征提取代码片段from scipy.stats import kurtosis, skew from scipy.fft import fft def extract_features(signal): features { rms: np.sqrt(np.mean(signal**2)), kurtosis: kurtosis(signal), skewness: skew(signal), peak_to_peak: np.ptp(signal), spectral_centroid: np.sum(fft(signal)*np.arange(len(signal)))/np.sum(fft(signal)) } return features3.2 数据增强策略针对小样本场景的有效增强方法方法参数设置适用场景时域抖动幅度±5%所有振动信号频带随机滤波截止频率±200Hz轴承故障时间扭曲拉伸/压缩率±10%低速工况噪声注入SNR≥30dB抗干扰训练4. 故障诊断模型实战4.1 传统机器学习方案构建随机森林分类器的完整流程from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split # 假设X是特征矩阵y是标签 X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.3) # 模型训练 model RandomForestClassifier(n_estimators100, max_depth10) model.fit(X_train, y_train) # 评估 print(fTest accuracy: {model.score(X_test, y_test):.2%})4.2 深度学习方法示例使用1D CNN处理原始振动信号import torch import torch.nn as nn class FaultDiagnosisCNN(nn.Module): def __init__(self, num_classes): super().__init__() self.conv_layers nn.Sequential( nn.Conv1d(1, 32, kernel_size64, stride8), nn.ReLU(), nn.MaxPool1d(4), nn.Conv1d(32, 64, kernel_size3), nn.ReLU(), nn.MaxPool1d(2) ) self.classifier nn.Linear(64*15, num_classes) # 需根据实际输入调整 def forward(self, x): x self.conv_layers(x) x x.view(x.size(0), -1) return self.classifier(x)提示输入数据需预处理为(batch_size, 1, signal_length)格式5. 工程实践中的关键技巧在实际项目中使用该数据集时有几个经验值得分享采样率统一虽然数据集标注了12.8kHz采样率但不同批次数据建议重新验证故障严重度分级原始数据包含多种故障尺寸可进一步细分为轻微/中等/严重三级跨设备泛化测试建议将数据按采集设备划分验证集测试模型泛化能力齿轮故障诊断的特殊处理# 齿轮信号特有的阶次分析 def order_analysis(signal, rpm, sampling_rate): rotation_freq rpm / 60 order np.fft.fftfreq(len(signal), d1/sampling_rate) / rotation_freq spectrum np.abs(np.fft.fft(signal)) return order, spectrum遇到信号截断问题时可以尝试重叠分帧处理帧长2048点约0.16秒帧移512点75%重叠率加窗汉宁窗减少频谱泄漏