跳转到主要内容

可再生能源行业的AutoML。

项目描述

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

GreenGuard

可再生能源行业的AutoML。

PyPI Shield Travis CI Shield Downloads Binder

GreenGuard

概述

GreenGuard项目是一系列针对监测风能发电系统常见机器学习问题的端到端解决方案。大多数任务都利用来自监测系统的传感器数据。我们利用麻省理工学院数据到人工智能实验室为机器学习自动化开发的基石创新。

本定制项目的显著特点包括

  • 一组适用于不同机器学习任务的现成、经过充分测试的流水线。这些流水线通过跨多个公开可用的数据集进行测试,以确保其适用性。
  • 一个易于使用的接口,用于指定任务、流水线并生成结果并总结它们。
  • 一个可部署的生产级流水线。
  • 一个易于使用的接口,使用贝叶斯调优和Bandits库来调整流水线。
  • 一个面向社区的框架,用于集成新的流水线。
  • 一个强大的持续集成和测试基础设施。
  • 一个记录所有历史结果的学习数据库 --> 任务、流水线、结果。

资源

安装

要求

GreenGuard已开发并可在Python 3.6、3.7和3.8上运行。

此外,尽管并非强制要求,但强烈建议使用virtualenv,以避免干扰您尝试在其中运行GreenGuard的系统上安装的其他软件。

下载和安装

您可以使用以下命令使用pip在本地安装GreenGuard

pip install greenguard

这将从PyPi拉取并安装最新的稳定版本。

如果您想从源代码安装或为项目做出贡献,请阅读贡献指南

Docker使用

GreenGuard已准备好在Docker环境中运行。请查看Docker文档以获取有关如何使用Docker运行GreenGuard的详细信息。

数据格式

GreenGuard系统期望的最小输入由以下两个元素组成,需要作为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格式

除了上面解释的内存数据格式,它受运行系统的内存分配能力限制之外,GreenGuard 也准备加载并处理以 CSV 文件集合存储的数据,大大增加了它能够处理的数据量。关于此格式的更多详细信息,可以在 项目文档网站 找到。

快速入门

在这个例子中,我们将加载一些演示数据并使用 GreenGuard 管道 对其进行分类。

1. 加载并拆分演示数据

第一步是加载演示数据。

为此,我们将导入并调用不带任何参数的 greenguard.demo.load_demo 函数

from greenguard.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. 探索可用的管道

一旦数据准备就绪,我们需要找到一个合适的管道。

可以使用 greenguard.get_pipelines 函数获取可用 GreenGuard 管道的列表。

from greenguard import get_pipelines

pipelines = get_pipelines()

返回的 pipeline 变量将是一个包含 GreenGuard 系统中所有管道名称的 list

['classes.unstack_double_lstm_timeseries_classifier',
 'classes.unstack_lstm_timeseries_classifier',
 'classes.unstack_normalize_dfs_xgb_classifier',
 'classes.unstack_dfs_xgb_classifier',
 'classes.normalize_dfs_xgb_classifier']

在本教程的其余部分中,我们将选择并使用 classes.normalize_dfs_xgb_classifier 管道作为模板。

pipeline_name = 'classes.normalize_dfs_xgb_classifier'

3. 调整管道

一旦我们加载了数据并选择了将要使用的管道,我们就必须调整它。

为此,我们将创建一个 GreenGuardPipeline 对象的实例,传递我们想要使用的管道的名称

from greenguard.pipeline import GreenGuardPipeline

pipeline = GreenGuardPipeline(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)

接下来是什么?

有关 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 文件,生成包含汇总标签和详细标签的 xlsx 文件,其中包含 run_benchmark 的结果。

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 上的第一个版本

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关 安装包 的更多信息。

源分发

greenguard-0.3.0.tar.gz (916.4 kB 查看哈希值)

上传时间

构建分发

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

上传时间 Python 2 Python 3

支持