GRU模型交通量预测实例及代码
时间: 2024-01-26 16:02:20 浏览: 23
以下是一个基于GRU模型的交通量预测实例,代码使用Python和Keras库实现。
首先,我们需要导入所需的库:
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import Dense, GRU
```
然后,我们需要读取并预处理数据。这里我们使用了一个包含交通流量数据的CSV文件,其中每行代表一小时的流量数据。
```python
# 读取数据
data = pd.read_csv('traffic_data.csv', parse_dates=['datetime'])
data = data.set_index('datetime')
# 数据预处理
scaler = MinMaxScaler()
data['volume'] = scaler.fit_transform(data['volume'].values.reshape(-1, 1))
```
接下来,我们将数据集分为训练集和测试集,并将它们转换为适合GRU模型的格式。
```python
# 分割数据集
train_size = int(len(data) * 0.8)
train_data, test_data = data.iloc[:train_size], data.iloc[train_size:]
# 转换为适合GRU模型的格式
def create_dataset(X, y, time_steps=1):
Xs, ys = [], []
for i in range(len(X) - time_steps):
v = X.iloc[i:(i + time_steps)].values
Xs.append(v)
ys.append(y.iloc[i + time_steps])
return np.array(Xs), np.array(ys)
time_steps = 24
X_train, y_train = create_dataset(train_data, train_data['volume'], time_steps)
X_test, y_test = create_dataset(test_data, test_data['volume'], time_steps)
```
现在我们可以使用Keras来定义和训练GRU模型。
```python
# 定义模型
model = Sequential()
model.add(GRU(32, input_shape=(time_steps, 1)))
model.add(Dense(1))
# 编译模型
model.compile(optimizer='adam', loss='mse')
# 训练模型
history = model.fit(
X_train, y_train,
epochs=50,
batch_size=16,
validation_split=0.1,
verbose=1,
shuffle=False
)
```
最后,我们可以使用训练好的模型对测试集进行预测,并将结果可视化。
```python
# 预测测试集
y_pred = model.predict(X_test)
# 反归一化数据
y_pred = scaler.inverse_transform(y_pred)
y_test = scaler.inverse_transform(y_test.reshape(-1, 1))
# 可视化结果
plt.plot(y_test, label='实际值')
plt.plot(y_pred, label='预测值')
plt.legend()
plt.show()
```
完整代码如下:
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import Dense, GRU
# 读取数据
data = pd.read_csv('traffic_data.csv', parse_dates=['datetime'])
data = data.set_index('datetime')
# 数据预处理
scaler = MinMaxScaler()
data['volume'] = scaler.fit_transform(data['volume'].values.reshape(-1, 1))
# 分割数据集
train_size = int(len(data) * 0.8)
train_data, test_data = data.iloc[:train_size], data.iloc[train_size:]
# 转换为适合GRU模型的格式
def create_dataset(X, y, time_steps=1):
Xs, ys = [], []
for i in range(len(X) - time_steps):
v = X.iloc[i:(i + time_steps)].values
Xs.append(v)
ys.append(y.iloc[i + time_steps])
return np.array(Xs), np.array(ys)
time_steps = 24
X_train, y_train = create_dataset(train_data, train_data['volume'], time_steps)
X_test, y_test = create_dataset(test_data, test_data['volume'], time_steps)
# 定义模型
model = Sequential()
model.add(GRU(32, input_shape=(time_steps, 1)))
model.add(Dense(1))
# 编译模型
model.compile(optimizer='adam', loss='mse')
# 训练模型
history = model.fit(
X_train, y_train,
epochs=50,
batch_size=16,
validation_split=0.1,
verbose=1,
shuffle=False
)
# 预测测试集
y_pred = model.predict(X_test)
# 反归一化数据
y_pred = scaler.inverse_transform(y_pred)
y_test = scaler.inverse_transform(y_test.reshape(-1, 1))
# 可视化结果
plt.plot(y_test, label='实际值')
plt.plot(y_pred, label='预测值')
plt.legend()
plt.show()
```
这个实例展示了如何使用GRU模型进行交通流量预测。在实际应用中,可以根据具体情况调整模型的参数和超参数,并使用更多的特征和数据来提高预测精度。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)