基于深度高斯过程的交通流预测
前言
深度高斯过程作为近年来提出的一种新的深度学习方法,由于其强大的学习能力和对非线性数据的隐含细节特征的刻画,被广泛运用于非监督学习领域。与传统机器学习方法或深度学习方法不同,深度高斯过程从单个浅层高斯过程出发,通过使用变分推断的方法,解决了求解最大后验概率分布时的非解析解困境,从而能够在给出预测值的同时,还能从概率意义上刻画预测的不确定性,这种特性在时间序列预测领域中,尤其是在交通流预测中非常具有现实的意义。本文首次将深度高斯过程运用于交通流预测当中,主要工作如下
一、数据特性
交通系统是随时间变化且结构复杂的系统,其受行人、交通环境、天气状况等不确定因素的共同影响。当道路上车流密度较大,此时观察到的是“拥挤流”;而当道路上车流较小时,观察到交通流呈现“自由流”的特点。也就是说,交通流不仅仅是一个随机过程,还是一个不稳定的随机过程,但是,这种随机性并不意味着随机游走,一旦道路周围的人口密度和路网分布确定了,交通流的特征基本上也就随之确定,这就意味着交通流具有一定的记忆性。此外交通流量数据也具有随机性、波动性等特性
二、深度高斯建模过程
三、实验结果
利用工具箱% Netlab Toolbox% Version 3.3.1
代码如下(示例):
clear all
close all
data=importdata('数据.xls');
data1=data.data.Sheet1;
x=data1(:,2:5);
t=data1(:,1);
% Generate the matrix of inputs x and targets t.
randn('state', 42);
rand('state', 42);
ndata = length(t); % Number of data points.
% % noise = 0.2; % Standard deviation of noise distribution.
% % x = (linspace(0, 1, ndata))';
% % t = sin(2*pi*x) + noise*randn(ndata, 1);
mu = mean(x);
sigma = std(x);
tr_in = (x - mu)./(sigma);
% %
% % tr_in = [x x x];
% Set up network parameters.
nin =4; % Number of inputs.
nhidden = 7; % Number of hidden units.
nout = 1; % Number of outputs.
% Create and initialize network weight and parameter vectors.
net = rbf(nin, nhidden, nout, 'gaussian');
% Use fast training method
options = foptions;
options(1) = 1; % Display EM training
options(14) = 10; % number of iterations of EM
net = rbftrain(net, options, tr_in, t);
% Create a second RBF with thin plate spline functions
net2 = rbf(nin, nhidden, nout, 'tps');
% Re-use previous centres rather than calling rbftrain again
net2.c = net.c;
[y, act2] = rbffwd(net2, tr_in);
% Solve for new output weights and biases from RBF activations
temp = pinv([act2 ones(ndata, 1)]) * t;
net2.w2 = temp(1:nhidden, :);
net2.b2 = temp(nhidden+1, :);
% Create a third RBF with r^4 log r functions
net3 = rbf(nin, nhidden, nout, 'r4logr');
% Overwrite weight vector with parameters from first RBF
net3.c = net.c;
[y, act3] = rbffwd(net3, tr_in);
temp = pinv([act3 ones(ndata, 1)]) * t;
net3.w2 = temp(1:nhidden, :);
net3.b2 = temp(nhidden+1, :);
% Plot the data, the original function, and the trained network functions.
y = rbffwd(net, tr_in);
% y2 = rbffwd(net2,tr_in);
% y3 = rbffwd(net3,tr_in);
fh1 = figure;
plot(t, 'ob')
hold on
plot(y, '--g', 'LineWidth', 2)
legend('data', 'Gaussian RBF');
xlabel('Input')
ylabel('Target')
总结
深度高斯过程能够从数据中通过在后验推理引入变分推断,从而解决了后验概率中计算解析解困难的问题,通过最优化后验概率,模型能够自动获取各个层核函数的最佳超参数,具备更加自主的学习能力。 源码链接:https://mianbaoduo.com/o/bread/mbd-YZqcmJpq 参考文献: 【1】基于深度高斯过程的交通流预测_王赢逸
|