其他
高斯混合模型判定交通拥堵状态
高斯混合模型(Gaussian Mixed Model,GMM)也是一种常见的聚类算法,与K均值算法类似,同样使用了EM算法进行迭代计算。高斯混合模型假设每个簇的数据都是符合高斯分布(又叫正态分布)的,当前数据呈现的分布就是各个簇的高斯分布叠加在一起的结果。
1交通流参数在交通流理论中,有三个参数来描述交通流:1.交通流量(Flow): 是单位时间内通过道路指定断面的车辆数(辆/h);
2.交通流速度(Speed): 即交通流的流速(m/s);
3.交通流密度(Density): 是单位道路长度内的车辆数(辆/公里).
这三者的关系为:
Flow = Speed * Density
如图,当道路车辆数较少时(即不拥堵状态, Free flow),车速通常较大;随着车辆增多(崩溃阶段, Breakdown), 密度变大,车速会降低,但是流量依旧增大;当流量达到最大流量时,道路车辆再增加,密度变大,车辆速度继续降低,流量开始降低;当密度过大(即拥堵状态, Congested),此时,速度低,流量低。
2数据展示
此数据集包含交通流速度和交通流量数据,是某段道路一个月内所有周一两分钟一个间隔的采样数据,其3D柱状图如下:
# author: geo_data_analysis@163.com
def show3D_Frequency(x, y):
fig = plt.figure()
ax = fig.add_subplot(111, projection = '3d')
# 划分格网统计频数
hist, xedges, yedges = np.histogram2d(x, y, bins=(50,30), normed = True)
xedges = xedges + (xedges[1] - xedges[0]) / 2
yedges = yedges + (yedges[1] - yedges[0]) / 2
xpos, ypos = np.meshgrid(xedges[:-1], yedges[:-1], indexing="ij")
r_xpos = xpos.ravel()
r_ypos = ypos.ravel()
dx = xedges[1] - xedges[0]
dy = yedges[1] - yedges[0]
dz = hist.ravel()
ax.bar3d(r_xpos, r_ypos, np.zeros(len(r_ypos)), dx, dy, dz, zsort='average')
max_z = max(dz)
CS = ax.contourf(xpos, ypos, dz.reshape((len(xpos), -1)), zdir='z', offset = -max_z, cmap=cm.coolwarm) #cm.coolwarm viridis
levels = CS.levels[::2]
CS2 = ax.contour(xpos, ypos, dz.reshape((len(xpos), -1)), levels = levels, zdir='z', offset = -max_z, colors = 'r', linewidths=(2,), origin = "lower")
cbar = fig.colorbar(CS)
cbar.ax.set_ylabel('Frequency')
cbar.add_lines(CS2)
ax.set_xlabel('SPEED')
ax.set_ylabel('FLOW')
ax.set_zlim(-max_z)
ax.view_init(27, -135)
ax.set_zlabel('Frequency')
plt.show()
3密度估计
对柱状图进行密度估计,如图:
4状态判定
因此我们可以根据Speed-Flow数据来判定该道路此时的拥堵状态:
# author: geo_data_analysis@163.com
def GMM_Predict(x, y):
# 训练
X_train = np.array([x, y]).T
gmm = mixture.GaussianMixture(n_components = 3, max_iter = 1000000)
gmm.fit(X_train)
# 预测类别
labels = gmm.predict(X_train)
# 预测每类的概率
pre_Y = gmm.predict_proba(X_train)
print(pre_Y)
# 画图
plt.scatter(X_train[:, 0], X_train[:, 1], c = labels, s=40, cmap = 'viridis');
plt.show()
参考文献:
Polson, N. , & Sokolov, V. . (2017). Bayesian particle tracking of traffic flows. IEEE Transactions on Intelligent Transportation Systems, 1-12.
如需源码,请后台回复: "高斯混合"