时间序列预测Python代码
时间: 2025-01-03 10:35:45 浏览: 8
### 时间序列预测的Python代码示例
对于时间序列预测,LSTM(长短期记忆网络)是一种非常有效的工具。下面提供了一个基于Keras库的时间序列预测模型实现案例[^1]。
```python
from pandas import DataFrame
from pandas import concat
from keras.models import Sequential
from keras.layers import Dense, LSTM
import numpy as np
def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):
"""
将一维时间序列数据转换成监督学习问题的形式.
参数:
data: 原始时间序列数据列表或NumPy数组.
n_in: 输入滞后观测的数量 (X).
n_out: 输出预测步数 (y).
dropnan: 是否删除含有NaN值的数据行.
返回:
转换成监督学习形式后的Pandas DataFrame对象.
"""
n_vars = 1 if type(data) is list else data.shape[1]
df = DataFrame(data)
cols, names = [], []
# input sequence (t-n, ... t-1)
for i in range(n_in, 0, -1):
cols.append(df.shift(i))
names += [('var%d(t-%d)' % (j+1, i)) for j in range(n_vars)]
# forecast sequence (t, t+1, ... t+n)
for i in range(0, n_out):
cols.append(df.shift(-i))
if i == 0:
names += [('var%d(t)' % (j+1)) for j in range(n_vars)]
else:
names += [('var%d(t+%d)' % (j+1, i)) for j in range(n_vars)]
agg = concat(cols, axis=1)
agg.columns = names
# 删除带有NaN值的行
if dropnan:
agg.dropna(inplace=True)
return agg
# 加载并准备数据集
raw_data = [x * 0.1 for x in range(0, 100)] # 创建简单线性增长型假数据作为例子
values = DataFrame(raw_data).values
data = series_to_supervised(values, 3)
train_size = int(len(data) * 0.67)
test_size = len(data) - train_size
train, test = data.iloc[:train_size], data.iloc[train_size:]
# 构建训练/测试输入输出
train_X, train_y = train.values[:, :-1], train.values[:, -1:]
test_X, test_y = test.values[:, :-1], test.values[:, -1:]
# reshape input to be 3D [samples, timesteps, features]
train_X = train_X.reshape((train_X.shape[0], 1, train_X.shape[1]))
test_X = test_X.reshape((test_X.shape[0], 1, test_X.shape[1]))
model = Sequential()
model.add(LSTM(50, activation='relu', input_shape=(train_X.shape[1], train_X.shape[2])))
model.add(Dense(1))
model.compile(loss='mse', optimizer='adam')
history = model.fit(train_X, train_y, epochs=200, batch_size=72, validation_data=(test_X, test_y), verbose=2, shuffle=False)
# 预测
predictions = model.predict(test_X)
for i in range(10): # 打印前十个预测结果对比实际值
print(f'Predicted={predictions[i]}, Expected={test_y[i]}')
```
此段代码展示了如何利用LSTM神经网络来处理时间序列预测任务,并通过简单的线性增长型模拟数据进行了演示。该实例中包含了几个重要部分:首先是`series_to_supervised()`函数用于将原始时间序列转化为适合机器学习算法使用的格式;接着是对数据集进行划分以及构建相应的特征矩阵和标签向量;最后则是定义、编译并拟合LSTM模型完成最终的预测工作[^2]。
阅读全文