Deep learning 为什么我的LSTM自动编码器型号不能';无法检测异常值?

Deep learning 为什么我的LSTM自动编码器型号不能';无法检测异常值?,deep-learning,lstm,autoencoder,anomaly-detection,Deep Learning,Lstm,Autoencoder,Anomaly Detection,我正在尝试建立一个LSTM自动内测器,用于异常检测 但该模型似乎不适用于我的数据 这是我用来训练的正常数据 这是我用来验证的异常数据 如果这一模式奏效,其损失将高达20万至50万英镑 不幸的是,以下是我将有效数据放入模型的结果: 在异常区间,损失仍然较低 这是我的培训模式代码 如果你能给我任何建议,我将不胜感激 scaler = MinMaxScaler(feature_range=(0, 1)) scaler.fit(healthy_data) data_scaled = scaler.

我正在尝试建立一个LSTM自动内测器,用于异常检测

但该模型似乎不适用于我的数据

这是我用来训练的正常数据

这是我用来验证的异常数据

如果这一模式奏效,其损失将高达20万至50万英镑

不幸的是,以下是我将有效数据放入模型的结果:

在异常区间,损失仍然较低

这是我的培训模式代码

如果你能给我任何建议,我将不胜感激

scaler = MinMaxScaler(feature_range=(0, 1))
scaler.fit(healthy_data)
data_scaled = scaler.transform(healthy_data)
data_broken_scaled = scaler.transform(broken_data)

timesteps=32
data = data_scaled 
dim = 1
data.shape = (-1,timesteps,dim)   

lr = 0.0001
Nadam = optimizers.Nadam(lr=lr)

model = Sequential()
model.add(LSTM(50,input_shape=(timesteps,dim),return_sequences=True))
model.add(Dense(dim))

model.compile(loss='mae', optimizer=Nadam ,metrics=['mse'])

EStop = EarlyStopping(monitor='val_loss', min_delta=0.001,patience=150, verbose=2, mode='auto',restore_best_weights=True)

history = model.fit(data,data,validation_data=(data,data),epochs=3000,batch_size=72,verbose=2,shuffle=False,callbacks=[EStop]).history

pred_broken = model.predict(data_broken_scaled)
loss_broken = np.mean(np.abs(pred_broken-data_broken_scaled),axis=1)
fig, ax = plt.subplots(figsize=(20, 6), dpi=80, facecolor='w', edgecolor='k')
ax.plot(range(0,len(loss_broken)), loss_broken, '-', color='red', animated = True, linewidth=1)

我认为,在频率视图中使用傅里叶变换来检测异常可能更好。 我的意思是,列车和测试数据将通过傅里叶变换转换到频域。我还建议使用时间窗口。 如果有足够好的列车数据,大多数人工智能将表现得更好。您的异常点应该标记为1(通过数据的预处理步骤),并且在您的时间步长(时间窗口)上应该具有较高的频率

简言之,我认为您的列车数据可能不足以代表目前的异常情况