交通流特征工程小技巧与思考

article/2025/10/6 7:15:44

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、交通流是什么?
  • 二、特征工程是什么?
  • 三、处理数据时的一些小技巧
  • 四、一些常用的机器学习python库
  • 总结


前言

小编最近参与了一些工程方面的工作,感触颇深,也逐渐意识到了一些做工程和做研究的区别,作为一个OR人,当面对工程问题时,ML也不得不被提上日程,对于一个OR的研究来说,很多参数可以假设,只需合理,但在工程中就需要数据清洗,分析以及准确的预测。今天就对交通流的特征工程方面做一些小小的分享,也欢迎各位大佬一起学习交流


提示:以下是本篇文章正文内容

一、交通流是什么?

交通流数据直接反映了交通状态,因此对于描述交通状况或者做交通方面的研究时具有重要性。交通流量数据主要记载了一段时间内,通过道路某一卡口的交通实体数,其具有时间相关性,表现为流量分布随着时间变化而变化,且不同的时间段有着显著不同的特征。所以一般来说我们都将交通流作为一个时间序列来进行分析。
而时间序列的研究一直是极为困难的:
问题1:特征维度数高,计算时间长
问题2:数据不充分和不平衡
问题3:时间依赖跨度未知,周期性和规律性难以把握。

当然对于交通流来说还存在空间上的问题,所以对于交通流预测这个老生常谈的问题一直都在出新,就是因为这个问题实际来说是很困难的。

二、特征工程是什么?

“数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。”特征工程目的是最大限度地从原始数据中提取特征以供算法和模型使用。因为对于机器学习来说,input 的定义是极其重要的,而当我们拿到一组交通流时间序列时,就要考虑如果把他们定义为更好的输入,通过总结和归纳,人们认为特征工程包括以下方面:
在这里插入图片描述图源知乎大佬:https://www.zhihu.com/question/29316149

对于交通流时间序列大致可以分为如下几类:【1】
1.形状特征。(序列的波形,波峰波谷等, 常见方法如DTW,CNN等)
2.时间依赖特征 (相邻或不相邻的片段提取依赖特征,常见方法如LSTM等)
3.序列变化特征 (空间变换,抑制噪声,常见方法如自编码,sequence2sequence等)

而对于交通流序列来说,一般都具有很明显的周期性,同时大部分都会存在早高峰和晚高峰两个峰值,而项链路段的交通流也会有很明显的相关性,于是GNN,GCN各种图神经网络便开始发挥出他们对地理位置的特征学习的优势,这也是现在交通流预测的一大主流方式之一。
当然一般来说如果人工选择了一些特征,如统计学特征:均值,方差,中位数,四分位数,众数等,或者形态学特征如:斜率,峰值等。我们需要做一些相关性分析。
做相关性检验可以使用相关系数、卡方检验、平均互信息、 条件熵、后验概率、逻辑回归权重等方法。

同时现在也出现了一些跳过feature space,直接使用end 2 end 的方法,如下图【2】,效果也非常不错,但是多多少少缺失了一些可解释性。仁者见仁智者见智。

Zhang X Y, Liu C L, Suen C Y. Towards robust pattern recognition: a review[J]. Proceedings of the IEEE, 2020, 108(6): 894-922.
在这里插入图片描述


三、处理数据时的一些小技巧

1.pd.read_csv()应该是我们最常见的读取数据的方式之一了,而其中有一个chunksize参数,可以选定每次读取数据的行数,当面对大规模数据时可以使用这个参数,防止memoryerror。

2.pandas检查数据缺失值
df.isna().sum()

3.⽤ isin 描述条件,而不是用for 加 if 的办法

4.异常值检测
孤立森林算法: from sklearn.ensemble import IsolationForest
该算法是一种基于聚类的无监督学习,实际效果还是不错的。

5.数据补全
a.贝叶斯张量分解(基于统计的方法)
b.可以用建立一个回归模型的方法来填补缺失值。(基于预测的方法)
c. 用GAN生成数据进行补全 (基于生成模型的方法)
安利一个好用的工具包 pandas-profiling.他可以很方便地生成分析报告。(包括特征之间的相关性分析)

6.数据预处理时不仅要出重和异常值,还要注意主键的唯一性验证,很多数据本身可能不符合三范式,数据属性要做有效性检验,这部分也要结合业务场景具体考虑。

7.对于交通流序列而言,一定要留心长尾情况,做一些处理。

8.数据的增强也是必要的,比如将数据倒叙,重新组合,变形等,可以达到扩大样本数量的作用,但要依实际情况考虑。

四、一些常用的机器学习python库

1.标准化
from sklearn.preprocessing import StandardScaler
2.min-max归一化
from sklearn.preprocessing import MinMaxScaler
3.二值化
from sklearn.preprocessing import Binarizer
4.缺失值补充(这里更新更好的方式包括贝叶斯张量分解等方法)
from sklearn.preprocessing import Imputer(默认为mean(均值)填充)
5.9种常见的机器学习回归模型
from sklearn.linear_model import LinearRegression
from sklearn.neighbors import KNeighborsRegressor
from sklearn.svm import SVR
from sklearn.tree import DecisionTreeRegressor
from xgboost import XGBRegressor
from sklearn.ensemble import RandomForestRegressor
from sklearn.ensemble import AdaBoostRegressor
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.ensemble import BaggingRegressor
(树模型的效果一般来说还是要更优秀的!)
6.可视化
import seaborn as sns
sns.tsplot() / sns.heatmap()

总结

以上内容都是一些不成熟不成体系的见解,而对于特征工程本身而言,如果想做一些创新就需要更加敏锐的sense,能够针对数据和问题的特性设计一些不那么“显而易见”的特征,使得你的feature和model更加work! 这也算是一种小创新。

【1】任守纲,张景旭,顾兴健,熊迎军,王浩云,徐焕良.时间序列特征提取方法研究综述[J].小型微型计算机系统,2021,42(02):271-278.
【2】Zhang X Y, Liu C L, Suen C Y. Towards robust pattern recognition: a review[J]. Proceedings of the IEEE, 2020, 108(6): 894-922.

作者:
王基光,清华大学,深圳国际研究生院,TBSI

关注我们
在这里插入图片描述

运小筹公众号
运小筹公众号是致力于分享运筹优化(LP、MIP、NLP、随机规划、鲁棒优化)、凸优化、强化学习等研究领域的内容以及涉及到的算法的代码实现。编程语言和工具包括Java、Python、Matlab、CPLEX、Gurobi、SCIP 等。


http://chatgpt.dhexx.cn/article/RMvAwCJo.shtml

相关文章

初等模型---交通流和道路通行能力

交通流的基本参数及其特性 为明确和简单起见,这里的交通流均指由标准长度的小型汽车在单方向的。 道路上行驶而形成的车流,没有外界因素如岔路、信号灯等的影响。 借用物理学的概念,将交通流近似看作一辆辆汽车组成的连续的流体,可以 用流量、…

交通流理论 第一章 绪论

第一章 绪论 1.1 交通流理论研究的内容和意义 交通流理论是运用物理学和数学的定律描述交通特性的交通工程学基础理论之一;道路设施可以分为两类:连续流和间断流设施。连续流设施为机动车流提供了相对连续的运行环境,几乎没有强制性阻断干扰…

数学小游戏:原创字谜几则

昨天晚上躺在床上发呆,想了几则数学字谜。下面每个式子都对应一个英文单词,例如的意思就是tank。 你能猜出多少个来呢? 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.

纵横字谜的答案

1.问题描述 输入一个r行c列(1<r,c<10)的网格&#xff0c;黑格用”*”表示&#xff0c;每个白格都填有一个字母&#xff0c;如果一个白格的左边相邻的位置或者边上相邻的位置没有白格&#xff08;可能是黑格&#xff0c;也可能除了网格边界&#xff09;&#xff0c; 则称…

猜字谜 C++

解析&#xff1a; 1.由于五位数*一位数等于六位数 而且万位等于第二位数各位所以A>3 2.D为1-9 3.整式变形为 DDDDDD/AABCAB 我们需判断一个每位数都一样的六位数除以一个3-9中的某个数A 结果需满足 万位等于十位等于A 千位等于个位 且没有余数 answer: #include<iostr…

猜字小游戏

文章目录 猜字小游戏猜字游戏升级版 猜字小游戏 编写程序 运行程序 猜字游戏升级版 编写程序 运行程序

纵横字谜的答案 (UVa232)

纵横字谜的答案 Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submit Status Description Crossword Answers A crossword puzzle consists of a rectangular grid of black and white squares and two lists of definitions (or descriptio…

Scratch 教程《元宵猜灯谜》

程序演示 元宵节到了&#xff0c;用Scratch给小朋友做一个猜灯谜游戏&#xff01; 课程引入 青玉案元夕 【宋】辛弃疾 东风夜放花千树&#xff0c;更吹落、星如雨。宝马雕车香满路。凤箫声动&#xff0c;玉壶光转&#xff0c;一夜鱼龙舞。 蛾儿雪柳黄金缕&#xff0c;笑语盈盈暗…

Python 猜字谜游戏

import random WORDS ("python","import","hello","difficult","easy") print("欢迎来到猜单词游戏&#xff0c;请将乱序后的单词组成正确的单词") iscontinue "y" while iscontinue"y" or…

c语言猜字谜(详解)(后附完整源码)

c语言猜字谜 一.游戏前置二.游戏实现1.让电脑生成随机数2.让玩家重复输入3.输赢判断 一.游戏前置 向其他游戏一样&#xff0c;在游戏开始前&#xff0c;我们需要一个菜单让玩家进行选择 所以我们需要以下功能 1.一个能让玩家进行选择的函数&#xff08;switch&#xff09; 2.玩…

猜字谜小游戏

猜字谜小游戏 思路 : 先写一个菜单函数,打印一个菜单,获取用户输入 从菜单函数中调用Game函数 写Game函数里面的内容 从主函数中调用菜单函数 #include<stdio.h> #include<stdlib.h>//里面包含rand函数,system函数 #include<time.h> void Game(void);//声明…

猜字谜游戏

一个非常简单的猜数字游戏&#xff0c;在一个限定的范围内&#xff0c;系统会给出一个随机的未知数&#xff0c;让玩家自己去猜&#xff0c;并且还会根据玩家输入的数给出相应的提示。如下图&#xff1a; 原理很简单&#xff0c;主要通过Random函数构建循环方法&#xff0c;再用…

【Flink】FLink Assigned key must not be null

1.场景1 1.1 概述 flink报错: Caused by: java.lang.NullPointerException: Assigned key must not be null! 具体如下 原因 keyBy的字段不能为null M.参考 Flink运行出现Assigned key must not be null

vuex报错Computed property “xxx“ was assigned to but it has no setter.

当使用vuex存储数据时&#xff0c;常常有这样的需求&#xff1a;输入框显示并动态修改state中的数据。 我们第一个反应就是使用v-model直接绑定state中的数据&#xff0c;虽然确实可以显示和修改&#xff0c;但是控制台会报错&#xff0c;所以不能采取这种方式。 案例如下&…

可编程渲染管线报错 Unity Universal RP asset not assigned

可编程渲染管线报错 Unity Universal RP asset not assigned 解决 1.创建urp资产 创建成功如下图 2.打开Edit > Project Settings… > Graphics 3.设置资产 如果你安装了URP包&#xff0c;当你编写自定义渲染管线时&#xff0c;既是你设置的上图资产也会报同样的错误。…

【Flink】FLink assigned slot xx was removed

1.概述 flink报错 org.apache.flink.util.FlinkException: The assigned slot container_e08_1539148828017_15937_01_003564_0 was removed. at org.apache.flink.runtime

Flink线上问题: The assigned slot container_xxx was removed

Flink线上问题: The assigned slot container_xxx was removed 客户现场使用Flink(on Yarn)进行数据抽取,Source是JDBC,Sink是Kafka,客户反映流程差不多跑10天左右就挂,让我看看. 环境: Flink: 1.5.2 jdk: 1.8.0_25 Hadoop: 2.4.1 jobmanger和TaskManger都分配1G内存 首先…

There‘s no Qt version assigned to project xxx.vcxproj for configuration Debug/x64

Qt系列文章目录 文章目录 Qt系列文章目录前言一、 分析错误原因二、解决步骤1.选择Qt版本2.检查环境变量3.重新构建工程 There’s no Qt version assigned to project xxx.vcxproj for configuration Debug/x64 前言 如果你想了解关于Qt与VS2019开发环境搭建&#xff0c;可以至…

SAP ABAP一组关键字 IS BOUND, IS NOT INITIAL和IS ASSIGNED的用法辨析

ABAP里的IS BOUND, IS NOT INITIAL和IS ASSIGNED这组关键字&#xff0c;如果平时不留心&#xff0c;很容易理解地似是而非。今天我们就来说一说它们的区别。 先把SAP帮助文档抄过来&#xff1a; IS BOUND It checks whether a reference variable contains a valid referenc…