时间序列的AutoML。
项目描述
麻省理工学院数据到AI实验室的开源项目。
时间序列的AutoML。
Draco
概述
Draco项目是一组端到端解决方案,用于解决时间序列监控系统常见的学习问题。大多数任务利用来自监控系统的传感器数据。我们利用麻省理工学院数据到人工智能实验室为机器学习自动化开发的根本性创新。
此定制项目的显著特点包括:
- 一套适用于不同机器学习任务的现成、经过充分测试的管道。这些管道已经通过多个公开数据集的测试,以验证其适用性。
- 一个易于使用的接口来指定任务、管道并生成结果并对其进行总结。
- 一个可用于生产的可部署管道。
- 一个易于使用的接口,使用贝叶斯调优和Bandits库来调整管道。
- 一个以社区为导向的基础设施,用于集成新的管道。
- 一个强大的持续集成和测试基础设施。
- 一个记录所有过去结果的
学习数据库
--> 任务、管道、结果。
资源
安装
要求
Draco已经开发并在Python 3.6、3.7和3.8上运行。
此外,尽管这不是强制性的,但强烈建议使用virtualenv,以避免干扰您尝试在其中运行Draco的系统上安装的其他软件。
下载和安装
Draco可以使用以下命令使用pip本地安装
pip install draco-ml
这将从PyPi拉取并安装最新稳定版本。
如果您想从源代码安装或为项目做出贡献,请阅读贡献指南。
数据格式
Draco系统期望的最小输入包括以下两个元素,需要作为pandas.DataFrame
对象传递
目标时间
一个包含我们正在解决的问题的规范的表,有三个列
turbine_id
:与该标签对应的涡轮机的唯一标识符。cutoff_time
:与此目标相关的时间。target
:我们想要预测的值。这可以是数值或分类标签。在准备仅用于预测而不用于拟合任何管道的数据时,可以跳过此列。
turbine_id | cutoff_time | target | |
---|---|---|---|
0 | T1 | 2001-01-02 00:00:00 | 0 |
1 | T1 | 2001-01-03 00:00:00 | 1 |
2 | T2 | 2001-01-04 00:00:00 | 0 |
读数
包含来自不同传感器的信号数据的表,具有以下列
turbine_id
:此读数来自的涡轮机的唯一标识符。signal_id
:此读数来自的信号的唯一标识符。timestamp (datetime)
:读数发生的时间,作为datetime。value (float)
:此读数的数值。
turbine_id | signal_id | timestamp | value | |
---|---|---|---|---|
0 | T1 | S1 | 2001-01-01 00:00:00 | 1 |
1 | T1 | S1 | 2001-01-01 12:00:00 | 2 |
2 | T1 | S1 | 2001-01-02 00:00:00 | 3 |
3 | T1 | S1 | 2001-01-02 12:00:00 | 4 |
4 | T1 | S1 | 2001-01-03 00:00:00 | 5 |
5 | T1 | S1 | 2001-01-03 12:00:00 | 6 |
6 | T1 | S2 | 2001-01-01 00:00:00 | 7 |
7 | T1 | S2 | 2001-01-01 12:00:00 | 8 |
8 | T1 | S2 | 2001-01-02 00:00:00 | 9 |
9 | T1 | S2 | 2001-01-02 12:00:00 | 10 |
10 | T1 | S2 | 2001-01-03 00:00:00 | 11 |
11 | T1 | S2 | 2001-01-03 12:00:00 | 12 |
涡轮机
可选地,可以添加第三个表,其中包含有关涡轮机的元数据。此表的要求是具有一个turbine_id
字段,并且可以具有任意数量的附加字段。
turbine_id | 制造商 | ... | ... | ... | |
---|---|---|---|---|---|
0 | T1 | Siemens | ... | ... | ... |
1 | T2 | Siemens | ... | ... | ... |
CSV格式
除了上面解释的内存中数据格式之外,该格式受运行系统的内存分配能力的限制,Draco也准备好加载和处理存储为CSV文件集合的数据,这极大地增加了它可以处理的数据量。有关此格式的更多详细信息,请参阅项目文档网站。
快速入门
在本例中,我们将加载一些示例数据,并使用Draco Pipeline对其进行分类。
1. 加载并拆分示例数据
第一步是加载示例数据。
为此,我们将导入并调用无任何参数的draco.demo.load_demo
函数
from draco.demo import load_demo
target_times, readings = load_demo()
返回的对象是
-
target_times
:一个包含target_times
表格数据的pandas.DataFrame
。turbine_id cutoff_time target 0 T001 2013-01-12 0 1 T001 2013-01-13 0 2 T001 2013-01-14 0 3 T001 2013-01-15 1 4 T001 2013-01-16 0
-
readings
:一个包含上述格式说明的时间序列数据的pandas.DataFrame
。turbine_id signal_id timestamp value 0 T001 S01 2013-01-10 323.0 1 T001 S02 2013-01-10 320.0 2 T001 S03 2013-01-10 284.0 3 T001 S04 2013-01-10 348.0 4 T001 S05 2013-01-10 273.0
在加载target_times
并继续训练任何机器学习流程之前,我们将它们分成两个部分进行训练和测试。
在这种情况下,我们将使用来自scikit-learn的train_test_split函数来分割它们,但也可以使用任何其他合适的工具。
from sklearn.model_selection import train_test_split
train, test = train_test_split(target_times, test_size=0.25, random_state=0)
请注意,我们只分割target_times
数据,而不是readings
。这是因为流程稍后将会根据train
和test
输入中的信息选择需要的readings
表部分。
此外,如果我们想稍后计算拟合优度得分,我们可以通过从test
表中移除它们来单独分离测试目标值。
test_targets = test.pop('target')
2. 探索可用的流程
一旦我们准备好了数据,我们需要找到一个合适的流程。
可以使用draco.get_pipelines
函数获取可用的Draco流程列表。
from draco import get_pipelines
pipelines = get_pipelines()
返回的pipeline
变量将是一个包含Draco系统中所有流程名称的list
。
['lstm',
'lstm_with_unstack',
'double_lstm',
'double_lstm_with_unstack']
在本教程的剩余部分,我们将选择并使用lstm_with_unstack
流程作为模板。
pipeline_name = 'lstm_with_unstack'
3. 调整流程
一旦我们加载了数据并选择了将要使用的流程,我们就需要调整它。
为此,我们将创建一个DracoPipeline
对象的实例,传递我们想要使用的流程名称
from draco.pipeline import DracoPipeline
pipeline = DracoPipeline(pipeline_name)
然后我们可以通过调用其fit
方法和传入训练target_times
以及完整的readings
表来直接调整它
pipeline.fit(train, readings)
4. 进行预测
在调整流程后,我们可以通过调用pipeline.predict
方法,传递测试target_times
和完整的readings
表来进行新数据的预测。
predictions = pipeline.predict(test, readings)
5. 评估拟合优度
最后,在做出预测后,我们可以使用任何合适的指标来评估预测的好坏。
from sklearn.metrics import f1_score
f1_score(test_targets, predictions)
接下来是什么?
有关Draco
及其所有可能性和功能的更多详细信息,请查阅项目文档站点。同时,不要忘记查看教程!
历史记录
0.3.0 - 2022-07-31
此版本从MLPrimitives
切换到ml-stars
。此外,我们移除了所有使用深度特征合成的流程。
- 更新演示存储桶 - 问题 #76 由 @sarahmish 提出
- 移除基于
dfs
的流程 - 问题 #73 由 @sarahmish 提出 - 从
MLPrimitives
迁移到ml-stars
- 问题 #72 由 @sarahmish 提出
0.2.0 - 2022-04-12
此版本对Draco
流程进行了重组和重命名。此外,我们还更新了一些依赖项以进行常规维护。
0.1.0 - 2022-01-01
- 首次发布在
draco-ml
PyPI上
之前的GreenGuard开发
0.3.0 - 2021-01-22
此版本将支持的Python版本提升到3.8
,并包括安装要求的更改,其中pandas
和scikit-optimize
包已更新以支持更高版本。这些更改与MLBlocks
和MLPrimitives
的新版本一起发布。
内部改进
- 修复
run_benchmark
正确生成流程的init_hyperparameters
。 - 新的
FPR
指标。 - 新的
roc_auc_score
指标。 - 允许多个基准指标。
- 基准允许使用多个
tpr
或threshold
值。
0.2.6 - 2020-10-23
- 在导出基准结果到
csv
文件时修复mkdir
。 - 包含每个管道的演示笔记本的管道中间步骤。
已解决的问题
- 问题 #50:在
GreenGuardPipeline
中公开部分输出和执行。
0.2.5 - 2020-10-09
随着这次发布,我们包括
run_benchmark
:模块benchmark
中的一个函数,允许用户评估模板针对不同窗口大小和重采样规则的问题。summarize_results
:一个函数,给定一个csv
文件,生成一个包含总结标签和详细标签(其中包含run_benchmark
的结果)的xlsx
文件。
0.2.4 - 2020-09-25
- 修复依赖错误
0.2.3 - 2020-08-10
- 添加了基准模块。
0.2.2 - 2020-07-10
内部改进
- 添加了 github actions。
已解决的问题
- 问题 #27:在磁盘上缓存预处理数据。
0.2.1 - 2020-06-16
随着这次发布,我们为用户提供了在创建 GreenGuardPipeline 时指定多个模板的可能性。当调用此处的 tune
方法时,返回 BTBSession 的一个实例,并负责选择模板和调整它们的超参数,直到达到最佳管道。
内部改进
- 在
CSVLoader
中通过文件名重采样,以避免对将不使用的数据进行过度采样。 - 现在选择目标允许它们相等。
- 修复了 csv 文件名格式。
- 升级到 BTB。
错误修复
- 问题 #33:默认的日期时间格式不正确
已解决的问题
- 问题 #35:选择目标过于严格
- 问题 #36:在 csvloader 中按文件名重采样
- 问题 #39:升级 BTB
- 问题 #41:修复 CSV 文件名格式
0.2.0 - 2020-02-14
第一个稳定版本
- 高效的数据加载和预处理
- 基于 dfs 和 lstm 的管道的初始收集
- 优化的管道调整
- 文档和教程
0.1.0
- PyPI 上的第一个版本
项目详情
下载文件
下载适合您平台的应用程序。如果您不确定要选择哪一个,请了解有关 安装包 的更多信息。
源分发
构建分发
draco-ml-0.3.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | fa8200c9dae4ec2189c1cfe13f5fcaad7766f272fd8da65d79b0abdaf65f794f |
|
MD5 | 31a24ffcfddf38dc5bebaecda924184b |
|
BLAKE2b-256 | eacf25b803c59b94e75c68e654c0fec10c669371a7ecdf456f3266d8435608f6 |