使用python进行交通流量预测

目录

  • 项目流程
    • 项目地址
    • 项目概述
    • 对象分析
    • 模块介绍
      • 数据模块
        • 数据读取
        • 数据预处理
        • 数据特征提取
      • 残差模块
        • mae_loss
        • mse_loss
      • 模型模块
        • BP
        • SVR
        • LSSVR
        • GA_KNN_LSSVR
      • 可视化模块
        • line
        • wireframe
      • 任务模块
        • AggTask
        • DataTask
        • FeatureExtractTask
        • ModelTask
        • PlotTask

项目流程

项目地址

仓库地址

项目概述

前几天(好吧,是前几个月—拖延症癌患者),从一个小客户哪里收到了一批数据,没错,就是很小批量的数据,然后目标适用于解决交通流量预测等的问题。这本来是一个非常小非常小的项目,不过既然是第一次接到做交通流量预测的,当然要尽情搞事情。

首先是模型,什么SVM、LSSVM、SVR、BP等等传统,能上的都给他上上。然后使用模式,甭管是命令行工具还是绘图方式,能够写多少轮子就写多少轮子,所有的东西都是抽象抽象再抽象,我们的目标是没有最抽象只有更抽象。

既然决定,不单单只是做一个项目,而是决定在这个项目的基础上搞点东西,那么就要从头开始,所以,一开始就是先做架构了。

对象分析

我们先看看有哪些可以抽象出来的对象,首先,这是一个用于预测的模型项目,然后就有了第一个对象,模型,模型应该是用于预测和学习的。

然后,为了反馈预测,我们需要抽象一个残差对象,用于学习。

为了能够直观检验学习的效果,我们可能还需要对于部分学习效果进行可视化,因此需要构建一个绘图对象,用于将数据对象绘制成对应的图形。

由于拿到的数据比较参差,所以需要对数据进行预处理,按照时间聚合与分割,并且按照需要提取数据特征,因此需要构建数据提取过程的对象。

最后,为了连接数据端到模型端再到可视化端,我们需要构建一个管道对象,让整个数据流串接起来。

模块
模型
残差
可视化
管道

此外,由于客户的需求,我们还需要定制一些东西,比如我们要在模型中使用遗传算法来进行模型优化,所以我们也会构建一些ga相关的对象,比如个体,群体等。

然后,为了配置整个系统,要实现一个配置对象,去配置整个系统,可。

模块介绍

数据模块

数据模块基本负责了几件事情,数据读取、数据预处理和数据特征抽取。

数据
数据读取
数据预处理
数据特征抽取

数据读取

参考data/xlsx_reader.py,按照需求,我会收到一批xlsx类型的数据,也就是超表格数据。这里直接使用pandas中的read_excel提供能力。然后,在此基础上,提供数据串联与数据索引变更的能力。

数据预处理

参考data/preprocess_data.py,对于已经读取的数据进行必要的预处理流程,这里做的只是简单的正则化。

数据特征提取

参考data/extract_feature.py,这里选取一些数据特征用于预测下一时刻的数据,包括了时间滑动窗口内的均值、方差、一阶导数、二阶导数等。

残差模块

残差模块主要用于计算,目标值和预测值之间的残差,这些残差用于模型训练。整体上基于BaseLoss(参考lib/loss.py)模块实现。

loss
mae_loss
mse_loss

mae_loss

参考loss/mae_loss.py,计算均值残差。

mse_loss

参考loss/mse_loss.py,计算均方差残差。

模型模块

模型模块存储了主要的模型,这些模型负责了预测所使用的所有模型(至少是)。整体上,模型基于BaseModel(参考lib/model.py)实现。

model
BP
lssvr
svr
ga_knn_lssvr

BP

参考model/bp.py,BP神经网络模型。包含了标准的BP神经网络模型和带有遗传算法优化的BP神经网络。

SVR

参考model/svr.py,支持向量机模型。包含了标准的支持向量机和带有遗传算法优化的支持向量机模型。

LSSVR

参考model/lssvr.py,最小二乘向量机模型,包含了标准的最小二乘向量机模型和带有遗传算法优化的支持向量机模型。

GA_KNN_LSSVR

参考model/ga_knn_lssvr.py,knn+lssvr联合预测模型,当然也包含了遗传算法对模型优化。

可视化模块

可视化模块包含了将指定数据进行可视化的主要流程,主要是用于将指定的数据变化成可视化的图形。所有的可视化都是基于BasePlotable(参考lib/plot.py)。目前主要实现了线性图和网格图。

plot
line
wireframe

line

线性图,实现过程参考plot/line.py

wireframe

线框图,实现过程参考plot/wireframe.py

任务模块

主要的命令行任务过程,所有的task基于BaseTask模块(参考tasks/base_task.py)实现。主要是用于构建一系列的任务函数。主要实现的函数过程如下:

task
AggTask
DataTask
FeatureExtractTask
ModelTask
PlotTask

AggTask

聚合任务,参考tasks/agg_task.py实现,主要用于聚合不同数据文件中的数据。

DataTask

数据任务,参考tasks/data_task.py实现,主要处理数据任务,进行数据预测,获取数据残差。

FeatureExtractTask

特征提取任务,参考tasks/FeatureExtractTask实现,将原始数据按照时间进行聚合后,执行数据预处理和数据的特征提取。

ModelTask

模型任务,参考tasks/model_tasks.py,主要用于实现预测流程。

PlotTask

可视化任务,参考tasks/plot_tasks.py,主要用于实现可视化数据的流程。

(未完待续)

你可能感兴趣的:(技术实践类,个人探究,python,机器学习,ml)