为了实现基于RNN(循环神经网络)和LSTM(长短期记忆网络)的轴承故障诊断模型,处理DataCastle轴承故障预测数据集。过程从数据加载、预处理、模型构建、训练、验证以及测试。
1. 环境设置
首先,确保安装了所有必要的依赖项。可以使用requirements.txt
文件来管理这些依赖项:
pip install -r requirements.txt
假设你的requirements.txt
文件中至少包含以下内容:
pandas
numpy
scikit-learn
tensorflow
matplotlib
2. 数据加载与预处理
加载数据
import pandas as pd
import numpy as npdef load_data(train_path, test_path):train_df = pd.read_csv(train_path)test_df = pd.read_csv(test_path)X_train = train_df.iloc[:, 1:-1].values # 去除id和label列y_train = train_df['label'].valuesX_test = test_df.iloc[:, 1:].values # 测试集无labelreturn X_train, y_train, X_testtrain_path = 'path/to/train.csv'
test_path = 'path/to/test.csv'
X_train, y_train, X_test = load_data(train_path, test_path)
数据预处理
考虑到LSTM需要输入3D张量 (samples, time steps, features)
,我们需要调整数据形状,并进行归一化处理。
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split# 归一化处理
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)# 调整形状以适应LSTM输入 (samples, time steps, features)
X_train_reshaped = X_train_scaled.reshape((X_train_scaled.shape[0], X_train_scaled.shape[1], 1))
X_test_reshaped = X_test_scaled.reshape((X_test_scaled.shape[0], X_test_scaled.shape[1], 1))# 划分训练集和验证集
X_train_final, X_val, y_train_final, y_val = train_test_split(X_train_reshaped, y_train, test_size=0.2, random_state=42)
3. 模型构建
构建LSTM模型
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense, Dropoutdef build_lstm_model(input_shape, num_classes):model = Sequential()model.add(LSTM(64, input_shape=input_shape, return_sequences=True))model.add(Dropout(0.5))model.add(LSTM(64))model.add(Dropout(0.5))model.add(Dense(64, activation='relu'))model.add(Dropout(0.5))model.add(Dense(num_classes, activation='softmax'))model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])return modelinput_shape = (X_train_reshaped.shape[1], X_train_reshaped.shape[2])
num_classes = len(np.unique(y_train))
model = build_lstm_model(input_shape, num_classes)
4. 训练模型
history = model.fit(X_train_final, y_train_final, epochs=50, batch_size=32, validation_data=(X_val, y_val))
5. 验证模型
在验证集上评估模型性能:
loss, accuracy = model.evaluate(X_val, y_val)
print(f'Validation Loss: {loss}, Validation Accuracy: {accuracy}')
6. 对测试集进行预测
predictions = model.predict(X_test_reshaped)
predicted_classes = np.argmax(predictions, axis=1)# 保存结果到CSV文件
test_df = pd.read_csv(test_path)
result_df = pd.DataFrame({'id': test_df['id'], 'label': predicted_classes})
result_df.to_csv('result.csv', index=False)
7. 可选:绘制混淆矩阵
为了更直观地展示模型的分类效果,可以绘制混淆矩阵:
import matplotlib.pyplot as plt
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplaycm = confusion_matrix(y_val, np.argmax(model.predict(X_val), axis=1))
disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=np.unique(y_train))
disp.plot(cmap=plt.cm.Blues)
plt.savefig('confusion_matrix.png')
通过上述步骤,你可以成功地使用LSTM模型对轴承故障进行诊断。