
针对光模块运行数据(温度、功率、误码率)预测故障,核心是通过周期性滑动窗口+多变量统计特征构建LSTM模型,结合超参数调优与鲁棒性处理(异常值/缺失值),用MAE、RMSE(连续值)+准确率、召回率(分类)评估,实现故障提前预警。
老师口吻讲解关键概念:
| 特征工程方法 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 滑动窗口(序列特征) | 按固定步长(如24小时)截取历史时间序列 | 保留原始时间顺序,捕捉动态变化 | LSTM等序列模型 | 窗口大小影响信息量与计算复杂度 |
| 统计特征(多变量交互) | 提取窗口内多变量统计量(如温度-功率协方差、误码率趋势) | 分析多变量联合变化 | 传统模型或特征融合 | 可能丢失时间动态信息 |
伪代码包含数据预处理、周期性滑动窗口生成、LSTM模型构建、超参数调优、异常值/缺失值处理、训练与评估:
import numpy as np
from sklearn.preprocessing import MinMaxScaler
from sklearn.ensemble import IsolationForest
from sklearn.metrics import mean_absolute_error, mean_squared_error, accuracy_score, recall_score
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense, Dropout
from tensorflow.keras.callbacks import EarlyStopping
# 数据预处理:归一化
def preprocess_data(data):
scaler = MinMaxScaler()
scaled_data = scaler.fit_transform(data[['temperature', 'power', 'ber']])
return scaled_data
# 异常值检测
def detect_outliers(data, contamination=0.01):
model = IsolationForest(contamination=contamination)
outliers = model.fit_predict(data)
return data[outliers == -1]
# 生成周期性滑动窗口(日窗口,24小时)
def create_periodic_sequences(data, window_size=24, period='day'):
X, y = [], []
for i in range(len(data) - window_size):
X.append(data[i:i+window_size])
y.append(data[i+window_size, 0]) # 温度异常作为故障标签
return np.array(X), np.array(y)
# 超参数调优(网格搜索示例)
def grid_search_params(X_train, y_train, X_val, y_val):
from sklearn.model_selection import GridSearchCV
from tensorflow.keras.wrappers.scikit_learn import KerasClassifier
def build_model(dropout=0.2, lr=1e-3):
model = Sequential()
model.add(LSTM(units=50, return_sequences=True, input_shape=(window_size, 3)))
model.add(LSTM(units=50))
model.add(Dropout(dropout))
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
return model
clf = KerasClassifier(build_fn=build_model, epochs=10, batch_size=32, verbose=0)
param_grid = {
'dropout': [0.1, 0.2, 0.3],
'lr': [1e-3, 1e-4]
}
grid = GridSearchCV(clf, param_grid, cv=3, scoring='accuracy')
grid.fit(X_train, y_train)
return grid.best_params_
# 训练LSTM模型
def train_lstm(X_train, y_train, X_val, y_val, best_params):
model = Sequential()
model.add(LSTM(units=50, return_sequences=True, input_shape=(window_size, 3)))
model.add(LSTM(units=50))
model.add(Dropout(best_params['dropout']))
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
early_stop = EarlyStopping(patience=3, restore_best_weights=True)
model.fit(X_train, y_train, epochs=20, batch_size=32,
validation_data=(X_val, y_val), callbacks=[early_stop])
return model
# 评估
def evaluate(model, X_test, y_test):
y_pred = model.predict(X_test).flatten()
y_pred_binary = (y_pred > 0.5).astype(int)
mae = mean_absolute_error(y_test, y_pred)
rmse = np.sqrt(mean_squared_error(y_test, y_pred))
acc = accuracy_score(y_test, y_pred_binary)
recall = recall_score(y_test, y_pred_binary)
print(f"MAE: {mae:.4f}, RMSE: {rmse:.4f}, Accuracy: {acc:.4f}, Recall: {recall:.4f}")
# 主流程
if __name__ == "__main__":
data = pd.read_csv('light_module_data.csv')
data.interpolate(method='linear', inplace=True) # 缺失值处理
outliers = detect_outliers(data) # 异常值检测
data = data.drop(outliers.index)
scaled_data = preprocess_data(data)
X, y = create_periodic_sequences(scaled_data, window_size=24)
train_size = int(len(X) * 0.7)
val_size = int(len(X) * 0.15)
X_train, y_train = X[:train_size], y[:train_size]
X_val, y_val = X[train_size:train_size+val_size], y[train_size:train_size+val_size]
X_test, y_test = X[train_size+val_size:], y[train_size+val_size:]
best_params = grid_search_params(X_train, y_train, X_val, y_val)
model = train_lstm(X_train, y_train, X_val, y_val, best_params)
evaluate(model, X_test, y_test)
(约90秒)
“面试官您好,针对光模块运行数据预测故障,核心是通过特征工程结合LSTM模型,同时考虑多变量交互、时间尺度与鲁棒性。首先,特征工程方面,采用周期性滑动窗口(如日窗口)截取历史序列,并提取多变量统计特征(如温度-功率协方差、误码率趋势),捕捉温度与功率的联合变化对故障的影响。然后,LSTM模型利用门控机制处理长期依赖,通过超参数调优(如网格搜索调整dropout率、学习率)提升泛化能力。训练流程中,先处理异常值(用Isolation Forest检测离群点),再处理缺失值(前向填充+插值)。最后用MAE、RMSE评估连续值预测,同时结合准确率、召回率评估分类性能,全面衡量模型可靠性。”