仓库地址
前几天(好吧,是前几个月—拖延症癌患者),从一个小客户哪里收到了一批数据,没错,就是很小批量的数据,然后目标适用于解决交通流量预测等的问题。这本来是一个非常小非常小的项目,不过既然是第一次接到做交通流量预测的,当然要尽情搞事情。
首先是模型,什么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.py
,计算均值残差。
参考loss/mse_loss.py
,计算均方差残差。
模型模块存储了主要的模型,这些模型负责了预测所使用的所有模型(至少是)。整体上,模型基于BaseModel
(参考lib/model.py
)实现。
参考model/bp.py
,BP神经网络模型。包含了标准的BP神经网络模型和带有遗传算法优化的BP神经网络。
参考model/svr.py
,支持向量机模型。包含了标准的支持向量机和带有遗传算法优化的支持向量机模型。
参考model/lssvr.py
,最小二乘向量机模型,包含了标准的最小二乘向量机模型和带有遗传算法优化的支持向量机模型。
参考model/ga_knn_lssvr.py
,knn+lssvr联合预测模型,当然也包含了遗传算法对模型优化。
可视化模块包含了将指定数据进行可视化的主要流程,主要是用于将指定的数据变化成可视化的图形。所有的可视化都是基于BasePlotable
(参考lib/plot.py
)。目前主要实现了线性图和网格图。
线性图,实现过程参考plot/line.py
。
线框图,实现过程参考plot/wireframe.py
。
主要的命令行任务过程,所有的task基于BaseTask
模块(参考tasks/base_task.py
)实现。主要是用于构建一系列的任务函数。主要实现的函数过程如下:
聚合任务,参考tasks/agg_task.py
实现,主要用于聚合不同数据文件中的数据。
数据任务,参考tasks/data_task.py
实现,主要处理数据任务,进行数据预测,获取数据残差。
特征提取任务,参考tasks/FeatureExtractTask
实现,将原始数据按照时间进行聚合后,执行数据预处理和数据的特征提取。
模型任务,参考tasks/model_tasks.py
,主要用于实现预测流程。
可视化任务,参考tasks/plot_tasks.py
,主要用于实现可视化数据的流程。
(未完待续)