背景
路况在地图渲染时候,会针对不同的拥堵情况选择不同颜色。一般来讲,道路拥堵情况分为三个状态,畅通,拥堵,缓行,分别用绿色,黄色,红色来渲染。
我们面临的问题是,已知道路属性以及通行速度,需要对路况状态进行分类。解决方案是依据第三方路况提供的路况状态以及抓取的高德路况状态来训练一个三分类模型。
特征处理
应用的特征如下
feature | description |
---|---|
speed | 路况速度 |
maxspeed | 道路最大速度 |
highway_level | 道路等级,共有17种可能,使用one-hot-encoding |
lanes | 车道数 |
oneway | 是否是单向路,使用one-hot-encoding |
路况状态使用 0-1-2 分别表示缓行-拥堵-畅通
处理好的特征使用**\t**分割的文本处理,最后一列代表路况状态。
模型训练
模型使用TensorFlow 提供的DNN分类器。代码如下
#-*- coding: utf-8 -*-
"""
File Name: traffic_status_classifier.py
Author: ce39906
mail: ce39906@163.com
Created Time: 2018-09-03 19:11:57
"""
import sys
import time
import numpy as np
import tensorflow as tf
FEATURES = [ "speed",
"maxspeed",
"level_1",
"level_2",
"level_3",
"level_4",
"level_5",
"level_6",
"level_7",
"level_8",
"level_9",
"level_10",
"level_11",
"level_12",
"level_13",
"level_14",
"level_15",
"level_16",
"level_17",
"lanes",
"oneway_0",
"oneway_1"]
def usage():
print "python %s ${train_data_file}" % (sys.argv[0])
def read_data(train_data_file):
xy_list = []
with open(train_data_file, 'r') as f:
for line in f:
line = line.strip('\n')
content = line.split('\t')
xy = [int(float(x)) for x in content]
xy_list.append(xy)
# 80% as train data, 20% as test data
train_xy = xy_list[ : int(len(xy_list) * 0.8)]
test_xy = xy_list[int(