在高方差时段(如节假日和体育赛事等等)准确的预测交通量,对于异常检测、资源分配、预算规划和其余相关的任务都是相当重要,这些任务有助于网约车大规模优化用户体验,然而,预测这些变量极具挑战性,由于这种极端事件预测取决于天气、城市人口增加和其余致使预测不肯定性的外部因素。近几年来,长短时间记忆网络技术以其端到端建模,易于映入外生变量和自动特征抽取的特色,成为了一种流行的时间序列建模框架。LSTM方法利用多个维度的大量数据,能够对复杂的非线性特征相互做用进行建模,这对于预测极端事件是相当重要的。在Lingxue Zhu和Nikolay Laptev发表在IEEE的一篇论文Deep and Confident Prediction for Time Series at Uber中,介绍一种新的端到端贝叶斯神经网络(BNN)结构,它能在大规模的状况下更精准地预测时间序列结果和不肯定性预测。前端
首先,咱们用函数python
接下来就详细介绍这三个方面。算法
模型不肯定性估计的关键就是后验分布 c#
接下来,咱们要经过BNN模型去解决潜在的模型错误识别的问题。咱们解决这一问题的方法是,在训练数据集中去预测那些具备彻底不一样模式的未知样本时获取的不肯定性,和经过训练一个从时间序列中自动抽取表明性特征编码器来肯定这种不肯定性的来源。在测试时,每个样本的编码效果都将会有助于计算样本集与训练集之间的距离。计算它们之间距离的另外一种方式是,使用一个encoder-decoder框架为全部训练集的时间序列拟合出一个潜在的embedding空间。这样,咱们就能够在这个embedding空间来测量测试样本和训练样本之间的距离。接下来,咱们须要解决的问题就是如何将这种错误识别和模型不肯定性结合起来。在这里,咱们采用了一个方法是,将encoder-decoder网络与一个预测网络链接起来,在推理时将其是为一个大网络,算法如图一所示:网络
最后,咱们来估计一下固有的噪声架构
该论文中的实验结果,是以lstm网络+全链接为基础产生的。该神经网络的完整结构主要包括两部分:(i)encoder-decoder框架,用于获得时间序列中的自有关系,而且在预训练期间就学习好(ii)预测网络,他的输入来自于encoder-decoder框架所学习到embedding层以及潜在的外部特性(如天气事件等)。这个鲁棒的体系结构以下图三所示:app
这里咱们从kaggle上找到数据集NYC Uber Pickups with Weather and Holidays,这个数据集有不少咱们须要的特征,可是咱们仍是须要对其处理一下,把区域字段合并,将节假日字段改成0-1数字表示,合并出来的数据如图四所示:框架
def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):
n_vars = 1 if type(data) is list else data.shape[1]
df = pd.DataFrame(data)
cols, names = list(), list()
# 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)]
# put it all together
agg = pd.concat(cols, axis=1)
agg.columns = names
# drop rows with NaN values
if dropnan:
agg.dropna(inplace=True)
return agg
复制代码
给定一个时间序列 yii
encoder_inputs = Input(shape=(train_X.shape[1], train_X.shape[2]))
encoder_lstm1 = LSTM((128), return_state=True,return_sequences=True)
encoder_outputs1, state_h1, state_c1 = encoder_lstm1(encoder_inputs)
drop_out1 = Dropout(0.05)
encoder_lstm2 = LSTM((64), return_state=True,return_sequences=False)
encoder_outputs2, state_h2, state_c2 = encoder_lstm2(encoder_outputs1)
drop_out2 = Dropout(0.05)
external_features = Input(shape=(6,))
print(external_features)
dense1 = Dense(128,activation='tanh')
temp = Concatenate(axis=1)([state_c2,external_features])
dense1_output = dense1(temp)
drop_out3 = Dropout(0.05)
dense2 = Dense(64,activation='tanh')
dense2_output = dense2(dense1_output)
drop_out4 = Dropout(0.05)
dense3 = Dense(16,activation='tanh')
dense3_output = dense3(dense2_output)
drop_out5 = Dropout(0.05)
dense4 = Dense(1,activation='tanh')
dense4_output = dense4(dense3_output)
model = Model(inputs=[encoder_inputs,external_features], outputs=dense4_output)
model.compile(loss='mse', optimizer='adam')
## fit network
input_list = []
input_list.append(train_X)
input_list.append(temp_train)
history = model.fit(input_list, train_y, epochs=1000, batch_size=10, validation_data=([test_X,temp_test], test_y), verbose=2,shuffle=False)
复制代码
咱们用LSTM模型和这个模型分别来预测咱们的数据,咱们使用前15024个小时的数据做为咱们的训练集合,剩下3024个小时的数据做为咱们的验证集,实验结果如图五(LSTM模型)和图六(论文模型)下:机器学习
这篇文章展现了一种用于Uber不肯定性估计的端到端神经网络结构。利用MC dropout和固有噪声估计,给出了一种为神经网络预测提供不肯定性估计的简单方法,它覆盖率大部分的不肯定性因素。这个框架的一个关键特性在于它不用修改底层架构的状况下适用于任何神经网络。用这种提出的不肯定性估计方法来对特殊事件(如假日,体育赛事,天气等等)的不肯定度进行了估计,提升了异常检测的精度。对于一些高不肯定性事件中,咱们能够对内部异常检测模型的置信区间进行调整,准确度能相应的提高,这有时能够为实际运营带来很大的提高。项目源码地址:https://momodel.cn/explore/5d3fb3121afd943289223b91?&tab=1&type=app
论文:Deep and Confident Prediction for Time Series at Uber论文:Long short-term memory 博客:Engineering Uncertainty Estimation in Neural Networks for Time Series Prediction at Uber论文:Learning phrase representations using rnn encoder-decoder for statistical machine translation博客:深度学习如何估计模型不肯定性(epistemic uncertainty)
Mo(网址:momodel.cn)是一个支持 Python 的人工智能在线建模平台,能帮助你快速开发、训练并部署模型。
Mo 人工智能俱乐部 是由网站的研发与产品设计团队发起、致力于下降人工智能开发与使用门槛的俱乐部。团队具有大数据处理分析、可视化与数据建模经验,已承担多领域智能项目,具有从底层到前端的全线设计开发能力。主要研究方向为大数据管理分析与人工智能技术,并以此来促进数据驱动的科学研究。
目前俱乐部每周六在杭州举办以机器学习为主题的线下技术沙龙活动,不按期进行论文分享与学术交流。但愿能汇聚来自各行各业对人工智能感兴趣的朋友,不断交流共同成长,推进人工智能民主化、应用普及化。