可再生能源行业的AutoML。
项目描述
麻省理工学院数据到AI实验室的一个开源项目。
可再生能源行业的AutoML。
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
。这是因为管道稍后将负责根据 train
和 test
输入中找到的信息选择 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
,并在安装要求中进行了更改,其中 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
文件,生成包含汇总标签和详细标签的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 上的第一个版本
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关 安装包 的更多信息。