基于神经网络的时间序列异常检测的python代码
时间: 2023-12-29 08:03:23 浏览: 89
以下是一个基于 LSTM 神经网络的时间序列异常检测的 Python 代码示例:
```python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from keras.models import Sequential
from keras.layers import LSTM, Dense, Dropout
# 加载数据
data = pd.read_csv('data.csv')
# 将数据分为训练集和测试集
train_size = int(len(data) * 0.8)
train_data = data.iloc[:train_size, :]
test_data = data.iloc[train_size:, :]
# 将数据转换为适合 LSTM 模型的格式
def create_dataset(dataset, look_back=1):
X, Y = [], []
for i in range(len(dataset) - look_back):
X.append(dataset[i:(i + look_back), 0])
Y.append(dataset[i + look_back, 0])
return np.array(X), np.array(Y)
look_back = 10
X_train, Y_train = create_dataset(train_data.values, look_back)
X_test, Y_test = create_dataset(test_data.values, look_back)
# 构建 LSTM 模型
model = Sequential()
model.add(LSTM(units=64, input_shape=(1, look_back)))
model.add(Dropout(0.2))
model.add(Dense(units=1))
model.compile(optimizer='adam', loss='mean_squared_error')
# 训练模型
model.fit(np.reshape(X_train, (X_train.shape[0], 1, X_train.shape[1])), Y_train, epochs=100, batch_size=32)
# 在测试集上进行预测
predicted = model.predict(np.reshape(X_test, (X_test.shape[0], 1, X_test.shape[1])))
# 绘制预测结果和实际结果的对比图
plt.plot(Y_test, color='blue', label='Actual')
plt.plot(predicted, color='red', label='Predicted')
plt.legend()
plt.show()
# 计算测试集的均方误差(MSE)
mse = np.mean((predicted - Y_test) ** 2)
print('MSE:', mse)
# 根据 MSE 值判断是否存在异常
if mse > threshold:
print('存在异常')
else:
print('不存在异常')
```
这个代码示例中,我们首先加载数据,并将其分为训练集和测试集。然后,我们将数据转换为适合 LSTM 模型的格式,并构建 LSTM 模型。接下来,我们在训练集上训练模型,并在测试集上进行预测。最后,我们绘制预测结果和实际结果的对比图,并根据均方误差(MSE)判断是否存在异常。
阅读全文