如何使用 1.CWRU西储大学轴承数据集 2.XJTU西安交通大学数据集 3.江南大学数据集 4.东南大学数据集 进行故障诊断、预测和分类,并进行对比实验。

在这里插入图片描述
滚动轴承数据集 故障诊断,预测、分类 最全套数据集 可做对比实验
1.CWRU西储大学轴承数据集
2.XJTU西安交通大学数据集
3.江南大学数据集
4.东南大学数据集在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
好的,下面我将详细介绍如何使用这四套滚动轴承数据集进行故障诊断、预测和分类,并进行对比实验。我们将使用Python和一些常见的机器学习库(如pandas, numpy, scikit-learn, tensorflow等)来处理这些数据集。

数据集概述

  1. CWRU 西储大学轴承数据集

    • 包含多种故障类型的数据。
    • 提供了不同转速下的轴承振动信号。
  2. XJTU 西安交通大学数据集

    • 包含不同类型和严重程度的故障。
    • 提供了多传感器数据。
  3. 江南大学数据集

    • 包含不同工况下的轴承数据。
    • 提供了丰富的故障样本。
  4. 东南大学数据集

    • 包含多种类型的故障和不同的负载条件。
    • 提供了详细的实验条件说明。

步骤概述

  1. 数据集准备
  2. 特征提取
  3. 数据预处理
  4. 模型训练
  5. 模型评估
  6. 结果对比
详细步骤
1. 数据集准备

确保你的数据集已经按照上述格式准备好,并且包含相应的文件目录结构。

bearing_datasets/
├── CWRU/
│   ├── normal.mat
│   ├── inner_race_fault.mat
│   └── ...
├── XJTU/
│   ├── normal.mat
│   ├── ball_fault.mat
│   └── ...
├── Jiangnan/
│   ├── normal.csv
│   ├── outer_race_fault.csv
│   └── ...
└── Southeast/
    ├── normal.csv
    ├── inner_race_fault.csv
    └── ...
2. 特征提取

从原始振动信号中提取有用的特征。常用的特征包括时域特征、频域特征等。

import numpy as np
import pandas as pd
from scipy.signal import welch
from sklearn.preprocessing import StandardScaler

# Example function to extract features
def extract_features(signal, fs):
    # Time domain features
    mean_abs = np.mean(np.abs(signal))
    std_dev = np.std(signal)
    
    # Frequency domain features using Welch's method
    freqs, Pxx = welch(signal, fs=fs, nperseg=256)
    median_freq = np.median(freqs[Pxx > np.percentile(Pxx, 90)])
    
    return [mean_abs, std_dev, median_freq]

# Example usage
def load_and_extract_features(dataset_path, fs=12000):
    features = []
    labels = []
    
    for filename in os.listdir(dataset_path):
        if filename.endswith('.mat'):
            data = sio.loadmat(os.path.join(dataset_path, filename))
            signal = data[list(data.keys())[-1]].flatten()
            label = filename.split('_')[0]  # Assuming label is part of the filename
            features.append(extract_features(signal, fs))
            labels.append(label)
        elif filename.endswith('.csv'):
            data = pd.read_csv(os.path.join(dataset_path, filename))
            signal = data.iloc[:, 0].values
            label = filename.split('_')[0]  # Assuming label is part of the filename
            features.append(extract_features(signal, fs))
            labels.append(label)
    
    return np.array(features), np.array(labels)

# Load and extract features from each dataset
cwru_features, cwru_labels = load_and_extract_features('bearing_datasets/CWRU')
xjtu_features, xjtu_labels = load_and_extract_features('bearing_datasets/XJTU')
jiangnan_features, jiangnan_labels = load_and_extract_features('bearing_datasets/Jiangnan')
southeast_features, southeast_labels = load_and_extract_features('bearing_datasets/Southeast')
3. 数据预处理

标准化特征数据并划分训练集和测试集。

from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder

# Combine all datasets
all_features = np.vstack((cwru_features, xjtu_features, jiangnan_features, southeast_features))
all_labels = np.concatenate((cwru_labels, xjtu_labels, jiangnan_labels, southeast_labels))

# Encode labels
label_encoder = LabelEncoder()
all_labels_encoded = label_encoder.fit_transform(all_labels)

# Split into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(all_features, all_labels_encoded, test_size=0.2, random_state=42)

# Standardize features
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
4. 模型训练

使用随机森林分类器进行训练。

from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report, accuracy_score

# Initialize and train the model
rf_classifier = RandomForestClassifier(n_estimators=100, random_state=42)
rf_classifier.fit(X_train_scaled, y_train)

# Predict on test set
y_pred = rf_classifier.predict(X_test_scaled)

# Evaluate the model
print("Random Forest Classifier:")
print(classification_report(y_test, y_pred, target_names=label_encoder.classes_))
print(f"Accuracy: {accuracy_score(y_test, y_pred):.4f}")
5. 模型评估

评估每个数据集上的模型性能。

def evaluate_dataset(model, X_test, y_test, label_encoder):
    y_pred = model.predict(X_test)
    print("Classification Report:")
    print(classification_report(y_test, y_pred, target_names=label_encoder.classes_))
    print(f"Accuracy: {accuracy_score(y_test, y_pred):.4f}")

# Evaluate on each dataset separately
print("\nEvaluating CWRU Dataset:")
evaluate_dataset(rf_classifier, cwru_features_scaled, cwru_labels_encoded, label_encoder)

print("\nEvaluating XJTU Dataset:")
evaluate_dataset(rf_classifier, xjtu_features_scaled, xjtu_labels_encoded, label_encoder)

print("\nEvaluating Jiangnan Dataset:")
evaluate_dataset(rf_classifier, jiangnan_features_scaled, jiangnan_labels_encoded, label_encoder)

print("\nEvaluating Southeast Dataset:")
evaluate_dataset(rf_classifier, southeast_features_scaled, southeast_labels_encoded, label_encoder)
6. 结果对比

通过比较每个数据集上的准确率和其他指标来进行结果对比。

import matplotlib.pyplot as plt

# Collect accuracies for comparison
accuracies = {
    "CWRU": accuracy_score(cwru_labels_encoded, rf_classifier.predict(cwru_features_scaled)),
    "XJTU": accuracy_score(xjtu_labels_encoded, rf_classifier.predict(xjtu_features_scaled)),
    "Jiangnan": accuracy_score(jiangnan_labels_encoded, rf_classifier.predict(jiangnan_features_scaled)),
    "Southeast": accuracy_score(southeast_labels_encoded, rf_classifier.predict(southeast_features_scaled))
}

# Plot accuracies
plt.bar(accuracies.keys(), accuracies.values())
plt.title('Model Accuracies on Different Datasets')
plt.xlabel('Dataset')
plt.ylabel('Accuracy')
plt.ylim([0, 1])
plt.show()

完整代码

以下是完整的代码示例,包含了从数据加载、特征提取、数据预处理、模型训练到结果对比的所有步骤。

运行脚本

在终端中运行以下命令来执行整个流程:

python main.py

总结

以上文档包含了从数据集准备、特征提取、数据预处理、模型训练与评估、可视化结果到结果对比的所有步骤。希望这些详细的信息和代码能够帮助你顺利实施和优化你的滚动轴承故障诊断系统

### 利用东南大学轴承数据集进行机械设备故障诊断 #### 数据准备 东南大学轴承数据集中包含了两个主要部分,其中第一个文件夹专门用于存轴承数据。这些数据是在传动系动力学模拟器(DDS)上获得的,且每个故障类型的特定工况被单独保存在一个CSV文件中[^4]。 为了有效地处理分析这类时间序列数据,可以采用格拉姆角场(GAF, Gramian Angular Field)方法将其转化为图像形式以便于后续应用卷积神经网络(CNN)模型来进行分类识别工作[^5]。 ```python import pandas as pd from pyts.image import GASF, GADF import numpy as np import matplotlib.pyplot as plt # 加载单个CSV文件作为示例 data_path = 'path_to_bearing_data_folder/fault_type.csv' df = pd.read_csv(data_path) # 假设我们只关注某一列的时间序列数据 time_series = df['column_name'].values.reshape(-1, 1) gasf_transformer = GASF(image_size=32) image_gasf = gasf_transformer.fit_transform(time_series.T)[0] plt.imshow(image_gasf, cmap='rainbow', origin='lower') plt.title('Gramian Angular Summation Field Image of Bearing Data') plt.show() ``` 上述代码片段展示了如何读取CSV文件中的时间序列数据使用`pyts`库来创建对应的GASF图像表示法。这一步骤对于将原始传感器读数转换成适合机器学习算法输入的形式至关重要。 #### 构建与训练CNN模型 一旦拥有了由时间序列转化而来的图像集合之后,则可进一步构建基于深度学习框架TensorFlow/Keras上的二维卷积层结构化模型以实现自动化的特征提取过程: ```python from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout model = Sequential([ Conv2D(filters=32, kernel_size=(3, 3), activation='relu', input_shape=(32, 32, 1)), MaxPooling2D(pool_size=(2, 2)), Conv2D(filters=64, kernel_size=(3, 3), activation='relu'), MaxPooling2D(pool_size=(2, 2)), Flatten(), Dense(units=128, activation='relu'), Dropout(rate=0.5), Dense(units=num_classes, activation='softmax') # num_classes取决于具体有多少种不同的故障类别 ]) model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) history = model.fit(x_train_images, y_train_labels, epochs=epochs_number, batch_size=batch_size_value, validation_split=validation_ratio) ``` 此段脚本定义了一个简单的两层卷积神经网路架构,通过Adam优化器最小化交叉熵损失函数完成监督式学习任务;同时设置了验证分割比例确保模型不会过拟合训练样本之外的新实例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值