使用时序平滑窗口后的lstm时间序列预测python的代码
时间: 2023-06-01 12:02:00 浏览: 92
以下是使用时序平滑窗口后的LSTM时间序列预测Python代码示例:
``` python
import pandas as pd
import numpy as np
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import Dense, Dropout, LSTM
# Load data
df = pd.read_csv('data.csv', parse_dates=['date'], index_col='date')
# Split data into train and test sets
train_size = int(len(df) * 0.8)
train_data = df.iloc[:train_size]
test_data = df.iloc[train_size:]
# Scale data
scaler = MinMaxScaler(feature_range=(0, 1))
train_data_scaled = scaler.fit_transform(train_data)
test_data_scaled = scaler.transform(test_data)
# Define function for creating time series dataset
def create_time_series_dataset(data, window_size):
X, y = [], []
for i in range(len(data) - window_size):
X.append(data[i:i+window_size])
y.append(data[i+window_size])
return np.array(X), np.array(y)
# Create time series dataset with smoothing window
window_size = 30
train_data_smooth = train_data.rolling(window_size).mean().iloc[window_size-1:]
test_data_smooth = test_data.rolling(window_size).mean().iloc[window_size-1:]
train_X, train_y = create_time_series_dataset(train_data_smooth, window_size)
test_X, test_y = create_time_series_dataset(test_data_smooth, window_size)
# Define LSTM model
model = Sequential()
model.add(LSTM(units=50, return_sequences=True, input_shape=(train_X.shape[1], 1)))
model.add(Dropout(0.2))
model.add(LSTM(units=50, return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(units=50))
model.add(Dropout(0.2))
model.add(Dense(units=1))
# Compile model
model.compile(optimizer='adam', loss='mean_squared_error')
# Train model
model.fit(train_X, train_y, epochs=100, batch_size=32)
# Evaluate model on test data
test_X_reshaped = np.reshape(test_X, (test_X.shape[0], test_X.shape[1], 1))
test_y_pred = model.predict(test_X_reshaped)
test_y_pred_scaled = scaler.inverse_transform(test_y_pred)
test_y_scaled = scaler.inverse_transform(test_y)
mse = np.mean((test_y_pred_scaled - test_y_scaled)**2)
print('Test MSE: {:.2f}'.format(mse))
```
在此示例中,我们首先加载时间序列数据,并将其分为训练和测试集。然后,我们使用MinMaxScaler对数据进行缩放,以便将其转换为0到1之间的值。接下来,我们定义了一个函数来创建时间序列数据集,该函数将数据拆分为X和y,其中X是先前的时间步长,y是下一个时间步长。我们还使用滑动窗口对数据进行了平滑处理,以减少噪声。然后,我们定义一个LSTM模型,并将其编译和训练。最后,我们在测试数据集上评估了模型,并计算了均方误差。