写一个用jupyter实现LSTM预测的代码,用自己的含四种特征的1000*4的数据集,要对数据标准化归一化,用variance-scaled归一化,优化器用Adam,要有L2正则化,激活函数用ReLU,模型每一层加一个偏差,要有训练集、测试集的预测图,有多个评价指标,
时间: 2023-11-26 19:04:36 浏览: 33
好的,以下是符合您要求的代码:
```python
import numpy as np
import pandas as pd
from sklearn.preprocessing import StandardScaler, MinMaxScaler
from keras.models import Sequential
from keras.layers import Dense, LSTM
from keras.regularizers import l2
from keras.optimizers import Adam
import matplotlib.pyplot as plt
# 读取数据集
data = pd.read_csv("your_dataset.csv")
# 数据预处理
scaler = StandardScaler()
data_scaled = scaler.fit_transform(data)
# 将数据集分为训练集和测试集
train_size = int(len(data_scaled) * 0.7)
train_data = data_scaled[:train_size, :]
test_data = data_scaled[train_size:, :]
# 准备数据
def create_dataset(dataset, look_back=1):
X, Y = [], []
for i in range(len(dataset)-look_back-1):
a = dataset[i:(i+look_back), :]
X.append(a)
Y.append(dataset[i + look_back, :])
return np.array(X), np.array(Y)
look_back = 60
train_X, train_Y = create_dataset(train_data, look_back)
test_X, test_Y = create_dataset(test_data, look_back)
# 构建模型
model = Sequential()
model.add(LSTM(64, input_shape=(look_back, 4), kernel_regularizer=l2(0.01), bias_regularizer=l2(0.01), return_sequences=True))
model.add(LSTM(32, kernel_regularizer=l2(0.01), bias_regularizer=l2(0.01)))
model.add(Dense(4, activation='relu', kernel_regularizer=l2(0.01), bias_regularizer=l2(0.01)))
model.compile(loss='mse', optimizer=Adam())
# 训练模型
history = model.fit(train_X, train_Y, epochs=100, batch_size=64, validation_split=0.1, verbose=2)
# 预测数据
train_predict = model.predict(train_X)
test_predict = model.predict(test_X)
# 反归一化
train_predict = scaler.inverse_transform(train_predict)
train_Y = scaler.inverse_transform(train_Y)
test_predict = scaler.inverse_transform(test_predict)
test_Y = scaler.inverse_transform(test_Y)
# 评估模型
def evaluate_model(Y, predict):
mse = np.mean((predict - Y)**2)
mae = np.mean(np.abs(predict - Y))
mape = np.mean(np.abs((predict - Y) / Y)) * 100
return mse, mae, mape
train_mse, train_mae, train_mape = evaluate_model(train_Y, train_predict)
test_mse, test_mae, test_mape = evaluate_model(test_Y, test_predict)
print("训练集 MSE: {:.4f}, MAE: {:.4f}, MAPE: {:.4f}%".format(train_mse, train_mae, train_mape))
print("测试集 MSE: {:.4f}, MAE: {:.4f}, MAPE: {:.4f}%".format(test_mse, test_mae, test_mape))
# 绘制预测图
def plot_predictions(Y, predict):
plt.plot(Y, label='实际值')
plt.plot(predict, label='预测值')
plt.legend()
plt.show()
plot_predictions(train_Y[:, 0], train_predict[:, 0])
plot_predictions(test_Y[:, 0], test_predict[:, 0])
```
请将 `your_dataset.csv` 替换为您自己的数据集名称。此外,您可以根据需要更改超参数的值。