跳转到主要内容

时间序列的AutoML。

项目描述

DAI 麻省理工学院数据到AI实验室的开源项目。

Draco

时间序列的AutoML。

PyPI Shield Tests Downloads Binder

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。这是因为流程稍后将会根据traintest输入中的信息选择需要的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流程进行了重组和重命名。此外,我们还更新了一些依赖项以进行常规维护。

  • 更新Draco依赖项 - 问题 #66 由 @sarahmish 提出
  • 重组流程 - 问题 #63 由 @sarahmish 提出

0.1.0 - 2022-01-01

  • 首次发布在draco-ml PyPI上

之前的GreenGuard开发

0.3.0 - 2021-01-22

此版本将支持的Python版本提升到3.8,并包括安装要求的更改,其中pandasscikit-optimize包已更新以支持更高版本。这些更改与MLBlocksMLPrimitives的新版本一起发布。

内部改进

  • 修复run_benchmark正确生成流程的init_hyperparameters
  • 新的FPR指标。
  • 新的roc_auc_score指标。
  • 允许多个基准指标。
  • 基准允许使用多个 tprthreshold 值。

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 (917.1 kB 查看哈希值)

上传时间

构建分发

draco_ml-0.3.0-py2.py3-none-any.whl (42.7 kB 查看哈希值)

上传时间 Python 2 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面