企业做网站有用吗,wordpress网站怎么打开,最好的网站建设免费的,平面设计师是干啥的基于bilstm 时间序列预测模型
交通客流量预测#xff0c;单输入单输出先说说数据长啥样——某地铁站每小时客流量记录#xff0c;csv里就两列#xff1a;时间戳和人次。咱们要做的是用过去24小时的流量#xff0c;预测下个小时的情况。简单粗暴的单输入单输出结构#xff…基于bilstm 时间序列预测模型 交通客流量预测单输入单输出先说说数据长啥样——某地铁站每小时客流量记录csv里就两列时间戳和人次。咱们要做的是用过去24小时的流量预测下个小时的情况。简单粗暴的单输入单输出结构对刚入门的兄弟特别友好。上硬货先搞数据预处理def create_dataset(data, look_back24): X, y [], [] for i in range(len(data)-look_back-1): X.append(data[i:(ilook_back), 0]) y.append(data[i look_back, 0]) return np.array(X), np.array(y) scaler MinMaxScaler(feature_range(0, 1)) dataset scaler.fit_transform(raw_data) train_size int(len(dataset) * 0.8) train, test dataset[0:train_size,:], dataset[train_size:len(dataset),:] X_train, y_train create_dataset(train) X_test, y_test create_dataset(test)这段代码把原始数据压到0-1之间用滑动窗口生成时间步数据。注意这里用的是单特征归一化因为咱们只关心客流量的相对变化趋势。接下来是模型部分上BiLSTM的核心代码model Sequential() model.add(Bidirectional(LSTM(64, return_sequencesTrue), input_shape(24,1))) model.add(Dropout(0.3)) model.add(Bidirectional(LSTM(32))) model.add(Dense(1)) model.compile(lossmae, optimizeradam)这里用了两层双向LSTM第一层设置return_sequencesTrue是为了把时间步信息传递给下一层。Dropout设到0.3防止过拟合毕竟交通数据容易受突发事件干扰。输出层直接接个Dense(1)因为咱们只要预测下个小时的具体数值。训练时有个小技巧early_stop EarlyStopping(monitorval_loss, patience10) history model.fit(X_train, y_train, epochs100, batch_size32, validation_split0.2, callbacks[early_stop], verbose0)早停机制很重要避免在数据量不大时训练过度。实测发现MAE损失函数比MSE更适合客流预测因为异常值比如节假日突发大客流对MAE影响较小。看下预测效果train_predict model.predict(X_train) test_predict model.predict(X_test) plt.plot(scaler.inverse_transform(dataset), label真实值) plt.plot(range(24, 24len(train_predict)), scaler.inverse_transform(train_predict), label训练集预测) plt.plot(range(24len(train_predict), len(dataset)-1), scaler.inverse_transform(test_predict), label测试集预测)图像显示测试集预测曲线基本贴合真实走势但在早高峰时段会出现滞后——这是因为模型对突变峰值的响应不够灵敏。后续可以尝试在输入特征里加入天气因素或事件标记来改善。实际部署时记得把模型封装成实时预测服务def predict_next_hour(data_stream): latest_24h scaler.transform(np.array(data_stream[-24:]).reshape(-1,1)) prediction model.predict(latest_24h.reshape(1,24,1)) return scaler.inverse_transform(prediction)[0][0]这个函数接收实时数据流自动取最后24小时数据做预测。在生产环境中建议加上异常检测防止传感器故障数据污染预测结果。踩坑经验双向LSTM在时间序列预测中虽然强大但遇到周期性不明显的数据时可能会翻车。建议先用ARIMA这类传统模型做baseline对比之后再决定要不要上深度学习。另外GPU加速真香没卡的同学可以考虑减小batch_size或者用CuDNNLSTM优化速度。最后放个彩蛋把模型换成双向GRU有时预测速度能提升40%且精度基本持平不信你试试